๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ“– WIL

[๐Ÿ“– WIL] jwt.getClaimAsString()

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..

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ’ฃ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

[๐Ÿ’ฃ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Could not move temporary workspace

์–ด๋–ค ์ƒํ™ฉ์ด์—ˆ๋Š”์ง€ ?  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

[๐Ÿ“– WIL] DTO, Resource, Entity

ํ‰์†Œ ํ”„๋กœ์ ํŠธํ•  ๋•Œ DTO๋Š” ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, Resource ๊ฐœ๋…์€ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์—ˆ๋‹ค.Resource๊ฐ€ ๋ญ”๋ฐ ?  ResourceRESTful API์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๐Ÿ‘‰ REST API์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Resource๋ฅผ RequestBody๋กœ ๋ฐ›์€ ํ›„ DTO๋กœ ๋‹ค์‹œ convert ํ•˜๊ณ  ์žˆ์Œconvert๋œ DTO๋ฅผ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์‹œ Resource๋กœ convertํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•จ DTO (Data Transfer Object)๋ฐ์ดํ„ฐ ์ „์†ก์šฉ ๊ฐ์ฒด๋กœ, ๋„คํŠธ์›Œํฌ ๊ฐ„ ๋˜๋Š” ๋ ˆ์ด์–ด ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค ๊ณ„์ธต ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ์›น ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต ๋ฐ์ดํ„ฐ  Entity๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜..

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ’ฃ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

[๐Ÿ’ฃ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] @NotBlank, @NotNull, @NotEmpty, @DateTimeFormat ์‚ฌ์šฉ๋ฒ•

โ›” 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

[๐Ÿ“– WIL] ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํด๋ž˜์Šค

@ToString(doNotUseGetters = true)toString() ๋ฉ”์„œ๋“œ ์ž๋™ ์ƒ์„ฑgetter ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•„๋“œ์˜ ๊ฐ’์„ ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ toString() ๋ฉ”์„œ๋“œ ์ƒ์„ฑ @VersionJPA/Hibernate์—์„œ ์—”ํ‹ฐํ‹ฐ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ๐Ÿ‘‰ @Version์ด ๋ถ™์€ ํ•„๋“œ๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ„DB ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋‚™๊ด€์  ๋ฝ(Optimistic lock) ์ง€์›์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ฆ๊ฐ€ DB์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ, ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์˜ ๋ฒ„์ „์ด ์ด์ „์— ๋กœ๋“œ๋œ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•œ์ง€ ํ™•์ธ ๋งŒ์•ฝ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋จผ์ € ์ˆ˜์ •ํ–ˆ์œผ๋ฏ€๋กœ OptimisticLockException ๋ฐœ์ƒ โœณ๏ธ ๋‚™๊ด€์  ๋ฝ (Optimistic Locking) ์ด๋ž€ ?๐Ÿ‘‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด..

๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€/๐Ÿ“ ํšŒ๊ณ 

[๐Ÿ“˜ ํšŒ๊ณ ] ์ธํ„ด 3๊ฐœ์›” ํ›„ . . .

์ฑ„์šฉ ์—ฐ๊ณ„ํ˜• ์ธํ„ด ํ•ฉ๊ฒฉ์ด๋ผ๋Š” ์†Œ์‹์„ ๋“ฃ๊ณ  3๊ฐœ์›”์ด ์ง€๋‚ฌ๋‹ค. 3๊ฐœ์›” ๊ฐ„ ์ง€๋‚ด๋ฉด์„œ ๋Š๊ผˆ๋˜ ์ ๊ณผ ์•ž์œผ๋กœ์˜ ๊ณ„ํš์„ ์„ธ์›Œ๋ณด๊ณ ์ž ํ•œ๋‹ค..3๊ฐœ์›” ๋™์•ˆ...ํšŒ์‚ฌ ์ƒํ™œ ์ ์‘ (9-6)ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌํ•˜๊ธฐ ๋™๊ธฐ๋“ค๊ณผ ์นœํ•ด์ง€๊ธฐ์—…๋ฌด ํŒŒ์•…ํ•˜๊ธฐPT ๋ฐ ์ „ํ™˜ ์‹ฌ์‚ฌ ์ค€๋น„์ฃผ๋ง๊ณผ ํ‡ด๊ทผ ํ›„์˜ ์ƒํ™œ์„ ์—ฌ์œ ๋กญ๊ฒŒ ์ฆ๊ธฐ๊ธฐ ๋Œ€๋žต ์ž‘์„ฑํ•ด๋ณด๋ฉด ์œ„์™€ ๊ฐ™๋‹ค.  ์›ํ•˜๋˜ ํŒ€์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์–ด์„œ Kotlin, WebFlux, AWS, Spring, NoSQL ๋“ฑ๋“ฑ,,,์˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์–ธ์–ด๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.  ์ฝ”ํ…Œ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ DFS๋ฅผ ์‹ค๋ฌด์— ํ™œ์šฉํ•˜๋ฉด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ๋Š๊ปด๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค.  ์‹œ๊ฐ„์ด ๋‚  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ๊นƒํ—ˆ๋ธŒ์— ๋“ค์–ด๊ฐ€์„œ ์–ด๋–ค ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์—ฌํ–ˆ๋‚˜ ๊ตฌ๊ฒฝํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋ฉด ๋‚ด๊ฐ€ ์•„์ง๋„ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ๋Š๋‚„ ์ˆ˜..

soogoori
'๐Ÿ‘ฉ‍๐Ÿ’ป ์ •๋ฆฌ๊ธ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก