๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํšŒ๊ณ 

์‹ ๊ทœ ์‹œ์Šคํ…œ ๊ตฌ์ถ•ํ•˜๊ธฐ (feat. MSA, ๋ฐฑ์˜คํ”ผ์Šค)

by ์ฃผ๋ฐœ2 2024. 1. 19.
๋ฐ˜์‘ํ˜•

2023๋…„, ํŒ€ ๋‚ด๋ถ€์—์„œ๋Š” `ํŒฉํ† ๋ฆฌ` ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์‹ ๊ทœ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋กœ์˜ ๊ฒฝ๋ ฅ์ด ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ, ๊ฐ€์žฅ ๊ฒฝํ—˜์ด ์ข‹์•˜๋˜ ํ”„๋กœ์ ํŠธ์˜€๊ณ , ์ฒ˜์Œ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๋‹ค์šด(?) ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ž‘๋…„ ์ƒ๋ฐ˜๊ธฐ ์ง€๋…ํ•œ ๊ฐœ๋ฐœ ๋ฒˆ์•„์›ƒ์„ ๊ฒช์—ˆ๊ธฐ์—, ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์—๋Š” ๋งค์šฐ ์†Œ๊ทน์ ์œผ๋กœ ์ž„ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์–ด๋Š ์ •๋„ ๋ฒˆ์•„์›ƒ์„ ํšŒ๋ณตํ•˜๊ณ , ์ ์ฐจ ์ ๊ทน์ ์œผ๋กœ ์ฐธ์—ฌํ•˜๋ฉฐ ์ผ์ •์€ ๋น ๋“ฏํ–ˆ์ง€๋งŒ ๊ต‰์žฅํžˆ ์žฌ๋ฐŒ๊ณ  ์ฆ๊ฒ๊ฒŒ ํ–ˆ์—ˆ๋Š”๋ฐ์š”, ๊ด€๋ จํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

์‹ ๊ทœ ์‹œ์Šคํ…œ ๋ฐฐ๊ฒฝ

๊ธˆ์•ก๊ถŒ - ์Šคํƒ€๋ฒ…์Šค (20,000์› ๊ถŒ)

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

์œ„ ์Šคํƒ€๋ฒ…์Šค๋ฅผ ์˜ˆ๋กœ ๋“ค์ž๋ฉด 20,000์› ํ•œ๋„ ๋‚ด์—์„œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์Šคํƒ€๋ฒ…์Šค ๊ธˆ์•ก๊ถŒ ์ƒํ’ˆ์ž…๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ํ˜„์žฌ ๊ธˆ์•ก๊ถŒ ๊ด€๋ จํ•ด์„œ๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ์— ์˜์กด๋˜์–ด ์žˆ๊ธฐ์— ์—ฌ๋Ÿฌ ์ œ์•ฝ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์™ธ๋ถ€์™€์˜ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ํŒ€ ๋‚ด๋ถ€ ์‹œ์Šคํ…œ์˜ ํ†ตํ•ฉ์„ ์œ„ํ•œ ๊ธฐ๋ฐ˜ ํ™•๋ณด, ์ฟ ํฐ ๋ฐœ๊ธ‰ ๊ฐœ์„ , ์‚ฌ์—… ํ™•์žฅ์„ ๊ณ ๋ คํ•œ ์„ค๊ณ„ ๋“ฑ์˜ ๋ฐฐ๊ฒฝ์„ ๊ฐ€์ง€๊ณ  ์‹ ๊ทœ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ธฐ์กด ์‹œ์Šคํ…œ ์ƒํ™ฉ

