๐๐ปโ๏ธ ์๋ ํ์ธ์. ์ ๋ ๋ถํธ์บ ํ๋ฅผ ๋์์ ๊ฐ๋ฐ์๋ก ์ผํ๊ณ ์๋ ์ฌ๋์ ๋๋ค. ์ง๊ธ ์๊ฐํด ๋ณด๋ฉด ๋ถํธ์บ ํ ๋ฉ์ธ ํ๋ก์ ํธ ๊ธฐ๊ฐ ๋ ๊ฐ์ฅ ๊ณจ์น ์ํ๊ณ ํ๋ค์๋ ๊ฒ ์คํ๋ง ์ํ๋ฆฌํฐ์๋ ๊ฒ ๊ฐ์์. ๋น์์ ๋ง์ ๋ง๋ค์ด ๋๊ณ ์ดํด๋ ์ ๋ชปํ๊ณ ํ์๋ค์๊ฒ ์ค๋ช ํ๊ธฐ ์ด๋ ค์ํ๋ ๊ธฐ์ต์ด ๋ฉ๋๋ค. ๊ทธ๋์ ์ธ์ ๊ฐ ํ๋ก์ ํธ๋ฅผ ์ฒ์ ํ์๋ ๋ถ๋ค์ ์ํด ์ ๋ชฐ๋ผ๋ ๋ฐ๋ผ ํ ์ ์๋ ์คํ๋ง ์ํ๋ฆฌํฐ ๊ธ์ ์จ์ผ๊ฒ ๋ค ์๊ฐ์ ํ๋๋ฐ ๊ทธ๊ฑธ ์ด์ ์ผ ํ๊ฒ ๋๋ค์. ์๋ฌดํผ ์ ๋ชฐ๋ผ๋, ์ง๋๊ฐ๋ ํ ๋จธ๋๊ป ๋ค์ง๊ณ ์ง ์ค๋ช ํด๋ ์ดํดํ ์ ์๊ฒ ์ฝ๊ฒ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์๋ ์น, ์ฑ ์ ํ๋ฆฌ์ผ์ด์ ์์์ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ๊ตฌํ์ ์ํด ํ์ํ ์คํ๋ง ์ํ๋ฆฌํฐ(Spring Security)์ ๋์ ์๋ฆฌ์ ๋ํ ์งค๋งํ ๊ฐ๋ ๊ณผ ์ค๋ช ์ ๋ค๋ฃน๋๋ค. ๋ค์ ๊ธ๋ถํฐ๋ ํ๋ํ๋ ๋ง๋ค์ด๋ณด๋ฉฐ ์ต์ข ์ ์ผ๋ก๋ redis๋ฅผ ์ด์ฉํ access, refresh token ๊ด๋ฆฌ๊น์ง ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.
์ ๊ธ๋ง ๋ณด๊ณ ๋ฐ๋ผ ํด๋ ์คํ๋ง ์ํ๋ฆฌํฐ ๊ตฌํ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๋๋ก ์น์ ํ๊ฒ ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์๋ฆฌ๋ ๊ฐ๋ ์ ๋ํด์๋ ์ ๋ ์ ๋ชฐ๋ผ์ ์ค๋ช ์ด ๋ถ์คํ๊ฑฐ๋, ํ๋ฆด ์ ์๋ค๋ ์ ์ํด๋ถํ๋๋ฆฝ๋๋ค.
๐ ๏ธ ์คํ๋ง ์ํ๋ฆฌํฐ์ ๋์ ์ํคํ ์ฒ
1. Http Request -> AuthenticationFilter
์ผ๋ฐ์ ์ผ๋ก ์น์ด๋ ์ฑ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ Http(s)๋ก ํต์ ํ์์์. ๊ทธ๋ฌ๋ ์ฌ๋ฌ๋ถ์ด ์น ํ์ด์ง์์ ๋ก๊ทธ์ธ ํ๋ฉด์ ๊ตฌํ์ ํ๋ฉด id์ Password๋ฅผ ์ ์ ๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ์ ์ ์์ํ ๋ฐ ๊ทธ๊ฑธ ๋ํ๋ด๊ณ ์๋ ๊ฒ์ ๋๋ค. 1๋ฒ์ ํด๋ผ์ด์ธํธ์์ ์ ๋ ฅํ id์ password๊ฐ ์๋ฐ์ ์๋ธ๋ฆฟ ํํฐ๋ก ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ ํํํ๊ณ ์์ต๋๋ค.
๐ก ์๋ธ๋ฆฟ์ ๋ํ ๊ฐ๋จํ ์์ฝ ์ค๋ช
์๋ธ๋ฆฟ์ด๋ ์๋ฐ์์ ์น ํต์ ์ ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ธฐ์ ์ ๋งํฉ๋๋ค.
์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ด๋ฌํ ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ๋์ ํต๊ณผ ์์
ํด๋ผ์ด์ธํธ ์์ฒญ: ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ๋ฑ)๊ฐ ์๋ฒ๋ก HTTP ์์ฒญ(ex. http body์ id, password๋ฅผ ์ฃ์)์ ๋ณด๋ ๋๋ค.
์๋ธ๋ฆฟ ์ปจํ ์ด๋: ์์ฒญ์ด ์๋ฒ์ ๋์ฐฉํ๋ฉด, ์๋ธ๋ฆฟ ์ปจํ ์ด๋(Tomcat, Jetty ๋ฑ)๊ฐ ์์ฒญ์ ๋ฐ์ต๋๋ค.
์๋ธ๋ฆฟ ํํฐ: ์์ฒญ์ด ์๋ธ๋ฆฟ์ ๋๋ฌํ๊ธฐ ์ ์, ์๋ธ๋ฆฟ ํํฐ๊ฐ ์์ฒญ์ ๊ฐ๋ก์ฑ๋๋ค. ์๋ธ๋ฆฟ ํํฐ๋ ์์ฒญ ๋ฐ ์๋ต์ ์์ ํ๊ฑฐ๋ ์ถ๊ฐ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ์ฆ, ๋ก๊น , ์์ถ ๋ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋์คํจ์ฒ ์๋ธ๋ฆฟ: ์๋ธ๋ฆฟ ํํฐ๋ฅผ ํต๊ณผํ ์์ฒญ์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ(DispatcherServlet)์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์คํ๋ง MVC์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ก, ๋ชจ๋ ์์ฒญ์ ์ค์์์ ์ฒ๋ฆฌํฉ๋๋ค.
ํธ๋ค๋ฌ ๋งคํ: ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์์ฒญ URL์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ค ์ปจํธ๋กค๋ฌ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ํธ๋ค๋ฌ ๋งคํ(Handler Mapping)์ ์ฌ์ฉํฉ๋๋ค.
์ธํฐ์ ํฐ: ํธ๋ค๋ฌ ๋งคํ์ด ์๋ฃ๋๋ฉด, ์์ฒญ์ ์ธํฐ์ ํฐ(Interceptor) ์ฒด์ธ์ ํต๊ณผํฉ๋๋ค. ์ธํฐ์ ํฐ๋ ์์ฒญ ์ฒ๋ฆฌ ์ ํ์ ์ถ๊ฐ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ธ์ฆ, ๊ถํ ๋ถ์ฌ ๋ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ปจํธ๋กค๋ฌ: ์ธํฐ์ ํฐ๋ฅผ ํต๊ณผํ ์์ฒญ์ ์ค์ ๋ก ์ปจํธ๋กค๋ฌ(Controller)๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ปจํธ๋กค๋ฌ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ์ ์ ํ ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๋ฐํํฉ๋๋ค.
์์ ์์ฒญ ํต๊ณผ ์์๋ฅผ ์ดํดํ์๋ฉด ๋ฌด๋ฆฌ ์์ด ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ id, password๊ฐ AuthenticationFilter๋ก ๋ค์ด์จ ๋ด์ฉ์ ์์ํ์ค ์ ์์ ๊ฒ๋๋ค.(๋ง์ฝ ์ดํด๊ฐ ์๊ฐ์ ๋ค๋ฉด Spring MVC์ ๋์ ๊ตฌ์กฐ์ ๋ํด ๊ตฌ๊ธ๋งํด๋ณด์ธ์!) AuthenticationFilter๊ฐ ๋ฐ๋ก ์๋ธ๋ฆฟ ํํฐ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค!! ์ฌ๊ธฐ์ ์์ฒญ์ ๊ฐ๋ก์ฑ์ด ํด๋น ์์ฒญ์ ๋ํ ๋ก๊ทธ์ธ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด์ฃ ! ์ดํด ๋ชป ํ์ ๋ ๋ฉ๋๋ค ใ ใ '์ ์ธ์ฆ์ ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ ์ ์ ํํฐ๋ฅผ ๊ฑฐ์ณ ์ฒ๋ฆฌ๋๋๊ตฌ๋'๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
- 1๋ฒ ๋ด์ฉ์ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ ํฌ๊ฐ ๋ง๋ ์น, ์ฑ์ ๋ก๊ทธ์ธ ํผ์์ ์์ ์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ๊ทธ ๋ฐ์ดํฐ๊ฐ json ํ์์ผ๋ก ์๋ฒ๋ก ๋์ด์ฌ ๊ฒ๋๋ค.
{
"id" : "myid111",
"passeord" : 123456
}
- ์ด๋ฐ์์ผ๋ก์. ์ด ๋ ์๋ธ๋ฆฟ ํํฐ์ธ AuthenticationFilter๊ฐ ํด๋น ์์ฒญ์ ๊ฐ๋ก ์ฑ ๊ฒ์ ๋๋ค.
2. AuthenticationFilter -> UsernamePasswordAuthenticationToken
- ๊ทธ ๋ค์์ 2๋ฒ, ๊ฐ๋ก ์ฑ ์์ฒญ์ผ๋ก ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ๊ฒ ์ฃ ?
- ์์ฒญ body์ ๋ด๊ฒจ ์๋ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ UsernamePasswordAuthenticationToken๋ผ๋ ๊ฐ์ฒด์ ๋ด์ ์ธ์ฆ ์์ฒญ์ ํ๊ธฐ ์ํ ์ค๋น๋ฅผ ํ๋ ๋จ๊ณ์
๋๋ค.
- json ํํ๋ฅผ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝํ๋ ์ญ์ง๋ ฌํ(Deserialization) ์์ ์ ํด์ผํฉ๋๋ค.
- ์ด ๊ฐ์ฒด์ ๋ด์์ผ ์คํ๋ง ์ํ๋ฆฌํฐ์ AuthenticationManager๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
- AuthenticationManager์์๋ UsernamePasswordAuthenticationToken ์์ ์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค.
- ์ด๊ฑธ ์ ํ๋๊ตฌ์? ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ๋ง๋ค์ด ๋์ ์ธ์ฆ ์ฒด๊ณ๋ฅผ ์ ํฌ๊ฐ ๋ฐ๋ฅด๊ธฐ ์ํด์์ ๋๋ค. ์ด๋ ๊ฒ ํด์ผ ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ๊ท์ฐฎ์ ์์ ์ ์์์ ๋ค ํด์ฃผ๋๊น์.
3. UsernamePasswordAuthenticationToken -> AuthenticationManager(ProviderManager)
๐ก ์ธํฐํ์ด์ค
์ธํฐํ์ด์ค๋ ๊ตฌํํด์ผ ํ๋ ๋ฉ์๋์ ๋ชฉ๋ก์ ์ ์ํ๋ ์ผ์ข ์ ๋ชฉ์ฐจ์ ๋๋ค.
์ธํฐํ์ด์ค ์์ฒด๋ ์ค์ ๊ตฌํ ๋ด์ฉ(๋ก์ง ์ฝ๋)์ ํฌํจํ์ง ์๊ณ , ๋ฉ์๋ ์๊ทธ๋์ฒ(๋ฉ์๋ ์ด๋ฆ, ๋ฐํ ํ์ , ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก)๋ง์ ์ ์ํฉ๋๋ค. ์ ํฌ๊ฐ ์ฑ ์ ๋ณด๋ฉด ๋ชฉ์ฐจ๊ฐ ์์์์? ๊ทธ ๋ชฉ์ฐจ๋ง ์๋ ๊ฒ๋๋ค.
'์์ ๋ด์ฉ์ ๋ค๊ฐ ๊ท์น(๋ฉ์๋ ์๊ทธ๋์ฒ)์ ๋ง์ถฐ ์์์ ๊ตฌํํ์ธ์.' ์ด ๋ง์ ๋๋ค.
- ์ด ๋ถ๋ถ์ UsernamePasswordAuthenticationToken์ ๋ก๊ทธ์ธ ์ ๋ณด๋ก ๋ก๊ทธ์ธ ์ธ์ฆ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ AuthenticationManager์ ๊ตฌํ์ฒด์ธ ProviderManager๋ฅผ ์ฌ์ฉํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
- ์ด๊ฑธ ์ง์ ๋ง๋ค๊ฑฐ๋, ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ์ ๋ ๋ฉ๋๋ค. ์ ๋ชจ๋ฅด์ ๋ ์ผ๋จ ๋์ด๊ฐ์๊ณ ์ด ๋ถ๋ถ์ ๊ตฌํํ ๋ ์์ธํ ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
- ์ง๊ธ์ ๊ฐ๋จํ ProviderManager๊ฐ ๋ก๊ทธ์ธ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํ ๋งค๋์ ๋ก์์ ์ญํ ์ ๋ถ์ฌ๋ฐ๋ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
4. AuthenticationManager(ProviderManager) -> AuthenticationProvider
- ์์์ ์ธ๊ธํ๋ฏ์ด AuthenticationManager์ ๊ตฌํ์ฒด์ธ ProviderManager๊ฐ ๋งค๋์ ๋ก์์ ์ญํ ์ ๋ถ์ฌ๋ฐ์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ UsernamePasswordAuthenticationToken์ ๋ค์ด์๋ id์ password๋ฅผ, ์ธ์ฆ์ ์ฒ๋ฆฌํด ์ฃผ๋ AuthenticationProvider(์ธ์ฆ ์ฒ๋ฆฌ ์ ๊ณต์)์๊ฒ 'id์ password๋ฅผ ๋๋ฆด ํ
๋ ์ด ์ ๋ณด๋ก ์ ํฌ ํ์์ด ๋ง๋์ง ํ์ธํด ์ฃผ์ธ์.'๋ผ๊ณ ์ค๋๋ฅผ ๋ด๋ฆฌ๋ ๋ถ๋ถ์
๋๋ค.
- AuthenticationProvider๋ ๋งค๋์ ์ ์ค๋๋ฅผ ๋ฐ๊ณ ์ฌ์ฉ์์ id์ password๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
- ์ฌ๊ธฐ์๋ถํฐ๋ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๋น์ ๋ฅผ ๋ค๊ฒ ์ต๋๋ค.
- 4๋ฒ์ ๋งค๋์ (AuthenticationManager)๊ฐ ์ง์ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๊ณ , ์ค๊ฐ ์ง์(AuthenticationProvider)์๊ฒ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ํ๋ผ๊ณ ์ค๋๋ง ๋ด๋ฆฌ๋ ์ญํ ์์ ์ดํดํ๋ ๊ฒ์ด ํฌ์ธํธ์ ๋๋ค.
5. AuthenticationProvider -> UserDetailsService
- ๋งค๋์ ์๊ฒ ์ค๋๋ฅผ ๋ฐ์ ์ค๊ฐ ์ง์(AuthenticationProvider)์ ์ฌ์ฉ์์ id์ password๋ฅผ ๊ฒ์ฆํ ๋ ์์ ์ด ์ง์ ํ์ง ์์ต๋๋ค.
- ์ด๋ฅผ ๋ ๋ง๋จ์ง์(UserDetailsService)์๊ฒ ์ํต๋๋ค.(ํ์ฒญ์ ํ์ฒญ์ ํ์ฒญ..)
- UserDetailsService๋ ์ธํฐํ์ด์ค๋ก์ loadUserByUsername๋ผ๋ ๋ฉ์๋๊ฐ ์ ์๋์ด ์์ต๋๋ค.
- ๊ฐ์ด ์ค์๋์? loadUser(์ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค.), ByUsername(์ ์ ์ ์ด๋ฆ์ผ๋ก๋ถํฐ) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ username์ ๋๊ธฐ๊ณ ์ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๋ฉ์๋์ฒ๋ผ ๋ณด์ ๋๋ค.
- ์ด๋ username์ ๋ฌด์์ผ๊น์? ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ id์ ๋๋ค. ์ฌ์ฉ์์ id๋ฅผ ์ฃผ๊ณ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ฌ ๋ password๋ ํฌํจ๋์ด ์์ ํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ password์ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ password๋ฅผ ๋น๊ตํ์ฌ ์ธ์ฆ ํต๊ณผ or ์คํจ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค.
6. UserDetailsService -> UserDetails
Member member = memberRepository.findByUsername(username);
- ๋ง๋จ ์ง์(UserDetailsService)์ ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊บผ๋ธ id, password๋ฅผ UserDetails๋ผ๋ ํ์ ๋ง์ถฐ ๋ด์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ id, password ์ ๋ณด์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ id, password๊ฐ ์ผ์นํ๋์ง ๊ฒ์ฆ์ ํ๊ณ , ์ด ๊ฒฐ๊ณผ๋ฅผ ์ค๊ฐ ์ง์(AuthenticationProvider)์๊ฒ ๋๊ธฐ๋ ์์
์ ํฉ๋๋ค.
- ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๋ฉด ์ํฐํฐ ์ธ์คํด์ค์ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๊ฒ ์ฃ ?
- ์๋ง JPA๋ฅผ ์ฐ์๋ ๋ถ๋ค์ Spring Data Jpa์ findByUsername์ ๊ฐ์ ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ค ๊ฑฐ๊ณ , ์๋๋ฉด sql๋ฌธ์ผ๋ก ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค์ค ํ ๋ฐ์.
- ๋ญ๊ฐ ๋๋ ์ด ์ ๋ณด๋ฅผ UserDetails๋ผ๋ ์๋ก์ด ๊ฐ์ฒด์ ์ฎ๊น๋๋ค. ๋ณ๋์ ๊ฐ์ฒด์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ด๋ ์ด์ ๋ ์์ผ๋ก ์์ ๋ค๋ฅธ ์ธ์ฆ์ด๋ ๊ถํ ์ฒ๋ฆฌ ๋ฑ ์คํ๋ง ์ํ๋ฆฌํฐ์์์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์์
๋๋ค. ๊ทธ๋ฅ entity ์ธ์คํด์ค๋ฅผ ์ฐ๋ฉด ๋์ง ์๋ ํ์ค ์ ์๋๋ฐ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ค๊ณ๋ผ์ ๊ทธ๋ ์ต๋๋ค.(์๋ถํฐ ๊ณ์ ํ์ฒญ์ ํ์ฒญ์ด ์ง์๋๊ณ , ๋ชจ๋ ๋จ๊ณ๋ฅผ ํ๋์ ์ญํ ๋ก ์ชผ๊ฐ๋ ์ด์ ๋ ๋ฐ๋ก ์คํ๋ง์ด ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋์ด์๊ธฐ ๋๋ฌธ์
๋๋ค. SOLID ์์น..)
- ์ฐธ๊ณ ๋ก UserDetails๋ ์ธํฐํ์ด์ค๋ก ๊ตฌํ์ฒด๊ฐ ํ์ํฉ๋๋ค.
- ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๋ฉด ์ํฐํฐ ์ธ์คํด์ค์ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๊ฒ ์ฃ ?
7 ~ 10. SecurityContextHolder - Authentication
- ์ธ์ฆ ์ฒ๋ฆฌ๊ฐ ๋์ด ๋๋ฉด ์ญ์ผ๋ก ๊ทธ๋๋ก ๋์๊ฐ SecurityContextHolder์ Authentication์ ์ธ์ฆ ์ ๋ณด๊ฐ ์ค๋ฆฝ๋๋ค. ์ด๋์ ์ธ์ฆ ์ ๋ณด๋ 6๋ฒ์ UserDetails๋ฅผ ํฌํจํฉ๋๋ค.
- ์์ ๊ทธ๋ฆผ์๋ ๋์ ์์ง ์์ง๋ง ์ด๋ ์ธ์ฆ ์ฑ๊ณต/์คํจ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฑ๊ณตํ ๋ ์ํํ ํธ๋ค๋ฌ, ์คํจํ ๋ ์ํํ ํธ๋ค๋ฌ๋ก ๋์ด๊ฐ ๊ฐ ์ํฉ์ ๋ง๋ ๋ฉ์๋๊ฐ ์ํ๋ฉ๋๋ค.
- ์ฑ๊ณตํ์ ๋๋ ์ฑ๊ณตํ๋ค๋ ์๋ต์ ๋ณด๋ธ๋ค๋ ๊ฐ, ์คํจํ์ ๋๋ ๊ฐ ์๋ฌ์ ํด๋นํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ณด๋ด๋ ์์ผ๋ก ๊ฐ ํธ๋ค๋ฌ๋ฅผ ๋์์ํค๊ธฐ ์ํจ์ ๋๋ค.
๐ ์ ๋ฆฌ
1 ~ 10๋ฒ๊น์ง๋ฅผ ์งง๊ฒ ์์ฝํ๋ฉด '์ฌ์ฉ์๋ก๋ถํฐ id์ password๋ฅผ ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๋ ฅ๋ฐ์ id๋ก ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ฐพ๊ณ ์ ๋ ฅ๋ฐ์ password์ ์ ์ฅ๋ password๋ฅผ ๋น๊ตํ์ฌ ์ธ์ฆ ์ฑ๊ณต/์คํจ ์ฌ๋ถ์ ๋ฐ๋ผ SecurityContextHolder์ Authentication์ ์ธ์ฆ ์ ๋ณด๋ ์ธ์ฆ ์์ธ ์ ๋ณด๋ฅผ ์ฃ๋๋ค. ์ดํ ๊ฐ ์ํฉ์ ๋ง๋ ํธ๋ค๋ฌ๋ฅผ ์คํ์ํจ๋ค.'๋ผ๊ณ ๋ณผ ์ ์๊ฒ ๋ค์.
๋์ ์๋ฆฌ์ ๋ํ ์ค๋ช ์ ์ต๋ํ ์ฝ๊ฒ ์ค๋ช ํด ๋ณด์์ต๋๋ค. ๋ค์ ๊ธ๋ถํฐ๋ ์ง์ ๊ตฌํํด ๋ณด๋ฉด์ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค.
์ฐธ๊ณ
๋คผํผ
https://velog.io/@kyungwoon/Spring-Security-Spring-Security-๋์-์๋ฆฌ