๐Ÿ–ฅ๏ธ ์ด์ปค๋จธ์Šคํ”„๋กœ์ ํŠธ/โœ๏ธ TIL

[TIL] ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋ณด๋Š” ํ”„๋กœ์ ํŠธ TIL 10์ผ์ฐจ..

carrot0911 2025. 4. 30. 17:26

๐ŸŒž ์˜ค๋Š˜์€ ์–ด๋–ค ํ•˜๋ฃจ์˜€์ง€..

์š”์ฆ˜ ์—„์ฒญ ํ”ผ๊ณคํ•œ ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ๋˜๊ณ  ์žˆ๋‹ค.. ์ž ์„ ์ถฉ๋ถ„ํžˆ ๋ชป์ž๊ณ  ์žˆ์–ด์„œ ์ข€๋น„์ฒ˜๋Ÿผ ์ง€๋‚ด๊ณ  ์žˆ๋Š” ๋А๋‚Œ์ด๋‹ค..

๊ทธ๋ž˜๋„ ํ•ด์•ผ๋  ์ผ์ •๋“ค์€ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌ๋ทฐCRUD์™€ Spring Security ๊ณต๋ถ€ ๋ฐ ์ ์šฉ์„ ํ–ˆ๋‹ค.

๋จผ์ € ๋ฆฌ๋ทฐ CRUD ๊ธฐ๋ณธ ํ‹€ ์žก์•„๋†จ๋˜ ์ฝ”๋“œ์— ์ถ”๊ฐ€์ ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•  ์กฐ๊ฑด๋“ค๊ณผ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•  ๋‚ด์šฉ๋“ค(๋ฐฐ์†ก ์™„๋ฃŒ๋œ ์ฃผ๋ฌธ์ธ๊ฐ€? ์ด๋ฏธ ์ž‘์„ฑ๋œ ๋ฆฌ๋ทฐ๊ฐ€ ์žˆ๋Š”๊ฐ€? ๋ณธ์ธ์ด ์ฃผ๋ฌธํ•œ ๊ฑด์— ๋Œ€ํ•œ ๋ฆฌ๋ทฐ์ธ๊ฐ€? ๋“ฑ๋“ฑ)์„ ํ•˜๋‚˜์”ฉ ์ ์šฉํ•˜๋ฉด์„œ ์ข€ ๋” ์™„๋ฒฝํ•œ ์ฝ”๋“œ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค. Spring Security์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํ•œ ๊ณต๋ถ€ ์‹œ๊ฐ„์„ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ ๋น ๋ฅด๊ฒŒ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  Security๋กœ ๋„˜์–ด๊ฐ”๋‹ค.

Security... ๋ญ”๊ฐ€ ์•Œ์•„์•ผ ๋  ๊ฒŒ ๋งŽ์€ ๋А๋‚Œ์ด์—ˆ๋‹ค.
๊ตฌ์กฐ๋ถ€ํ„ฐ ์—„์ฒญ ๋ณต์žกํ•ด ๋ณด์˜€๋‹ค. ์ฒ˜์Œ Spring Security๋ฅผ ์จ๋ณด๋Š” ๊ฑฐ๋ผ์„œ ๋” ๊ทธ๋žฌ๋˜ ๊ฒƒ ๊ฐ™๋‹ค..
ํ•˜์ง€๋งŒ ๋‘๋ ค์›€๋ณด๋‹ค๋Š” ์ผ๋‹จ ๋ถ€๋”ชํ˜€๋ณด์ž ๋ผ๋Š” ๋งˆ์ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ์™€ ๋ฌธ์„œ๋“ค์„ ์ฐพ์•„๋ณด๋ฉด์„œ ํ•„์š”ํ•œ ๋‚ด์šฉ๋“ค์„ ์ˆ˜์ง‘ํ•˜๊ณ  Notion์— ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ผญ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฐœ๋…์ด ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฐ์ด ์กฐ๊ธˆ์”ฉ ์žกํžˆ๊ธฐ ์‹œ์ž‘ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

Spring Security์— ๋Œ€ํ•œ ๊ณต๋ถ€๋ฅผ ๋งˆ์น˜๊ณ  ๋‚˜์„œ ์ง์ ‘ JWT๋งŒ ์ ์šฉ๋˜์–ด ์žˆ๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ์„ค์ •ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. 
Security์— ํ•„์š”ํ•œ Filter์™€ Config๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚ด์šฉ์„ ์ฑ„์›Œ๋‚˜๊ฐ”๋‹ค. ํ•˜์ง€๋งŒ JWT์—์„œ ์ด๋ฏธ ํ•œ๋ฒˆ ์‹คํŒจ๋ฅผ ๋ง›๋ดค๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ๋ถ„ํžˆ ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ”๋‹ค. Filter์— ๋“ค์–ด๊ฐ€์•ผ ๋˜๋Š” ๋‚ด์šฉ๋“ค์„ ํ™•์ธํ•˜๊ณ  ๋А๋ฆฌ์ง€๋งŒ ์ •ํ™•ํ•˜๊ฒŒ ํ•˜๋‚˜์”ฉ ์ฑ„์›Œ๋‚˜๊ฐ”๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋Ÿฐ์ง€ ์‹œ๊ฐ„์€ ์˜ค๋ž˜ ๊ฑธ๋ ธ์ง€๋งŒ ๋น ์ง„ ๋ถ€๋ถ„ ์—†์ด ๋ชจ๋‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ง‰์‚ญ ์ž‘์„ฑํ•˜๊ณ  ๋‚˜๋‹ˆ JwtFilter์— ์žˆ๋Š” ๋‚ด์šฉ๋“ค๊ณผ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ๋‹ค๊ณ  ๋А๊ปด์กŒ๋‹ค.