๊ธฐ์กด์— ํŒ€์—์„œ ์šด์˜์ค‘์ธ ์‹œ์Šคํ…œ์€, ์˜ค๋ž˜์ „ ๊ตฌ์ถ•๋˜๊ณ  ๋‚œ ํ›„ ๊ฐœํŽธ์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ์ƒํƒœ์˜€๊ธฐ์— ๊ต‰์žฅํžˆ ๊ฑฐ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

  • UI์˜ ๊ฒฝ์šฐ XPlatform ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , ๊ด€๋ จ ์ž๋ฃŒ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1๋ฒˆ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ, ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๋ฌธ์„œ ๋“ฑ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์•„ ๊ฐœ๋ฐœ ์ธ์›์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์ด ์ œ๊ฐ๊ฐ์ž…๋‹ˆ๋‹ค.
  • UI ๊ฐœ๋ฐœ์„ ์œ„ํ•œ IDE ์—์„œ๋Š” ์ž๋™ ์™„์„ฑ, compile ์—๋Ÿฌ ์ฒดํฌ ๋ถˆ๊ฐ€๋Šฅ ๋“ฑ์œผ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.
  • UI ๊ฐœ๋ฐœ์€ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— VDI ๋ฅผ ์ ‘์†ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ๋กœ์ง์€ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ์ข… if ๋ฌธ์ด ๊ต‰์žฅํžˆ ๋งŽ์ด ์กด์žฌํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜์ฒœ~์ˆ˜๋งŒ ๋ผ์ธ์˜ java ํŒŒ์ผ์ด ๊ฝค๋‚˜ ๋งŽ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

์‹ ๊ทœ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์ด ์กด์žฌํ•˜๊ธฐ์— ์‹ ๊ทœ ์‹œ์Šคํ…œ์€ ์™„์ „ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ดˆ๊ธฐ ์„ค๊ณ„, ์„œ๋ฒ„ ๊ตฌ์ถ• ๋“ฑ์„ ์ง์ ‘ ์ง„ํ–‰ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์˜†์—์„œ ์ด๊ฒƒ์ €๊ฒƒ ๋ณด๋ฉด์„œ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์‹ ๊ทœ ์‹œ์Šคํ…œ์€ ์ƒํ’ˆ, ๋ฐœ๊ธ‰, ์ฟ ํฐ, ์Šน์ธ ๋“ฑ ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋กœ ๊ตฌ์ถ•ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ต‰์žฅํžˆ ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ์ง€๋งŒ, ๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ๋งŽ์€ ๊ฒƒ์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (๋‹ค์‹  ๋ชปํ•ด)

  • ๊ฐ ์„œ๋น„์Šค์˜ ํ˜ธ์ถœ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ์ง€,
  • ๋ฐœ๊ธ‰ ์ฒ˜๋ฆฌ ํ›„ API ์„œ๋ฒ„์—์„œ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์žฌ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ์ง€,
  • ๋ถ„์‚ฐ ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ ์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€,
  • Spring Cloud ์ƒํƒœ๊ณ„์˜ ์ดˆ๊ธฐ ํ•™์Šต ๋น„์šฉ,
  • ๋””๋ฒ„๊น…์˜ ์–ด๋ ค์›€ ๋“ฑ๋“ฑ...

๊ฒฐ๊ตญ ์‘๋‹ต ๊ด€๋ จ๋œ ์ปค์Šคํ…€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ, ์žฌ์ฒ˜๋ฆฌ์˜ ๊ฒฝ์šฐ ์š”์ฒญ ID, ๊ธ€๋กœ๋ฒŒ ํŠธ๋žœ์žญ์…˜ ID ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‚ด๋ถ€ ์ •์ฑ…์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ฒŒ๋” ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ Spring Cloud ์ƒํƒœ๊ณ„์˜ Eureka, Admin, Config, API Gateway ๋“ฑ๋“ฑ ๊ฐ ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋‹ค ๋ณด๋‹ˆ ์–ด๋– ํ•œ ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€๋„ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ๋Š”๋ฐ์š”, ์ด๋Ÿฌํ•œ ์ดํ•ด๋„๋ฅผ ์กฐ๊ธˆ ๋” ๋†’์ด๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐœ์ธ์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐฑ์˜คํ”ผ์Šค ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๋ฐฑ์˜คํ”ผ์Šค(์–ด๋“œ๋ฏผ) ์‹œ์Šคํ…œ์„ ์ฒ˜์Œ์œผ๋กœ ๊ตฌ์ถ•ํ•ด ๋ดค๋Š”๋ฐ, ๊ฐœ์ธ์ ์œผ๋กœ ํšŒ์›์˜ ์ธ์ฆ/์ธ๊ฐ€ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์žฌ๋ฐŒ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ธ์ฆ/์ธ๊ฐ€ ๋ถ€๋ถ„์€ Spring Security ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฃผ๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ์š”, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ฒ˜์Œ ์ ‘ํ•ด๋ณธ ๊ฑด ๋Œ€๋žต 3๋…„ ์ „์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹œ์—๋Š” ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์˜ ๊ต‰์žฅํžˆ ๋ณต์žกํ•˜๊ณ  ์ถ”์ƒ์ ์ธ ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ์˜ํ•ด ๋†’์€ ๋ฒฝ์„ ์ฒด๊ฐ์„ ํ–ˆ์—ˆ๋Š”๋ฐ์š”..

