Spring

Spring

[Spring] Spring Cache์„ ์ ์šฉํ•œ ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„  (with. Redis)

ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง ํ•˜๋ฉด์„œ ์กฐํšŒํ•˜๋Š” ๋ถ€๋ถ„์— ์บ์‹ฑ์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค! ์™œ ์บ์‹ฑ์„ ์ ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ƒ? ! ํ•ด๋‹น ์„œ๋น„์Šค๋Š” ํ™ˆ ํ™”๋ฉด์—์„œ ์ง€๋„์œ„์— ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๋ชจ๋“  ๊ฒŒ์‹œ๊ธ€ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•ด ์ค€๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก, ์‚ญ์ œ๋ณด๋‹ค ์กฐํšŒ์ˆ˜๊ฐ€ ํ›จ์”ฌ ๋งŽ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ๊ฐ€์žฅ ๋งŽ์ด ๋…ธ์ถœ๋˜๋Š” ํ™ˆ ํ™”๋ฉด์—์„œ ๊ณ„์† ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋ฉด ์„ฑ๋Šฅ์ ์œผ๋กœ ์ข‹์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.! ์Šคํ”„๋ง ์บ์‹œ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋Š” ์•„๋ž˜ ๊ธ€์— ์ •๋ฆฌํ•ด๋†“์•˜๋‹ค๐Ÿ˜Š [Spring] Spring Cache(์Šคํ”„๋ง ์บ์‹œ)๋ž€?๐Ÿ”Ž Spring Cache๋ž€? ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•˜์—ฌ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋†“๊ณ  ๋˜‘๊ฐ™์€ ์š”์ฒญ์ด ์™”์„ ๋•Œ ๋กœ์ง์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ฃผ์–ด ๋น ๋ฅธ dahliachoi.tistory.com ๐Ÿ”Ž ์บ์‹ฑ..

Spring

[Spring] @PrePersist์™€ @PreUpdate

ํ•˜๋“œ์ฝ”๋”ฉ๊ณผ ์ค‘๋ณต์„ ์ง€์–‘ํ•˜๊ณ ์ž @PrePersist, @PreUpdate ์‚ฌ์šฉ์„ ๋Š˜๋ฆฌ๊ณ  ์žˆ๋‹ค. ๐ŸŒฑ @PrePersist ๋ž€? JPA ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋น„์˜์† ์ƒํƒœ์—์„œ ์˜์† ์ƒํƒœ๊ฐ€ ๋˜๋Š” ์‹œ์ ์— ์‹คํ–‰๋œ๋‹ค. ์ฆ‰, ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๊ธฐ ์ „์— JPA Provider์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค. ๐ŸŒฑ @PreUpdate ๋ž€? ์˜์† ์ƒํƒœ์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ด์ „์— ์‹คํ–‰๋œ๋‹ค. ์ฆ‰, ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™๊ธฐํ™”๋˜๊ธฐ ์ „์— JPA Provider์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค. ๐Ÿซง ์‚ฌ์šฉ ์‹œ ์œ ์˜ํ•  ์  ์ ์ ˆํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ๋กœ์ง์˜ ๋ณต์žก์„ฑ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ๋ณต์žกํ•œ ๋กœ์ง์€ @PrePersist, @PreUpdate ๋‚ด์—์„œ ํ”ผํ•œ๋‹ค. ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ”ผํ•œ๋‹ค. ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ..

Spring

[Spring] N+1 ๋ฌธ์ œ์™€ fetch join ํ•ด๊ฒฐ ๋ฐ ํ…Œ์ŠคํŠธ

