์ถ๋ฐ ๋น๋์ค ์ฌํ 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) ์ธ์
์ ์ฅ์๋ฅผ ์์ฑํ์ฌ ๋ชจ๋ ์ธ์
์ ์ฅ ์ธ์
์ ์ฅ์ ์..