์ด๋ฒˆ์— ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ, ํ™•์‹คํžˆ ์ „๋ณด๋‹ค๋Š” ์ดํ•ด๋„๊ฐ€ ๊ฝค๋‚˜ ๋†’์•„์ง„ ๊ฒƒ ๊ฐ™์•„์„œ ์‹ ๊ธฐํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐฑ์˜คํ”ผ์Šค ํšŒ์› ์ธ์ฆ/์ธ๊ฐ€ ์ฒ˜๋ฆฌ

๋ฐฑ์˜คํ”ผ์Šค ์‹œ์Šคํ…œ์—์„œ ํšŒ์› ๊ด€๋ จํ•˜์—ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜์˜€๋Š”๋ฐ์š”, ์ด์™€ ๊ด€๋ จํ•ด์„œ ๊ฝค๋‚˜ ๋งŽ์€(?) ์ด์Šˆ๋“ค์„ ์ ‘ํ–ˆ์Šต๋‹ˆ๋‹ค. 

ํšŒ์› ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์ด์–ด์„œ ์ดˆ๊ธฐ์—๋Š” ๋ณด์•ˆ ์ธก๋ฉด์—์„œ๋„ ๋†“์น˜๋Š” ๋ถ€๋ถ„์ด ๊ฝค ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ค‘๋ณต ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๊ด€๋ จํ•ด์„œ, ๋กœ๊ทธ์ธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ์ฆ ์‹œ ์ปค์Šคํ…€ํ•œ ํ† ํฐ์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์œ ์ €ID ๋ฐ ํ† ํฐ์„ ๊ฐ๊ฐ key/value๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ค‘๋ณต ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ–ˆ๊ณ , ๋จผ์ € ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๋’ค๋Šฆ๊ฒŒ ๋กœ๊ทธ์ธ์„ ํ•œ ์œ ์ €๋Š” ๊ธฐ์กด ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ๋Š” ์œ ์ €์˜ ๊ณ„์ •์„ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์ฒ˜๋ฆฌํ•˜์—ฌ (๋ฌผ๋ก  ํ† ํฐ ๋งŒ๋ฃŒ์‹œ๊ฐ„์€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค๋งŒ..) ๋ฌดํ•œ์ • ๋กœ๊ทธ์ธ์ด ์•ˆ๋˜๋Š” ํ˜„์ƒ์„ ์˜ˆ๋ฐฉํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๊ทธ์ธ ํšŸ์ˆ˜์— ์ œํ•œ(๋ณด์•ˆ ์ง„๋‹จ)์„ ๋‘์–ด์•ผ ํ–ˆ๊ธฐ์— ๋กœ๊ทธ์ธ ์‹คํŒจ ํšŸ์ˆ˜๋ฅผ ์ปฌ๋Ÿผ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ตœ๋Œ€ ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๊ณ„์ •์ด ์ž ๊ธฐ๊ฒŒ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

์ด๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ์ง์ ‘ ๊ณ„์ •์„ ํ™œ์„ฑํ™”๋ฅผ ํ•ด์ฃผ๊ฑฐ๋‚˜, ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๋ฉด SuccessHandler ์—์„œ ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ์š”,

 

