๐ ๋ค์ด๊ฐ๋ฉฐ
์๋ ํ์ธ์! ์ค๋์ Spring Boot ํ๋ก์ ํธ ๊ฐ๋ฐ ์ค ๊ฒช์๋ ์ธ์ ๊ด๋ จ ๋ฌธ์ ์ ํด๊ฒฐ ๊ณผ์ ์ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค.
๊ฐ๋ฐ์๋ผ๋ฉด ๋๊ตฌ๋ ํ ๋ฒ์ฏค ๊ฒช์ด๋ดค์ ๋ฌธ์ ์ผ ํ ๋ฐ์, "์ฝ๋ ์์ ํ ๋๋ง๋ค ๋ก๊ทธ์ธ์ด ํ๋ ค์ ๋ค์ ๋ก๊ทธ์ธํด์ผ ํ๋ ๊ทธ๋ฌธ์ "
๐จ ๋ฌธ์ ๋ฐ์: "๋ ๋ก๊ทธ์ธ์ด ํ๋ ธ๋ค?"
์ํฉ
Spring Boot + Thymeleaf๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ์์๋๋ฐ, ์ฝ๋๋ฅผ ์์ ํ๊ณ ์ ์ฅํ ๋๋ง๋ค ๋ค์๊ณผ ๊ฐ์ ํ์์ด ๋ฐ์ํ์ต๋๋ค:
1. ๋ก๊ทธ์ธ ์๋ฃ โ
2. ๊ฐ๋ฐ ์์
์ค... ๐ป
3. ์ฝ๋ ์์ ํ ์ ์ฅ ๐
4. DevTools๊ฐ ์๋์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ฌ์์ ๐
5. ๋ธ๋ผ์ฐ์ ์์ ํ์ด์ง ์๋ก๊ณ ์นจ ๐
6. "๊ถํ์ด ์์ต๋๋ค" ์๋ฌ + ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ๐ฑ
์ผ๋ง๋ ๊ท์ฐฎ์๋๋ฉด...
- ํ๋ฃจ์ ๋ช์ญ ๋ฒ์ฉ ๋ค์ ๋ก๊ทธ์ธ ๐ญ
- ๊ฐ๋ฐ ํ๋ฆ์ด ๊ณ์ ๋์ด์ง
- ์ง์ค๋ ฅ ์ ํ๋ก ์์ฐ์ฑ ๊ธ๊ฐ
ํนํ ๊ถํ ์์คํ ์ ๊ฐ๋ฐํ๊ณ ์์๋๋ฐ, ๊ถํ๋ณ๋ก ๋ค๋ฅธ ํ๋ฉด์ ํ ์คํธํ๋ ค๋ฉด ๋งค๋ฒ ๋ค์ ๋ก๊ทธ์ธํด์ผ ํ๋๊น ์ ๋ง ์คํธ๋ ์ค์์ด์!
๐ ์์ธ ํ๊ตฌ: "๋ญ๊ฐ ์ด์ํ๋ฐ?"
์ด์ํ ๊ฑด ์ธ์ ์์ ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ฌ๋ผ์ง๋ค๋ ์ ์ด์์ด์:
// ์ธ์
ํ์ธ ๊ฒฐ๊ณผ
session.getAttribute("accessToken") // โ
์์
session.getAttribute("isMasterPrivilege") // โ
์์
session.getAttribute("pageAccessRightSettings") // โ ์์!!
"๋ญ์ง? ์ ์ผ๋ถ๋ง ์ฌ๋ผ์ง์ง?" ๐ค
๐ง ๋ฒ์ธ์ ์ฐพ์๋ผ: Serializable์ ๋ฐฐ์
๊ฐ์ค ์ค์
์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ฌ๋ผ์ง๋ค๋ ๊ฑด ์ง๋ ฌํ(Serialization) ๋ฌธ์ ์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ฝ๋ ํ์ธ
// String ํ์
๋ค (๊ธฐ๋ณธ ์ง๋ ฌํ ๊ฐ๋ฅ)
String accessToken = "JWTํ ํฐ"; // โ
String isMasterPrivilege = "1"; // โ
// ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด (์์ฌ์ค๋ฌ์ด ๋
์)
PageAccessRightSettings pageSettings = new PageAccessRightSettings(); // โ?
๋ฒ์ธ ๋ฐ๊ฒฌ!
PageAccessRightSettings ํด๋์ค๋ฅผ ํ์ธํด๋ณด๋:
@Data
public class PageAccessRightSettings {
// โ Serializable ๊ตฌํ ์๋จ!
private String monitoringPage;
private String userManagementPage;
private String deviceManagementPage;
// ...
}
๋ฐ๋ก ์ด๊ฒ์ด์์ต๋๋ค! ๐ก
์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋?
- Spring DevTools ์ฌ์์ → ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ์๋ก ์์ฑ
- ์ธ์ ๋ฐ์ดํฐ ์ง๋ ฌํ ์๋ → String์ ์ฑ๊ณต, ์ฌ์ฉ์ ๊ฐ์ฒด๋ ์คํจ
- ์ง๋ ฌํ ์คํจํ ๊ฐ์ฒด๋ง ์ธ์ ์์ ์ ๊ฑฐ
- ๊ถํ ์ฒดํฌ ์ pageAccessRightSettings ์์ → ์ธ์ฆ ์คํจ
๐ ๏ธ ํด๊ฒฐ ๊ณผ์ : "์ด๋ ๊ฒ ํด๋ณด์!"
ํด๊ฒฐ์ฑ : Serializable ๊ตฌํ โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ
@Data
public class PageAccessRightSettings implements Serializable {
private static final long serialVersionUID = 1L;
private String monitoringPage;
private String userManagementPage;
private String deviceManagementPage;
private String userSendPage;
private String accessHistoryPage;
private String schedulePage;
private String groupManagementPage;
private String clientSettingPage;
}
๐ฏ ์ต์ข ํด๊ฒฐ: "๋๋์ด ํํ๊ฐ ์๋ค!"
์ ์ฉ ๊ฒฐ๊ณผ
- Serializable ๊ตฌํ → ์ธ์ ์์ ๊ถํ ์ ๋ณด ์ฌ๋ผ์ง์ง ์์ โ
ํ ์คํธ ๊ฒฐ๊ณผ
โ
์ฝ๋ ์์ ํ ์ ์ฅ
โ
DevTools ์๋ ์ฌ์์
โ
๋ธ๋ผ์ฐ์ ์๋ก๊ณ ์นจ
โ
๋ก๊ทธ์ธ ์ํ ์ ์ง! (๊ถํ ์ ๋ณด ํฌํจ)
โ
๊ฐ๋ฐ ์์
๊ณ์ ์งํ ๊ฐ๋ฅ!
์ฑ๋ฅ ํฅ์
- ๋ก๊ทธ์ธ ํ์: ํ๋ฃจ 30ํ → 1ํ ๐
- ๊ฐ๋ฐ ์ง์ค๋: ๋ํญ ํฅ์ ๐
- ์คํธ๋ ์ค ์ง์: ๊ธ๊ฐ ๐
๐ก ๋ฐฐ์ด ์ ๋ค
1. Java ์ง๋ ฌํ์ ์ค์์ฑ
// ์ธ์
์ ์ ์ฅํ ๊ฐ์ฒด๋ ๋ฐ๋์ Serializable ๊ตฌํ!
public class MyData implements Serializable {
private static final long serialVersionUID = 1L;
// ...
}
๐ ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด์ "์์ ๊ฒ์ด ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ ๋ค"๋ ๊ฒ์ ๋ค์ ํ๋ฒ ๋๊ผ์ต๋๋ค.
implements Serializable ํ ์ค ์ถ๊ฐ๋ก:
- ๊ฐ๋ฐ ํจ์จ์ฑ ๋ํญ ํฅ์ ๐
- ์คํธ๋ ์ค ํด์ ๐
- ์๋ก์ด ์ง์ ์ต๋ ๐ง
๊ฐ๋ฐ์ ์ฌ๋ฌ๋ถ๊ป ๋๋ฆฌ๋ ํ ๐ฌ
- ์ธ์ ์ ์ ์ฅํ ๊ฐ์ฒด๋ ๊ผญ Serializable ๊ตฌํํ์ธ์!
- ๊ฐ๋ฐ ํ๊ฒฝ์ ์์ ๋ถํธํจ๋ ๋ฌด์ํ์ง ๋ง์ธ์
- ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์์ ๊ทผ๋ณธ ์์ธ์ ์ฐพ๋ ์ต๊ด์ ๊ธฐ๋ฅด์ธ์
ํน์ ๋น์ทํ ๋ฌธ์ ๋ก ๊ณ ์ํ๊ณ ๊ณ์ ๋ถ๋ค๊ป ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค!
์ง๋ฌธ์ด๋ ๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ผ์๋ฉด ๋๊ธ๋ก ๊ณต์ ํด์ฃผ์ธ์~ ๐
#Spring Boot #์ธ์ ๊ด๋ฆฌ #DevTools #Serializable #๊ฐ๋ฐ์ผ์ง #๋ฌธ์ ํด๊ฒฐ #Java #๋ฐฑ์๋๊ฐ๋ฐ