๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

์ถœ๋ฐœ ๋น„๋””์˜ค ์—ฌํ–‰ Keep ์˜ˆ์œ ๋ง ์†Œํ†ต ๋งค์ผ ํšŒ์˜๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๋จธ์ง€ ๋ฐ ์ง„๋„ ๊ณต์œ  Problem ์˜จ๋ผ์ธ์—์„œ์˜ ์†Œํ†ต ํ•œ๊ณ„ ์†Œ๊ทน์ ์ธ ๋งˆ์ธ๋“œ ์†Œํ†ต ๋ถ€์žฌ๋กœ ์ธํ•˜์—ฌ ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ง„ํ–‰ ๋ชปํ•จ Try ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•(๊ฒŒ๋”, zep, ์Šฌ๋ž™ ๋“ฑ)์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ๋ถ„๋ฐฐ๋œ ์—ญํ•  ์™ธ์—๋„ ์„ ๋œป ๋„์™€์ฃผ๊ธฐ ๋‹ค๋ฅธ ํŒ€์›์˜ ์ง„ํ–‰ ์ƒํ™ฉ ์ ๊ทน์ ์œผ๋กœ ๊ณต์œ ๋ฐ›์•„ ์„œ๋กœ์˜ ํž˜๋“  ๋ถ€๋ถ„์„ ๋„์™€์ฃผ๊ธฐ ํŒ€์›๋“ค์˜ ํ•œ๋งˆ๋”” ๊น€ํ˜œ์œค : ํŒ€์žฅ์ด๋ผ๋Š” ์ง์ฑ…์„ ๋งก์•˜๋Š”๋ฐ, ํŒ€์›๋“ค์„ ๋งŽ์ด ๋„์™€์ฃผ์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์•„์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋“ค ๋งก์€ ๋ฐ”๋ฅผ ์—ด์‹ฌํžˆ ํ•ด์ฃผ์…จ๊ณ , ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์ตœ์„ ์„ ๋‹คํ•ด ์ž„ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์— ๋˜ ๊ฐ™์€ ํŒ€์ด ๋œ๋‹ค๋ฉด, ์ ๊ทน์ ์œผ๋กœ ์†Œํ†ตํ•ด์š”!! ๋ฌธ๊ธฐํ˜„ : ์ง„๋„๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š”๊ฒŒ ๋Šฆ์–ด์ ธ ์ •์ž‘ ์‹ค์ œ๋กœ ์ƒ๊ฐํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์งœ๋ณด๋Š” ์‹œ๊ฐ„์€ ์ ์—ˆ๋Š”๋ฐ ์ด๋ฒˆ ํŒ€ํ”„๋กœ์ ํŠธ..
ํ”„๋กœ์ ํŠธ S.A ์ž‘์„ฑ์— ๋Œ€ํ•ด ํŠœํ„ฐ๋‹˜์ด ํ”ผ๋“œ๋ฐฑ์„ ํ•ด์ฃผ์…จ๋‹ค https://hyeyun.tistory.com/entry/231121-TIL 23.11.21 TIL ์Šคํ”„๋ง ํŒ€ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์˜ค๋Š˜์€ ์ฃผ์ œ ์ •ํ•˜๊ธฐ์™€ S.W ์ž‘์„ฑ ํ”„๋กœ์ ํŠธ ๋ช… : ์ถœ๋ฐœ ๋น„๋””์˜ค ์—ฌํ–‰ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ : ์˜ํ™” ์†Œ๊ฐœ ๋‰ด์Šคํ”ผ๋“œ ํ•„์ˆ˜ ์š”๊ตฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ๊ตฌํ˜„ํ•œ ํ›„, ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ hyeyun.tistory.com ์ด์ „ TIL ์—๋„ ์˜ฌ๋ ธ๋Š”๋ฐ, API ๋ช…์„ธ์„œ์—์„œ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์„ ๋งŽ์ด ์•Œ๋ ค์ฃผ์…จ๋‹ค. ์ž‘์„ฑํ•  ๋‹น์‹œ Restful ํ•˜๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ๋‚˜๋ฆ„ ๊ณ ์‹ฌํ–ˆ๋Š”๋ฐ, ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ์ด ์•ฝ๊ฐ„ ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์ด์—ˆ๋˜๊ฒƒ! ํ”„๋กœํ•„ ์กฐํšŒ API๋ฅผ GET /api/profile ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ํŠœํ„ฐ๋‹˜๊ป˜์„œ ๋ฉ”์„œ๋“œ์™€ URL ๋งŒ์œผ๋กœ๋Š” ๊ธฐ๋Šฅ์„ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค๊ณ  ํ•˜์…จ๋‹ค...
์˜ค๋Š˜์€ ๋งˆ์ดํŽ˜์ด์ง€, ํ”„๋กœํ•„ ์ˆ˜์ •, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋”ฐ ์ˆ˜์ •ํ•  ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ”„๋กœํ•„ ์š”์ฒญ DTO @Data public class PasswordRequestDto { // TODO: 11/21/23 ํšŒ์› ๊ฐ€์ž…๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ œ์•ฝ์กฐ๊ฑด ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ด์ฃผ๊ธฐ @NotBlank private String password; @NotBlank private String passwordConfirmation; }@Data public class ProfileRequestDto { @NotBlank @Pattern(regexp = "^[๊ฐ€-ํžฃ]{2,5}", message = "ํ•œ๊ธ€๋งŒ ์‚ฌ์šฉํ•˜์—ฌ 2-5์ž๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.") private String name; @NotBlank private String introdu..
์Šคํ”„๋ง ํŒ€ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์˜ค๋Š˜์€ ์ฃผ์ œ ์ •ํ•˜๊ธฐ์™€ S.W ์ž‘์„ฑ ํ”„๋กœ์ ํŠธ ๋ช… : ์ถœ๋ฐœ ๋น„๋””์˜ค ์—ฌํ–‰ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ : ์˜ํ™” ์†Œ๊ฐœ ๋‰ด์Šคํ”ผ๋“œ ํ•„์ˆ˜ ์š”๊ตฌ ๊ธฐ๋Šฅ์„ ๋จผ์ € ๊ตฌํ˜„ํ•œ ํ›„, ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ์žก์•˜๋‹ค! ๊ธฐ๋ณธ์„ ์ถฉ์‹คํžˆ!!๐Ÿ”ฅ 1์ฐจ๋กœ ์ •ํ•œ ๊ธฐ๋Šฅ์€ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ํ”„๋กœํ•„ ์ˆ˜์ • -> ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ž๊ธฐ์†Œ๊ฐœ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œ ๋ฉ”์ธํŽ˜์ด์ง€, ํ”„๋กœํ•„ ํŽ˜์ด์ง€, ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€ API ๋ช…์„ธ์„œ ์™€์ด์–ดํ”„๋ ˆ์ž„ ์šฐ๋ฆฌ ํŒ€์›๋“ค์€ ๋‹ค๋“ค ์ฒœ์ƒ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ใ…Ž๐Ÿ˜… ERD ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋„ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ! Git Branch ์ •๋ฆฌํ•˜๊ณ , ๊ธฐ๋ณธ Entity ๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. https://github.com/kimhyeyun/movie-news-feed GitHub - kimhyeyun/movie-news-feed: ํŒ€2 ์ถœ๋ฐœ..
์Šคํ”„๋ง ์ˆ™๋ จ 3์ฃผ์ฐจ ์™„๊ฐ•! ๊ฐ•์˜ ์ง„ํ–‰ ์ค‘ @EnableGlobalMethodSecurity(securedEnabled = true) ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ deprecated ๋๋‹ค๋Š” ์•Œ๋ฆผ! ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด์˜ url์€ ํŠน์ • ๊ถŒํ•œ ์„ค์ •์„ ํ•ด์ฃผ๋Š” @Secured(๊ถŒํ•œ ์ด๋ฆ„) ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋Œ€์‹  @EnableMethodSecurity(securedEnabled = true) ์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค! ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ช… ์ž˜ ์ž…๋ ฅํ–ˆ๋Š”๋ฐ, ๋กœ๊ทธ์ธ ์‹œ์— ์ธ์ฆํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์„ฑ๊ณต ๋ฉ”์„œ๋“œ๋กœ ์ž˜๋“ค์–ด๊ฐ€๋Š”๋ฐ, ํ† ํฐ ๊ฒ€์ฆํ•˜๋Š” ๋ถ€๋ถ„์—์„œ, ์œ ํšจํ•˜์ง€ ์•Š์€ JWT ์„œ๋ช…์ด๋ผ๋ฉฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์—ˆ๋”ฐ....... ์™œ ๊ทธ๋Ÿฌ์ง€.... ํ•˜๋‹คํ•˜๋‹ค ํ† ํฐ ์ŠคํŠธ๋ง์—์„œ ์•ž BEARER_PREFIX๋ฅผ ..
CSRF ๐Ÿ”ฅ CSRF (์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ, Cross-Site Ruquest Forgery) ๊ณต๊ฒฉ์ž๊ฐ€ ์ธ์ฆ๋œ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ์ฟ ํ‚ค์˜ ์„ธ์…˜ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›น ์„œ๋ฒ„์— ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ CSRF ์„ค์ •์ด ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ html์—์„œ CSRF ํ† ํฐ ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ์š”์ฒญ์„ ์ˆ˜์‹  ๊ฐ€๋Šฅ ์ฟ ํ‚ค ๊ธฐ๋ฐ˜์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•œ ๊ณต๊ฒฉ์ด๊ธฐ ๋•Œ๋ฌธ์— REST ๋ฐฉ์‹์˜ API์—์„œ๋Š” disable ๊ฐ€๋Šฅ POST ์š”์ฒญ๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋Œ€์‹  CSRF protection์„ disable Spring Security - Filter Chain Spring ์—์„œ ๋ชจ๋“  ํ˜ธ์ถœ์€ DispatcherServlet์„ ํ†ต๊ณผํ•˜๊ฒŒ ๋˜๊ณ  ์ดํ›„์— ๊ฐ ์š”์ฒญ์„ ๋‹ด๋‹นํ•˜๋Š” Controller๋กœ ๋ถ„๋ฐฐ ์ด ๋•Œ, ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ..
ํ•„ํ„ฐ Filter๋ž€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์˜์—ญ์œผ๋กœ Client๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•ด ์ตœ์ดˆ/์ตœ์ข… ๋‹จ๊ณ„์˜ ์œ„์น˜์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ ์ฃผ๋กœ ๋ฒ”์šฉ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…๋“ค, ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊น… ๋ฐ ๋ณด์•ˆ ์ฒ˜๋ฆฌ์— ํ™œ์šฉ ๋˜ํ•œ ์ธ์ฆ, ์ธ๊ฐ€๊ฐ€ ๊ด€๋ จ๋œ ๋กœ์ง๋“ค์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ Filter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ฆ, ์ธ๊ฐ€์™€ ๊ด€๋ จ๋œ ๋กœ์ง์„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์  ์กด์žฌ Filter Chain ํ•„ํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ Chain ํ˜•์‹์œผ๋กœ ๋ฌถ์—ฌ์„œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ํ•„ํ„ฐ ์ ์šฉ ์š”์ฒญ URL์˜ ์ธ๊ฐ€ ์ฒ˜๋ฆฌ ๋ฐ ์ธ์ฆ ์ฒ˜๋ฆฌ ์ง„ํ–‰ํ•˜๋Š” ํ•„ํ„ฐ ๊ตฌํ˜„ ์ถ”๊ฐ€๋กœ ์š”์ฒญ URL์„ ๋กœ๊น…ํ•ด์ฃผ๋Š” ํ•„ํ„ฐ ๊ตฌํ˜„ Request URL Logging @Slf4j(topic = "LoggingFilter") @..
JWT Json Web Token ์ด๋ž€, JSON ํฌ๋งท์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์†์„ฑ์„ ์ €์žฅํ•˜๋Š” clain ๊ธฐ๋ฐ˜์˜ Web Token ์ฆ‰, ํ† ํฐ์˜ ํ•œ ์ข…๋ฅ˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฟ ํ‚ค ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JWT ์ €์žฅ ์‚ฌ์šฉ ์ด์œ  ์„œ๋ฒ„๊ฐ€ 1๋Œ€์ธ ๊ฒฝ์šฐ Session1์ด ๋ชจ๋“  client์˜ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์†Œ์œ  ์„œ๋ฒ„๊ฐ€ 2๋Œ€ ์ด์ƒ์ธ ๊ฒฝ์šฐ ์„œ๋ฒ„์˜ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„ 2๋Œ€ ์ด์ƒ ์šด์˜์ด ํ•„์š” Session ๋งˆ๋‹ค ๋‹ค๋ฅธ Client ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Œ ๋งŒ์•ฝ Client1์˜ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ Server2 ๋‚˜ Server3์— API ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๋ฉด? ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1) Sticky Session : Client ๋งˆ๋‹ค ์š”์ฒญ Server ๊ณ ์ • 2) ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ชจ๋“  ์„ธ์…˜ ์ €์žฅ ์„ธ์…˜ ์ €์žฅ์†Œ ์ƒ..
KIMHYEYUN
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (8 Page)