์ธ์ฆ(ํ† ํฐ)์˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์€ ์ตœ์ดˆ ์ƒ์„ฑ ์‹œ์ ์œผ๋กœ๋ถ€ํ„ฐ 30๋ถ„์œผ๋กœ ์„ค์ •ํ–ˆ์œผ๋‚˜, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ 30๋ถ„์ด ์ง€๋‚˜๋ฉด ํ† ํฐ์ด ์‚ญ์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์ œ๋กœ ๋กœ๊ทธ์•„์›ƒ์ด ๋˜๊ณ , 30๋ถ„๋งˆ๋‹ค ๊ณ„์† ๋กœ๊ทธ์ธํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋ฐœ์ƒํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ 30๋ถ„์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. (HttpSession ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)

 

๋Œ€๋žต์ ์œผ๋กœ ์ธ์ฆ ์ฒ˜๋ฆฌ๋Š” ์•„๋ž˜์˜ ํ๋ฆ„์œผ๋กœ ์ง„ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

Login Process

Spring Security๋ฅผ ์ ์šฉํ•˜์—ฌ ์ธ์ฆ/์ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ AuthenticationProvider ๊ตฌํ˜„์ฒด๋ฅผ ์ง์ ‘ Custom ํ•˜์—ฌ ์ž‘์„ฑํ•  ๋•Œ, authenticate() ๋ฉ”์„œ๋“œ๊ฐ€ ๋‘ ๋ฒˆ ํ˜ธ์ถœ์ด ๋˜๋Š” ์ด์Šˆ๊ฐ€ ์กด์žฌํ–ˆ๋Š”๋ฐ์š”, ์ด๋กœ ์ธํ•ด ๋กœ๊ทธ์ธ์— ์‹คํŒจํ•˜๋ฉด ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ ๋กœ๊ทธ์ธ ์‹คํŒจ ํšŸ์ˆ˜๊ฐ€ ์ค‘๋ณต์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

Custom AuthenticationProvider

๋Œ€๋žต์ ์œผ๋กœ ์œ„์˜ authenticate() ๋ฉ”์„œ๋“œ๊ฐ€ ๋‘ ๋ฒˆ ํ˜ธ์ถœ์ด ๋˜์–ด ์นด์šดํŠธ๊ฐ€ ์ค‘๋ณต์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

ProviderManager

์œ„๋Š” ์‹ค์ œ ์ธ์ฆ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ProviderManager ํด๋ž˜์Šค์˜ authenticate() ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

 

์œ„์˜ parentResult ๋ณ€์ˆ˜๋กœ ์ธํ•ด ์ตœ์ดˆ ์ธ์ฆ์— ์‹คํŒจํ•˜๋”๋ผ๋„ ๋‹ค์‹œ parent์˜ authenticate() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜์–ด ์ค‘๋ณต ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

(์•„๋งˆ ์žฌ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋งŒ๋“ ๊ฒŒ ์•„๋‹Œ๊ฐ€ ์‹ถ์€๋ฐ ์ž์„ธํžˆ๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.)

 

spring-security github์—์„œ ์•„๋ž˜ ์„ค์ •์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ์š”, ์ €๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€๋Š” ์•Š๋”๊ตฐ์š”..

 

 

๋”ฐ๋ผ์„œ ์ตœ์ดˆ ์ธ์ฆ ์ฒ˜๋ฆฌ๊ฐ€ ์ง„ํ–‰๋˜๋ฉด, authenticate() ๋ฉ”์„œ๋“œ์— ์กด์žฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ธ Authentication ๊ฐ์ฒด์— ์ •๋ณด๊ฐ€ ๋‚จ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ธ์ฆ์ด ์‹คํŒจํ–ˆ๋Š”์ง€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ–ˆ๊ธฐ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ˆ๊ธฐ์— ์กฐ๊ธˆ ์ฐ์ฐํ•˜๊ธด ํ•œ๋ฐ์š”, ์œ„ ์ด์Šˆ๋ฅผ ์กฐ๊ธˆ ๋” ํŒŒ์•…ํ•ด ๋ณด๊ณ  ๊ฒฐ๋ก ์ด ๋‚˜๋ฉด ๋‹ค์‹œ ๊ณต์œ ๋ฅผ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜…

 

