๐ฉ๐ป ์ ๋ฆฌ๊ธ/๐ WIL
jwt.getClaimAsString()JSON Web Token (JWT) ์์ ํน์ ํด๋ ์์ ๋ฌธ์์ด๋ก ์ถ์ถํ๋ ๋ฉ์๋ โด๏ธ claim ์ด๋? ๐ JWT์ ํฌํจ๋ ์ ๋ณด๋ก, ์ฃผ๋ก ์ฌ์ฉ์ ์ ๋ณด๋ ๊ถํ ๋ฑ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์์ โณ๏ธ JWT ๊ตฌ์ฑHeader : ํ ํฐ ํ์
๊ณผ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ํฌํจPayload : ํด๋ ์ ๋ฐ์ดํฐ ํฌํจSignature : ํ ํฐ์ด ๋ณ์กฐ๋์ง ์์์์ ํ์ธํ๋ ์๋ช
getClaimAsString()์ ๋์์
๋ ฅ : ํด๋ ์์ ํค๋ฅผ ์ ๋ฌ์ถ๋ ฅ : ํด๋น ํด๋ ์์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐํ// JWT ๊ฐ์ฒด๊ฐ ์๋ค๊ณ ๊ฐ์ String username = jwt.getClaimAsString("username");String role = jwt.getClaimAsString("role");System..
๐ฉ๐ป ์ ๋ฆฌ๊ธ/๐ฃ ํธ๋ฌ๋ธ์ํ
์ด๋ค ์ํฉ์ด์๋์ง ? gradle project๋ฅผ loadํ๋ ๊ณผ์ ์์ ๋ฐ์ํ ๋ฌธ์ ๋ค. JDK๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋๊ณ ํ๊ฒฝ ๋ณ์(JAVA_HOME)๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง๋ ํ์ธํ๋ค. ์บ์๋ฅผ ์ญ์ ํ๊ณ ๋ค์ buildํด๋ ๋๊ฐ๊ธธ๋ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํด์ก๋ค. ํด๊ฒฐ 1. devleopment ๋ธ๋์น๋ก checkout ํ๋์ง ํ์ธ ์ฒ์์๋ master ๋ธ๋์น์ ์๋ build.gradle ํ์ผ์ loadํ๋ค. development ๋ธ๋์น์ ์๋ ๊ฒ์ผ๋ก reload ํด๋ณด๋ ๋ช๋ช ํ๋ก์ ํธ๋ ์ build๋์์ง๋ง ์์ง๊น์ง ํด๊ฒฐ๋์ง ์์ ํ๋ก์ ํธ๊ฐ ๋จ์์์๋ค. ํด๊ฒฐ 2. gradle-wrapper.properties ํ์ผ์์ distributionUrl ๐ gradle ๋ฒ์ ๋ฎ์ถ๊ธฐdistributionUr..
๐ฉ๐ป ์ ๋ฆฌ๊ธ/๐ WIL
ํ์ ํ๋ก์ ํธํ ๋ DTO๋ ๋ง์ด ์ฌ์ฉํ์ง๋ง, Resource ๊ฐ๋
์ ์ฌ์ฉํ ์ ์ด ์์๋ค.Resource๊ฐ ๋ญ๋ฐ ? ResourceRESTful API์์ ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋ ๋ฆฌ์์ค๐ REST API์์ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฒด ์ค๋ฌด ํ๋ก์ ํธ์์๋ Resource๋ฅผ RequestBody๋ก ๋ฐ์ ํ DTO๋ก ๋ค์ convert ํ๊ณ ์์convert๋ DTO๋ฅผ ์๋น์ค ๊ณ์ธต์์ ์ฌ์ฉํ๊ณ ๋ค์ Resource๋ก convertํ์ฌ ๋ฐํํจ DTO (Data Transfer Object)๋ฐ์ดํฐ ์ ์ก์ฉ ๊ฐ์ฒด๋ก, ๋คํธ์ํฌ ๊ฐ ๋๋ ๋ ์ด์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ ์ปจํธ๋กค๋ฌ์ ์๋น์ค ๊ณ์ธต ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ์น ์์ฒญ์ด๋ ์๋ต ๋ฐ์ดํฐ Entity๋ฐ์ดํฐ๋ฒ ์ด์ค์์..
๐ฉ๐ป ์ ๋ฆฌ๊ธ/๐ฃ ํธ๋ฌ๋ธ์ํ
โ ENUM ํ์
์์๋ @NotBlank ์ฌ์ฉ XNo validator could be found for constraint 'javax.validation.constraints.NotBlank' ENUM ํ์
์ ํ๋์ @NotBlank ์ด๋
ธํ
์ด์
์ ๋ถ์ด๊ณ , ์์ฒญ์ ๋ณด๋๋๋ ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, @NotBlank๋ CharSequence์๋ง ์ ์ฉ๋๋ฏ๋ก Enum ํ์
์ ํ๋์์๋ ์ฌ์ฉํ ์ ์๋ค. โจ CharSequence๐ ๋ฌธ์์ด์ ๋ํ๋ด๋ ์ธํฐํ์ด์ค๐ String, StringBuilder, StringBuffer, CharBufferโณ๏ธ @NotBlank, @NotNull, @NotEmpty ์ฐจ์ด @NotBlank๐ ๋ฌธ์์ด ํ๋๊ฐ null์ด ์๋๊ณ ๋น ๋ฌธ์์ด์ด ์๋์ด์ผ ..
๐ฉ๐ป ์ ๋ฆฌ๊ธ/๐ WIL
@ToString(doNotUseGetters = true)toString() ๋ฉ์๋ ์๋ ์์ฑgetter ๋ฉ์๋ ์ฌ์ฉํ์ง ์๊ณ ํ๋์ ๊ฐ์ ์ง์ ์ ๊ทผํ์ฌ toString() ๋ฉ์๋ ์์ฑ @VersionJPA/Hibernate์์ ์ํฐํฐ์ ๋ฒ์ ๊ด๋ฆฌ ๐ @Version์ด ๋ถ์ ํ๋๋ ์ํฐํฐ์ ๋ฒ์ ์ ๋ํ๋DB ๋์์ฑ ๋ฌธ์ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉ๋๊ด์ ๋ฝ(Optimistic lock) ์ง์์ํฐํฐ๊ฐ ์์ ๋ ๋๋ง๋ค ์๋์ผ๋ก ์ฆ๊ฐ DB์์ ์ํฐํฐ๋ฅผ ์
๋ฐ์ดํธํ ๋, ํด๋น ์ํฐํฐ์ ๋ฒ์ ์ด ์ด์ ์ ๋ก๋๋ ๋ฒ์ ๊ณผ ์ผ์นํ์ง ํ์ธ ๋ง์ฝ ์ผ์นํ์ง ์๋๋ค๋ฉด, ๋ค๋ฅธ ํธ๋์ญ์
์ด ํด๋น ์ํฐํฐ๋ฅผ ๋จผ์ ์์ ํ์ผ๋ฏ๋ก OptimisticLockException ๋ฐ์ โณ๏ธ ๋๊ด์ ๋ฝ (Optimistic Locking) ์ด๋ ?๐ ๋ฐ์ดํฐ๋ฒ ์ด..
๐ฉ๐ป ์ ๋ฆฌ๊ธ/๐ ํ๊ณ
์ฑ์ฉ ์ฐ๊ณํ ์ธํด ํฉ๊ฒฉ์ด๋ผ๋ ์์์ ๋ฃ๊ณ 3๊ฐ์์ด ์ง๋ฌ๋ค. 3๊ฐ์ ๊ฐ ์ง๋ด๋ฉด์ ๋๊ผ๋ ์ ๊ณผ ์์ผ๋ก์ ๊ณํ์ ์ธ์๋ณด๊ณ ์ ํ๋ค..3๊ฐ์ ๋์...ํ์ฌ ์ํ ์ ์ (9-6)ํ๋ก์ ํธ ์ฐธ์ฌํ๊ธฐ ๋๊ธฐ๋ค๊ณผ ์นํด์ง๊ธฐ์
๋ฌด ํ์
ํ๊ธฐPT ๋ฐ ์ ํ ์ฌ์ฌ ์ค๋น์ฃผ๋ง๊ณผ ํด๊ทผ ํ์ ์ํ์ ์ฌ์ ๋กญ๊ฒ ์ฆ๊ธฐ๊ธฐ ๋๋ต ์์ฑํด๋ณด๋ฉด ์์ ๊ฐ๋ค. ์ํ๋ ํ์ ๋ค์ด๊ฐ๊ฒ ๋์ด์ Kotlin, WebFlux, AWS, Spring, NoSQL ๋ฑ๋ฑ,,,์ ํ๋ ์์ํฌ์ ์ธ์ด๋ค์ ์ฌ์ฉํ๋ฉฐ ์ค๋ฌด ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ธฐ๋ ํ๋ค. ์ฝํ
์์ ์ฌ์ฉํ๋ DFS๋ฅผ ์ค๋ฌด์ ํ์ฉํ๋ฉด์ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๋๊ปด๋ณด๊ธฐ๋ ํ๋ค. ์๊ฐ์ด ๋ ๋๋ง๋ค ๋ค๋ฅธ ์ฌ๋๋ค์ ๊นํ๋ธ์ ๋ค์ด๊ฐ์ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์ฐธ์ฌํ๋ ๊ตฌ๊ฒฝํ๊ธฐ๋ ํ๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ฉด ๋ด๊ฐ ์์ง๋ ๋ถ์กฑํ๋ค๋ ๊ฒ์ ํ์คํ ๋๋ ์..