[Spring Security in Action] 1์žฅ

2024. 11. 14. 18:17ใ†๐ŸŒŠ๋„์„œ

์ฝ๊ณ„ ๋œ ๊ณ„๊ธฐ: 

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋กœ๊ทธ์ธ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‹ถ์–ด์„œ ํ•™๊ต ๋„์„œ๊ด€์—์„œ ์ด ์ฑ…์„ ๋นŒ๋ ธ๋‹ค!

 

1์žฅ ๋‚ด์šฉ ์š”์•ฝ

* ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ๊ฐœ๋…๊ณผ ์ด๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ
* ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด์•ˆ์˜ ์˜๋ฏธ
* ์†Œํ”„ํŠธ์›จ์–ด ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ์ด์œ ์™€ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์ด์œ 
* ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์˜ ์ผ๋ฐ˜์ ์ธ ์ทจ์•ฝ์„ฑ

 

 


[์†Œํ”„ํŠธ์›จ์–ด์˜ ๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ์˜ ์ค‘์š”์„ฑ]

 

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชฉ์ ์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ž„์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. 

-> ์ด๋Ÿฌํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๊ด€์ ์—๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๊ด€ํ–‰์ด ์ž˜ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค

 

์„ฑ๋Šฅ, ํ™•์žฅ์„ฑ, ๊ฐ€์šฉ์„ฑ, ๋ณด์•ˆ๊ณผ ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋น„๊ธฐ๋Šฅ์  ํŠน์ง•์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋‹จ๊ธฐ์  ์˜ํ–ฅ๊ณผ ์žฅ๊ธฐ์  ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค

 

์†Œํ”„๋ฅด์›จ์–ด์˜ ๋น„๊ธฐ๋Šฅ์  ํŠน์ง•๋“ค์„ ๋ฌด์‹œํ•˜๋ฉด DDos(๋ถ„์‚ฐ ์„œ๋น„์Šค ๊ฑฐ๋ถ€) ๊ณต๊ฒฉ์— ์›์น˜ ์•Š๊ฒŒ ์ฐธ์—ฌํ•˜๋Š” ๋“ฑ, ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ์˜ค๋ฅ˜๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ์˜ ์ˆจ๊ฒจ์ง„ ์ธก๋ฉด (๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜ ์ˆจ๊ฒจ์ง„ ๊ฒƒ์„ ์ฐพ๊ธฐ ์–ด๋ ค์›€) ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๋” ์œ„ํ—˜ํ•˜๋‹ค

 

์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์—ฌ๋Ÿฌ ๋น„๊ธฐ๋Šฅ์  ์ธก๋ฉด์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋น„๊ธฐ๋Šฅ์  ์ธก๋ฉด๋„ ๋ชจ๋‘ ์ค‘์š”ํ•˜๋ฉฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ ์ฑ…์ž„๊ฐ ์žˆ๊ฒŒ ๋‹ค๋ค„์•ผ ํ•œ๋‹ค 

 

 

[1.1 ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ : ๊ฐœ๋…๊ณผ ์žฅ์ ]

- ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์™€ ์Šคํ”„๋ง ๊ฐ„์˜ ๊ด€๊ณ„ ์•Œ์•„๋ณด๊ธฐ

 

https://spring.io/projects/spring-security

 

Spring Security

Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authoriz

spring.io

-> ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ธ์ฆ๊ณผ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์œ„ํ•ด ์„ธ๋ถ€์ ์ธ ๋งž์ถค ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ, ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณด์•ˆ์„ ์ ์šฉํ•˜๋Š” ๊ณผ์ •์„ ํฌ๊ฒŒ ๊ฐ„์†Œํ™”ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค, 

 

์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์˜ ๋ณด์•ˆ์„ ๊ตฌํ˜„ํ•  ๋•Œ, ๊ฐ€์žฅ ์šฐ์„ ์ ์ธ ์„ ํƒ์ด๋ฉฐ ์ธ์ฆ, ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์ผ๋ฐ˜์ ์ธ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ฐฉ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์„ธ๋ถ€์ ์ธ ๋งž์ถค ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

 

https://github.com/spring-projects/spring-security/

[์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์†Œ์Šค ์ฝ”๋“œ]

 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ๋ณด์•ˆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ธ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€์ด๋‹ค. ํ•˜์ง€๋งŒ ์Šคํ”„๋ง ์‹œํ๋ฆฌ

๋ฅผ ์ด์šฉํ•ด๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž๋™์œผ๋กœ ๋ณดํ˜ธ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. -> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•„์š”์— ๋งž๊ฒŒ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋งž์ถค ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผํ•จ

 

์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ด์šฉํ•˜๋ฉด ์ข‹์„๊นŒ?

-> ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์—์„œ ๊ฐ€์žฅ ํ”ํ•œ ๋ณด์•ˆ์˜ ํ™œ์šฉ ์‚ฌ๋ก€๋Š” ๋ˆ„๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์›ํ•˜๋Š” ๊ฒƒ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. (์ง‘(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์— ๊ฒฝ๋ณด์‹œ์Šคํ…œ์„ ์„ค์น˜ํ•œ๋‹ค๋ฉด ๋ฌธ์—๋งŒ ์„ค์น˜ํ•˜๊ณ  ๋๋‚ผ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฐฝ๋ฌธ์—๋„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ์ž์˜ ์—ญํ• !)

 

 

 

[1.2 ์†Œํ”„ํŠธ์›จ์–ด ๋ณด์•ˆ์ด๋ž€?]

 

- ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ํ‘œํ˜„ํ•œ ๋ณด์•ˆ์˜ ์˜๋ฏธ - 

ํ˜„์žฌ์˜ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ ํŠนํžˆ GDPR(General Data Protection Regulations; ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๊ทœ์ •) ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•  ๋•Œ ์ƒ๋‹น ๋ถ€๋ถ„์ด ๋ฏผ๊ฐํ•œ ์ •๋ณด์ผ ์ˆ˜ ์žˆ๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ์ธ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ชจ๋“  ์ •๋ณด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋œ๋‹ค.

๋ฏผ๊ฐํ•œ ์ •๋ณด์—๋Š” ์ „ํ™”๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ ์ฃผ์†Œ ๋˜๋Š” ์‹๋ณ„ ๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๋ฌดํ•ดํ•œ ์ •๋ณด๋„ ์žˆ์ง€๋งŒ, ์œ ์ถœ๋์„ ๋•Œ ์œ„ํ—˜์„ฑ์ด ๋†’์€ ์‹ ์šฉ ์นด๋“œ ์ •๋ณด ๋“ฑ์˜ ์ •๋ณด๋Š” ๋” ์ค‘์š”ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋Ÿฌํ•œ ์ •๋ณด์— ์ ‘๊ทผ, ๋ณ€๊ฒฝ ๋˜๋Š” ๊ฐ€๋กœ์ฑŒ ๊ธฐํšŒ๊ฐ€ ์—†๊ฒŒ ํ•ด์•ผ ํ•˜๋ฉฐ ์˜๋„๋œ ์‚ฌ์šฉ์ž ์ด์™ธ์˜ ๋Œ€์ƒ์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค. 

 

๋ณด์•ˆ์€ ๊ณ„์ธต๋ณ„๋กœ ์ ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ๊ณ„์ธต์— ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํ•„์š”ํ•˜๋‹ค. 

ํ•ด์ปค๋Š” ์•ฑ์ด ๋ณดํ˜ธํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํš๋“ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์žฅ์• ๋ฌผ์„ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ ๊ณ„์ธต์„ ๋” ์ž˜ ๋ณดํ˜ธํ• ์ˆ˜๋ก ์•…์˜์ ์ธ ๋Œ€์ƒ์ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ฌด๋‹จ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค

 

์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์—์„œ ๋ณด์•ˆ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์—๋งŒ ์ ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค

-> ์˜ˆ) ๋„คํŠธ์›Œํ‚น์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ํŠน์ •ํ•œ ๊ด€ํ–‰์„ ์ ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์Šคํ† ๋ฆฌ์ง€์—๋„ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์‚ฌํ•ญ์ด ์ ์šฉ๋œ๋‹ค

 

- ๋ณด์•ˆ ์ˆ˜์ค€์ด ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”๊ฐ€?

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€ ๋ณด์•ˆ

: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉ๋˜๊ณ  ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ์—๋งŒ ๊ตญํ•œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•…์˜์ ์ธ ๊ฐœ์ธ์ด ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์„ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค

 

๋ณด์•ˆ์€ ๊ฐ ๊ณ„์ธต์— ์ ์šฉ๋˜๊ณ  ๊ฐ ๊ณ„์ธต์€ ๊ทธ ์•„๋ž˜์˜ ๊ณ„์ธต์— ์˜์กดํ•œ๋‹ค. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ -> ์ตœ์ƒ์ธต์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์˜ ๋ณด์•ˆ์„ ๊ตฌํ˜„

ํžŒ ๊ณ„์ธต์˜ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ์—๋Š” ๋˜๋„๋ก ์œ„ ๊ณ„์ธต์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค

 

 

 

[์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์ธ์ฆ ํ”„๋กœ์„ธ์Šค]

๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ํšŒ์›์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ณ , ๊ทธ์— ๋”ฐ๋ฅธ ์ธ์ฆ(Authentication) ๊ณผ ์ธ๊ฐ€(Authorization) ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค!

 

 

** ์ธ์ฆ(Authentication) : ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ๋ณธ์ธ์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •

** ์ธ๊ฐ€(Authorization) : ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๋Š” ์ž์›์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”๊ฐ€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ณผ์ •

 

 

 

 

 

[์ž์„ธํ•œ ๋‚ด์šฉ์€ ์กฐ๊ธˆ ๋” ๊ณต๋ถ€ํ•œ ํ›„์— ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!!]