์ถ”๊ฐ€์ ์œผ๋กœ, Spring Security ์—์„œ๋Š” "ROLE_" ๋ฅผ prefix๋กœ ๊ถŒํ•œ์„ ๊ด€๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ๋‚ด๋ถ€์ ์œผ๋กœ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋„ "ROLE_" ์„ prefix๋กœ ์„ ์–ธํ•˜๊ณ , ๋„ค์ด๋ฐ์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ์š”, ๊ถŒํ•œ ๊ด€๋ฆฌ ํ…Œ์ด๋ธ”์˜ ๊ถŒํ•œ๋ช…์ด length ๊ฐ€ ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— "ROLE_" prefix๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธธ์ด ์ œํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ prefix๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/38134121/how-do-i-remove-the-role-prefix-from-spring-security-with-javaconfig

์œ„์˜ ๋ฐฉ์‹๋Œ€๋กœ ์„ค์ •ํ•œ ๊ถŒํ•œ์€ @RolesAllowed ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ API ๋งˆ๋‹ค ๊ถŒํ•œ ์ฒดํฌ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(Spring Security์˜ "ROLE_" prefix ๋ฅผ ์ œ๊ฑฐํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ๊ถŒํ•œ ์„ค์ •์„ ์ž์ฒด์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

 

 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ ์ธ์ฆ๋œ ์œ ์ €๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, @AuthenticationPrincipal ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด SecurityContextHolder์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ธ์ฆ๋œ ์œ ์ €๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹ค์ œ SecurityContextHolder์— ์ธ์ฆ๋œ ์œ ์ €๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋Š” UsernamePasswordAuthenticationToken ํด๋ž˜์Šค๋กœ, ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ๋Š” principal, credentials, authorities๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(principal = username, credentials = password ์ •๋„๋กœ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.)

 

ํ•˜์ง€๋งŒ, @AuthenticationPrincipal ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ๋œ ์œ ์ €๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” principal๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒํ•œ(authorities) ์ฒด๊ณ„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

@AuthenticationPrincipal ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ํด๋ž˜์Šค๋Š” AuthenticationPrincipalArgumentResolver ์ž…๋‹ˆ๋‹ค.

 

@AuthenticationPrincipal ์–ด๋…ธํ…Œ์ด์…˜์€ AuthenticationPrincipalArgumentResolver ํด๋ž˜์Šค์˜ resolveArgument() ๋ฉ”์„œ๋“œ์—์„œ SecurityContextHolder ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ธ์ฆ๋œ ์œ ์ €๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

AuthenticationPrincipalArgumentResolver

 

๋”ฐ๋ผ์„œ ์ด ๋ถ€๋ถ„๋„ ์ปค์Šคํ…€์„ ํ•ด ์ฃผ๊ฑฐ๋‚˜, principal ๋‚ด๋ถ€์—๋„ authorities ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์ด ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋งํฌ

 

ํ”„๋ก ํŠธ ์—”๋“œ

ํ™”๋ฉด์ด ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ, ๊ทธ์ค‘ ๊ฐœ๋ฐœํ–ˆ๋˜ ํ™”๋ฉด์€ ๋” ์ ์ง€๋งŒ... ์‚ฌ์‹ค ๊ฐ€์žฅ ์• ๋จน์—ˆ๋˜(?) ์ž‘์—…์ด ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ๋‚˜ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์„ ํ•ด ๋ณธ ๊ฒฝํ—˜์ด ๊ณผ๊ฑฐ์— ๊ฑฐ์˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”์šฑ ์–ด๋ ค์› ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ธฐ์กด ๋™๋ฃŒ๋ถ„์ด ์„ธํŒ…ํ•ด ์ฃผ์‹  ํ…œํ”Œ๋ฆฟ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ๊ธˆ์”ฉ ์ˆ˜์ •ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ ๋ช‡๋ช‡ ์ด์Šˆ๋“ค์€ ๋‹น์—ฐํžˆ ์žˆ์—ˆ๋Š”๋ฐ์š”,

  • Router ์„ค์ •
  • ๋ถ€๋ชจ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ ์„ค์ • ๋ฐ ์ „๋‹ฌ
  • Error๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— Warning์œผ๋กœ ๋‚˜์˜จ ๋ฌธ์ œ๋“ค
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ›„ ํŒ์—…(Dialog) ์ฒ˜๋ฆฌ ๋ฐ ์ผ๊ด€์„ฑ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ์˜ˆ์ƒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค + (Promise/async&await)
  • Vue ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฐ ๋ถ€๋ชจ, ์ž์‹ ๊ฐ„์˜ ์ดˆ๊ธฐํ™” ์ˆœ์„œ ๋“ฑ๋“ฑ

์ง์ ‘ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ™์ด ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋‹ˆ ํ™•์‹คํžˆ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š”์ง€, ์„œ๋ฒ„์—์„œ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค˜์•ผ ํ”„๋ก ํŠธ์—์„œ ์ž˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„์ง€ ๋“ฑ์„ ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ณด์•ˆ ์ฒ˜๋ฆฌ

์„œ๋น„์Šค์— ๊ฐœ์ธ์ •๋ณด(ํšŒ์›)๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์„ ๊ณ ๋ คํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ธฐ์กด์— ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ์ฑ™๊ธด ์ ์€ ํฌ๊ฒŒ ์—†์—ˆ๊ธฐ์—, ์ด๋Š” ๊ณ ์Šค๋ž€ํžˆ ๋ณด์•ˆ ์ง„๋‹จ ํ…Œ์ŠคํŠธ์—์„œ ๋‹ค ๊ฒ€์—ด์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค..

 

์กฐ๊ธˆ๋งŒ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ๋‹น์—ฐํ•œ ๊ฒƒ๋“ค์ธ๋ฐ, ์ด๋Ÿฌํ•œ ์ผ€์ด์Šค๋ฅผ ์ฑ™๊ธฐ์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ๋ถ€๋„๋Ÿฌ์› ์ง€๋งŒ ์ด๋ฒˆ ๊ธฐํšŒ์— ํ™•์‹คํžˆ ์•Œ๊ฒŒ ๋˜์–ด์„œ ์˜คํžˆ๋ ค ๋‹คํ–‰์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. (๋‹ค์Œ์— ๋™์ผํ•œ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š์œผ๋ฉด ๋˜๋‹ˆ๊นŒ์š” ๐Ÿ˜…๐Ÿ˜…)

  • ๋กœ๊ทธ์ธ ์‹คํŒจ ์ผ€์ด์Šค์—์„œ ์‹คํŒจ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ์— ๊ณ„์ •์ด ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์œ ์ถ” ๊ฐ€๋Šฅ
  • ๊ฐœ์ธ ์ •๋ณด์˜ ๋งˆ์Šคํ‚น ์ฒ˜๋ฆฌ
  • ๋กœ๊ทธ์ธ ์‹œ๋„ ํšŸ์ˆ˜๊ฐ€ nํšŒ ์ด์ƒ์ผ ๊ฒฝ์šฐ ๊ณ„์ • ์ž ๊ธˆ ์ฒ˜๋ฆฌ (๋ฌด์ œํ•œ ์‹œ๋„ ์˜ˆ๋ฐฉํ•˜๊ธฐ)
  • ์„œ๋ฒ„์—์„œ ๊ถŒํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ถŒํ•œ์„ ์กฐ์ž‘ํ•˜์—ฌ ๊ณ„์ • ๊ถŒํ•œ ์ƒ์Šน ๊ฐ€๋Šฅ์„ฑ
  • Vue 2 ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ณด์•ˆ ์ฒ˜๋ฆฌ๋Š” ๋งํฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ผ€์ด์Šค๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ€์ด์Šค๋„ ์žˆ์ง€๋งŒ, ๊ธฐํš์ž์™€ ํ•จ๊ป˜ ์ •ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋”๋”์šฑ ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

QA ์ฒ˜๋ฆฌ

QA ์ฒ˜๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ ํ›„ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ QA ๋‹ด๋‹น์ž๊ฐ€ ์ž‘์„ฑ๋œ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

QA๋Š” ๋‹ด๋‹น์ž๊ฐ€ ์ง„ํ–‰ํ•˜์ง€๋งŒ ํ•ต์‹ฌ์€ "๊ฐœ๋ฐœ์ž๊ฐ€ ์ปจํŠธ๋กค์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค." ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ QA๋Š” ์™ธ์ฃผ ๋ถ„๋“ค์ด ์ง„ํ–‰ํ•˜์‹œ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ง ์‚ฌ์†Œํ•œ ๊ฒƒ๋„ ๋†“์น˜์ง€ ์•Š๊ณ  ๋‹ค ํ™•์ธ์„ ํ•˜์‹œ๋Š”๋ฐ์š”, '์ด๋Ÿฐ ๊ฒƒ๊นŒ์ง€ ํ•„์š”ํ•œ๊ฐ€?' ์‹ถ์„ ์ •๋„๋กœ ์ •๋ง ์ž˜ ์ฐพ์•„๋‚ด์‹œ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ • ๋ฒ”์œ„ ๋‚ด์—์„œ ์ ๋‹นํ•œ ์กฐ์œจ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

ํŠนํžˆ QA๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ๋•Œ, ์–ด๋Š์ •๋„ ์˜ˆ์ƒ์ด ๊ฐ€๋Šฅํ•œ ์ด์Šˆ์ง€๋งŒ ์ค‘์š”๋„๊ฐ€ ๋†’์ง€ ์•Š์€ ๊ธฐ๋Šฅ์€ ์ด๋ฅผ QA์—์„œ ๋ฐœ๊ฒฌ๋˜๋”๋ผ๋„ ์ด๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์ผ๋ถ€ ๋ฏธ๋ฃจ๋Š” ๋ฐฉ์‹๋„ ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ •๋ฆฌํ•˜๋ฉฐ

๋ฐฑ์˜คํ”ผ์Šค ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ๋• ์ผ์ •์ด ๊ฝค๋‚˜ ์ด‰๋ฐ•ํ•ด์„œ ์•ผ๊ทผ(?)์„ ๊ฝค๋‚˜ ์ž์ฃผ ํ–ˆ๋Š”๋ฐ, ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ๋„ˆ๋ฌด ์žฌ๋ฐŒ์—ˆ์Šต๋‹ˆ๋‹ค.

์งง์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ๋™์•ˆ ๊ฒช์—ˆ๋˜ ๊ฐ€์žฅ ๊ฒฝํ—˜์ด ์ข‹์€(?) ํ”„๋กœ์ ํŠธ์˜€๊ณ , ๊ฐ™์ด ์ง„ํ–‰ํ–ˆ๋˜ ๋™๋ฃŒ๋“ค์—๊ฒŒ๋„ ๊ต‰์žฅํžˆ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์‹ค, ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์—๋Š” ํ˜‘์—…ํ•  ๊ธฐํšŒ๋„ ๊ฑฐ์˜ ์—†์—ˆ๊ณ  ๋„ˆ๋ฌด๋‚˜ ๋”ฐ๋ถ„ํ•œ ํ™˜๊ฒฝ์—์„œ ์ผ์„ ํ–ˆ์—ˆ๋‹ค๋ฉด, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ํ˜‘์—…ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๋Š” ๊ฒฝํ—˜์ด ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ์š”์†Œ์ด๊ณ , ์ผ์˜ ์žฌ๋ฏธ์—๋„ ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํŠนํžˆ ์‹ ๊ทœ ์„œ๋น„์Šค๋ฅผ ์ž‘๊ฒŒ๋‚˜๋งˆ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋กœ ๊ตฌ์ถ•ํ•จ์œผ๋กœ ๋‹ค์–‘ํ•œ ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, (๊ฐœ์ธ์ ์œผ๋กœ) ์กฐ๊ธˆ ๊ณผํ•œ ์„ค๊ณ„๊ฐ€ ์•„๋‹ˆ์—ˆ์„๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์— ์‹ ๊ทœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ๊ธฐํšŒ๊ฐ€ ๋˜ ์ƒ๊ธด๋‹ค๋ฉด, ํŠนํžˆ๋‚˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๋”์šฑ ์‹ ๊ฒฝ ์จ์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋ฌธ์„œ

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€