๋‹ค์Œ์œผ๋กœ SecurityConfig๋กœ ๋„˜์–ด์™€์„œ ๋‚ด์šฉ์„ ์ฑ„์›Œ๋‚˜๊ฐ€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. SecurityConfig๋Š” ๋ญ”๊ฐ€ ์ •ํ•ด์ง„ ํ‹€์ด ์žˆ๊ณ  ๊ฑฐ๊ธฐ์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์ง„ํ–‰ํ•˜๋Š” ๋А๋‚Œ์ด์—ˆ๋‹ค.
ํ•„์ˆ˜์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์กด์žฌํ–ˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” ํ•„์š”ํ•˜๋‹ค๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋А๋‚Œ..?

ํ•˜์ง€๋งŒ ์ฒ˜์Œ ํ•ด๋ณด๋Š” ๊ฑฐ๋ผ ๊ทธ๋Ÿฐ์ง€ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ ํ•˜๋ฃจ๋งŒ์— ๋‹ค ๋๋‚ด์ง€ ๋ชปํ–ˆ๊ณ .. ๋‚ด์ผ ์ด์–ด์„œ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค. 

 

๐Ÿ’ก ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ์€ ๋ญ๊ฐ€ ์žˆ๋”๋ผ..?!

Spring Security๊ฐ€ ๋ญ˜๊นŒ?!

Spring ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ, ๊ถŒํ•œ ์ฒ˜๋ฆฌ, ์„ธ์…˜ ์ œ์–ด, CSRF ๋ฐฉ์ง€, ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋“ฑ์„ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•˜๊ณ , ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ง์ ‘ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค.

Spring Security์˜ ํŠน์ง•

Filter๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

  • Spring MVC์™€ ๋ถ„๋ฆฌ๋˜์–ด ๊ด€๋ฆฌํ•˜๊ณ  ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

Bean์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Spring Security์˜ ๊ตฌ์กฐ

Spring Security์˜ ํ๋ฆ„

1. Http Request ์ˆ˜์‹ 

๐Ÿ‘‰ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์ •๋ณด์™€ ํ•จ๊ป˜ ์ธ์ฆ ์š”์ฒญ์„ ํ•œ๋‹ค.

2. ์œ ์ € ์ž๊ฒฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ์ฆ ํ† ํฐ ์ƒ์„ฑ

๐Ÿ‘‰ AuthenticationFilter๊ฐ€ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๊ณ , ๊ฐ€๋กœ์ฑˆ ์ •๋ณด๋ฅผ ํ†ตํ•ด UsernamePasswordAuthenticationToken์˜ ์ธ์ฆ์šฉ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค.

3. Filter๋ฅผ ํ†ตํ•ด AuthenticationToken์„ AuthenticationManager๋กœ ์œ„์ž„

๐Ÿ‘‰ AuthenticationManager์˜ ๊ตฌํ˜„์ฒด์ธ ProviderManager์—๊ฒŒ ์ƒ์„ฑํ•œ UsernamePasswordToken ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

4. AuthenticationProvider์˜ ๋ชฉ๋ก์œผ๋กœ ์ธ์ฆ์„ ์‹œ๋„

๐Ÿ‘‰ AuthenticationManager๋Š” ๋“ฑ๋ก๋œ AuthenticationProvider๋“ค์„ ์กฐํšŒํ•˜๋ฉฐ ์ธ์ฆ์„ ์š”๊ตฌํ•œ๋‹ค.

5. UserDetailsService์˜ ์š”๊ตฌ

๐Ÿ‘‰ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” UserDetailsService์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

6. UserDetails๋ฅผ ์ด์šฉํ•ด User ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด ํƒ์ƒ‰

๐Ÿ‘‰ ๋„˜๊ฒจ ๋ฐ›์€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฐพ์•„๋‚ธ ์‚ฌ์šฉ์ž ์ •๋ณด์ธ UserDetails ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค.

7. User ๊ฐ์ฒด์˜ ์ •๋ณด๋“ค์„ UserDetails๊ฐ€ UserDetailsService(LoginService)๋กœ ์ „๋‹ฌ

๐Ÿ‘‰ AuthenticationProvider๋“ค์€ UserDetails๋ฅผ ๋„˜๊ฒจ ๋ฐ›๊ณ  ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋น„๊ตํ•œ๋‹ค.

8. ์ธ์ฆ ๊ฐ์ฒด or AuthenticationException

๐Ÿ‘‰ ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ๊ถŒํ•œ ๋“ฑ์˜ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ด์€ Authentication ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

9. ์ธ์ฆ ๋

๐Ÿ‘‰ ๋‹ค์‹œ ์ตœ์ดˆ์˜ AuthenticationFilter์— Authentication ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

10. SecurityContext์— ์ธ์ฆ ๊ฐ์ฒด๋ฅผ ์„ค์ •

๐Ÿ‘‰ Authentication ๊ฐ์ฒด๋ฅผ SecurityContext์— ์ €์žฅํ•œ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ SecurityContextHolder๋Š” ์„ธ์…˜ ์˜์—ญ์— ์žˆ๋Š” SecurityContext์— Authentication ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์€ Spring Security๊ฐ€ ์ „ํ†ต์ ์ธ ์„ธ์…˜ - ์ฟ ํ‚ค ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๐Ÿ—“๏ธ ๋‚ด์ผ์€ ๋ญ ํ•˜์ง€?!

โœ”๏ธ Spring Security ๋งˆ๋ฌด๋ฆฌ
โœ”๏ธ ๋™์‹œ์„ฑ ๊ณต๋ถ€
โœ”๏ธ TIL ์ž‘์„ฑ