๐ŸŒฑ N+1 ๋ฌธ์ œ๋ž€? JPA ์—ฐ๊ด€๊ด€๊ณ„์—์„œ ์ƒ๊ธฐ๋Š” ์ด์Šˆ๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์„ค์ •๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜(N)๋งŒํผ ์—ฐ๊ด€ ๊ด€๊ณ„์˜ ์กฐํšŒ ์ฟผ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋กœ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•œ๋‹ค. ๐Ÿค” ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ• ๊นŒ? 1. Fetch Type์„ Lazy๋กœ ์„ค์ •ํ•œ๋‹ค. 2. fetch join์„ ์‚ฌ์šฉํ•œ๋‹ค. 3. Batch Size๋ฅผ ์กฐ์ ˆํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‚œ 1, 2๋ฒˆ์„ ๊ฐ€์ง€๊ณ  ํ•ด๊ฒฐํ•ด ๋ณด์•˜๋‹ค. ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ํ•ด๊ฒฐ ๊ณผ์ • ๋ฐ ํ…Œ์ŠคํŠธ ๋‚˜๋Š” ์ด ํ”„๋กœ์ ํŠธ์—์„œ ๋ชจ๋“  ์œ ์ € ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ๊ธ€ ์ •๋ณด์™€ ๊ฐ™์ด ๋งคํ•‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. Member ๊ฐ์ฒด์™€์˜ fetch type์„ Lazy๋กœ ์„ค์ •ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ๋งŒ ๋ถ™์ธ๋‹ค๊ณ  ํ•ด์„œ ํ•ด๊ฒฐ์ด ๋˜์ง„ ์•Š๋Š”๋‹ค. public ListResult testGetMembersV1() { L..

Spring

[Spring] JWT AccessToken/RefreshToken ๊ตฌํ˜„ (with. Redis)

ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ„๋‹จํžˆ jwt๋ฅผ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•ด ๋ดค๋‹ค! ๐ŸŒฑ Spring Security๋ž€? ์ธ์ฆ(Authentication), ๊ถŒํ•œ(Authorize) ๋ถ€์—ฌ ๋ฐ ๋ถ€ํ˜ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์ธ์ฆ vs ์ธ๊ฐ€ ๋ณดํ†ต ์ธ์ฆ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นœ ํ›„ ์ธ๊ฐ€ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นœ๋‹ค. ์ธ์ฆ ํ˜„์žฌ ์œ ์ €๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ • (๋กœ๊ทธ์ธ) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ฆ๋ช… ์ธ๊ฐ€ ํ˜„์žฌ ์œ ์ €์˜ ๊ถŒํ•œ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ณผ์ • ํŽ˜์ด์ง€๋‚˜ ๋ฆฌ์†Œ์Šค ๋“ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ Spring Security ๊ตฌ์กฐ 1. Http Request ์ˆ˜์‹  ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์ •๋ณด์™€ ํ•จ๊ป˜ ์ธ์ฆ ์š”์ฒญ์„ ํ•œ๋‹ค. 2. ์œ ์ € ์ž๊ฒฉ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ์ฆ ํ† ํฐ ์ƒ์„ฑ AuthenticationFilter๊ฐ€ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๊ณ , ๊ฐ€๋กœ์ฑˆ ์ •๋ณด๋ฅผ ํ†ตํ•ด UsernamePasswordA..

Spring

[Spring] @AllArgsConstructor, @RequiredArgsConstructor ์‚ฌ์šฉ์„ ์ง€์–‘ํ•œ ์ด์œ 

์ธํ„ด ์ƒํ™œ์„ ํ•˜๋ฉด์„œ @AllArgsConstructor, @RequiredArgsConstructor ์ด ๋‘ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ณธ ์ ์ด ์—†์—ˆ๋Š”๋ฐ, ๊ทธ๋ƒฅ ์‚ฌ์šฉ์„ ์•ˆํ•˜๋Š”๊ฑฐ๊ตฌ๋‚˜๋ผ๊ณ ๋งŒ ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋ฌธ๋œฉ ์™œ ์ง€์–‘ํ• ๊นŒ๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค! ์ผ๋‹จ spring di๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜์ž๋ฉด! Spring DI๋ž€? DI๋Š” ์Šคํ”„๋ง ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์ด๋‹ค. ๊ฐ์ฒด๋“ค๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž…, ํ•„๋“œ ์ฃผ์ž…, setter ์ฃผ์ž… ์„ธ๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ ๊ทธ ์ค‘์—์„œ ์Šคํ”„๋ง์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ์ƒ์„ฑ์ž ์ฃผ์ž…์ด๋‹ค. @Service public class UserService {..

Spring

[Spring] @ExceptionHandler๋ฅผ ํ†ตํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (+ DTO Validation)

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ฒผ๋‹ค! ํ•ด๋‹น ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๊ฐ’๋„ ๋ฐ˜ํ™˜ํ–ˆ์–ด์•ผ ํ•ด์„œ try-catch๋ฅผ ์‚ฌ์šฉํ• ๊นŒ ํ–ˆ์ง€๋งŒ ๋ฐ˜ํ™˜ํ˜• ์‹์ด ๋‹ฌ๋ผ์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ• ๊นŒ ๊ณ ๋ฏผ์„ ํ•˜๋˜ ์ค‘์— @ExceptionHandler๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•ด ์ฃผ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค! ๊ทผ๋ฐ @ExceptionHandler๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ปจํŠธ๋กค๋Ÿฌ์— ๋งค๋ฒˆ ์ง€์ •์„ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ ์ค‘๋ณต์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ผ์„œ @ControllerAdvice๋ฅผ ํ†ตํ•ด ์ „์—ญ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ํ•ธ๋“ค๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. ๐Ÿ”Ž ์‚ฌ์šฉํ•œ ์ฝ”๋“œ @RestControllerAdvice public class ExceptionAdviceController { private final ResponseService responseService; public Exce..

Spring

[Spring] MessageSource๋ฅผ ์ด์šฉํ•œ ๊ตญ์ œํ™” exception ์ ์šฉํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ๊ตญ์ œํ™” ์ ์šฉ์„ ํ•ด๋ณด์•˜๋‹ค. ๐ŸŒฑ i18n ๊ฐœ๋… i18n์ด๋ž€ internationalization(i์™€ n์‚ฌ์ด 18๊ธ€์ž)์„ ์ค„์ธ ๊ฒƒ์œผ๋กœ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ฉด '๊ตญ์ œํ™”'๋ผ๋Š” ๋œป์ด๋‹ค. ๊ตญ์ œํ™”๋Š” ๋ฌธํ™”, ์ง€์—ญ, ์–ธ์–ด๊ฐ€ ๋‹ค์–‘ํ•œ ๋Œ€์ƒ ๊ณ ๊ฐ์„ ์œ„ํ•ด ์‰ฝ๊ฒŒ ํ˜„์ง€ํ™”๋  ์ˆ˜ ์žˆ๋Š” ์ œํ’ˆ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋ฌธ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด๋‹ค! โš™๏ธ build.gradle ์— ์˜์กด์„ฑ ์ถ”๊ฐ€ ๋‚˜๋Š” ymlํŒŒ์ผ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค! properties๋กœ ํ•  ๊ฑฐ๋ฉด ์ถ”๊ฐ€ ์•ˆ ํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค! implementation 'net.rakugakibox.util:yaml-resource-bundle:1.1' โš™๏ธ application.yml์— ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ ์„ค์ • ๋ฐ ์„ค์ • ํŒŒ์ผ ..

Spring

[Spring] Spring Cache(์Šคํ”„๋ง ์บ์‹œ)๋ž€?

๐Ÿ”Ž Spring Cache๋ž€? ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•˜์—ฌ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋†“๊ณ  ๋˜‘๊ฐ™์€ ์š”์ฒญ์ด ์™”์„ ๋•Œ ๋กœ์ง์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ฃผ์–ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋กœ์ปฌ ์บ์‹œ์ด๊ธฐ ๋•Œ๋ฌธ์— application๊ฐ„ ๊ณต์œ ๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„๋ฅผ ๋Œ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€๋ฏ€๋กœ ๊ณ„์† ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด redis ๊ฐ™์€ ์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ณณ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์ด ๋™์ผํ•  ๋•Œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ํ˜ธ์ถœ๋  ๋•Œ ํ•œ ๋ฒˆ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋งŽ์€ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๊ณณ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ •ํ™•์„ฑ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์Šคํ”„๋ง ์„ค์ • implementation 'org.springframework.boot..

Spring

[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ์‚ฌ์šฉ์ž DB ๋“ฑ๋ก ๋ฐ PasswordEncoder

Form ์ธ์ฆ - PasswordEncoder ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์•”ํ˜ธํ™”ํ•˜๋„๋ก ์ œ๊ณต ์ƒ์„ฑ PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder() ์—ฌ๋Ÿฌ ๊ฐœ์˜ PasswordEncoder ์œ ํ˜•์„ ์„ ์–ธํ•œ ๋’ค, ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” Encoder์ด๋‹ค. ์•”ํ˜ธํ™” ํฌ๋งท {id}encodedPassword ๊ธฐ๋ณธ ํฌ๋งท์€ Bcrypt : {bcrypt}$2a@10~~~ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜ : bcrypt, noop, pbkdf2, scrypt, sha256 PasswordEncoder๋ฅผ ์ด์šฉํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”๋ฅผ ํ•œ ๋’ค ์‚ฌ์šฉ์ž๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด! ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค. (ํ•˜์ง€๋งŒ ์•„๋ž˜๋Š” ๊ฐ•์˜๋ฅผ..

Spring

[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) CSRF, CsrfFilter - ๋กœ๊ทธ์•„์›ƒ ์˜ˆ์ œ

๊ณต๊ฒฉ์˜ ์œ„ํ—˜์„ฑ ํ•ด๋‹น ๋กœ์ง์„ ํ†ตํ•ด์„œ ํ•ด์ปค๋“ค์ด ๊ณต๊ฒฉ์„ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์‡ผํ•‘๋ชฐ์— ๋กœ๊ทธ์ธํ•˜๊ณ  ๋‚˜์„œ ์ฟ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ๋œ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ์ด์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ์‚ฌ์šฉ์ž๋Š” ๋งํฌ๋ฅผ ํด๋ฆญํ•ด์„œ ๊ณต๊ฒฉ์šฉ ์›นํŽ˜์ด์ง€์— ์ ‘์†ํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ ๊ณต๊ฒฉ์šฉ url์„ ์—ด๊ณ  ์‡ผํ•‘๋ชฐ์€ ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์˜์‹ฌํ•˜์ง€ ์•Š๊ณ  ์ธ์ฆ์„ ํ•œ๋‹ค. ์‹œํ๋ฆฌํ‹ฐ๋Š” ์ด๋Ÿฐ ๊ณต๊ฒฉ ๋ฐฉ์‹์„ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ CsrfFilter๋ฅผ ๋งŒ๋“ค์–ด์„œ csrf์˜ ์ทจ์•ฝ์ ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์žˆ๋‹ค. CsrfFilter ๋ชจ๋“  ์š”์ฒญ์— ๋žœ๋ค ํ•˜๊ฒŒ ์ƒ์„ฑ๋œ ํ† ํฐ์„ HTTP ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์š”๊ตฌ ์š”์ฒญ ์‹œ ์ „๋‹ฌ๋˜๋Š” ํ† ํฐ ๊ฐ’๊ณผ ์„œ๋ฒ„์— ์ €์žฅ๋œ ์‹ค์ œ ๊ฐ’๊ณผ ๋น„๊ตํ•œ ํ›„ ๋งŒ์•ฝ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ์€ ์‹คํŒจํ•จ HTTP ๋ฉ”์†Œ๋“œ : PATCH, POST, PUT, DE..

DAHLIA CHOI
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก