๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back/Spring

[Spring] Bean

by ์˜ค์—ฅ?์€ 2023. 7. 19.
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ Spring Bean

๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ๋กœ์ง ์ƒ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ทธ ๋•Œ ๊ทธ ๋•Œ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฃจ๋Š” ์–ธ์–ด๊ฐ€ ์ž๋ฐ”๋ผ๋ฉด new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ณณ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋กœ์ง์„ ๋„ฃ์„ ๊ฒƒ์ด๋‹ค.
 
ํ•˜์ง€๋งŒ ์Šคํ”„๋ง์—์„œ๋Š” ํด๋ž˜์Šค๋“ค์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ฅผ ์ผ์ผ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์Šคํ”„๋ง์—๊ฒŒ ๊ด€๋ฆฌ๋ฅผ ๋งก๊ธฐ๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ์ด ์Šคํ”„๋ง์˜ ์ฃผ์š” ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ธ IoC(Inversion of Control)์ด๋‹ค.

IoC(Inversion of Control) : ์ œ์–ด์˜ ์—ญ์ „, ๊ฐ์ฒด๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ)์—์„œ ์ƒ์„ฑ, ๊ด€๋ฆฌ 

์ด ๋•Œ, ์Šคํ”„๋ง์ด ๊ฐ์ฒด๋“ค์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด๋ ‡๊ฒŒ ์Šคํ”„๋ง์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์—์„œ๋Š” ๋นˆ(Bean)์ด๋ผ๊ณ  ํ•œ๋‹ค.
 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container):  ์Šคํ”„๋ง์—์„œ ์ž๋ฐ” ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„
์Šคํ”„๋ง ๋นˆ(Spring Bean) : ์Šคํ”„๋ง์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด

 

๋ฐ˜์‘ํ˜•

 
์ƒ์„ฑ์ž์— @Autowired ๊ฐ€ ์žˆ์œผ๋ฉด ์Šคํ”„๋ง์ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฐพ์•„์„œ ๋„ฃ์–ด์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด DI(Dependency Injection)๋‹ค. 
 
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ์ด์œ ๋Š” ์Šคํ”„๋ง์ด ๊ฐ ๊ฐ์ฒด๊ฐ„ ์˜์กด๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋Š”๋ฐ ํฐ ๋ชฉ์ ์ด ์žˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ์˜์กด๊ด€๊ณ„๋ฅผ ๋“ฑ๋กํ•  ๋•Œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•ด๋‹นํ•˜๋Š” ๋นˆ์„ ์ฐพ๊ณ , ๊ทธ ๋นˆ๊ณผ ์˜์กด์„ฑ์„ ๋งŒ๋“ ๋‹ค.
 
 

๐Ÿ“Œ Spring์—์„œ Bean ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ด์œ 

1) ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ: Spring์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ Spring ์ปจํ…Œ์ด๋„ˆ์— ์œ„์ž„ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์— ๋Œ€ํ•œ ๋กœ์ง์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
 
2) ์˜์กด์„ฑ ๊ด€๋ฆฌ: Spring์€ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์„ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•œ๋‹ค. Bean์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•จ์œผ๋กœ์จ, ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ํ…Œ์ŠคํŠธ์™€ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
 
3) ๋ผ์ดํ”„์‚ฌ์ดํด(์ƒ๋ช…์ฃผ๊ธฐ) ๊ด€๋ฆฌ: Spring์€ ๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•œ๋‹ค. ๋นˆ์˜ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ๊ณผ ๊ฐ™์€ ๋ผ์ดํ”„์‚ฌ์ดํด ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ์ปค์Šคํ…€ ๋ผ์ดํ”„์‚ฌ์ดํด ์ฝœ๋ฐฑ์„ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐํ™”๋‚˜ ์ข…๋ฃŒ ์‹œ์ ์— ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
 

โœ”๏ธ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
- ๊ฐ์ฒด ์ดˆ๊ธฐํ™”: ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ํŒŒ์ผ ๋กœ๋”ฉ, ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์ดˆ๊ธฐํ™” ๋“ฑ์˜ ์ž‘์—…์„ ๊ฐ์ฒด ์ƒ์„ฑ ํ›„์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์ž์› ๊ด€๋ฆฌ: ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž์›๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ํŒŒ์ผ ํ•ธ๋“ค, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋“ฑ์˜ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์ž์›์„ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค. ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋  ๋•Œ ์ž์›์„ ์•ˆ์ „ํ•˜๊ฒŒ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์™ธ๋ถ€ ์—ฐ๋™: ๊ฐ์ฒด๊ฐ€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•ด์•ผ ํ•  ๋•Œ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•œ ํ›„์— ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ์ฒด ๊ฐ„์˜ ์ถฉ๋Œ์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋ˆ„์ˆ˜ ๋“ฑ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ: ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ์ดˆ๊ธฐํ™” ์ž‘์—…, ๊ฐ์ฒด ์†Œ๋ฉธ ์ „ ์ •๋ฆฌ ์ž‘์—… ๋“ฑ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์ปค์Šคํ…€ ๋™์ž‘: ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋”ฐ๋ผ ์ปค์Šคํ…€ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ์ฒด ์ƒ์„ฑ ํ›„์— ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ๊ฐ์ฒด ์†Œ๋ฉธ ์ „์— ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์ปค์Šคํ…€ ๋™์ž‘์„ ์ •์˜ํ•˜๊ณ  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
 

 
4) ์Šค์ฝ”ํ”„ ๊ด€๋ฆฌ: Spring์€ ๋นˆ์˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ฑ๊ธ€ํ†ค(Singleton), ํ”„๋กœํ† ํƒ€์ž…(Prototype), ์š”์ฒญ(Request), ์„ธ์…˜(Session) ๋“ฑ ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•˜์—ฌ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๋ฒ”์œ„๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๊ณผ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
 

โœ”๏ธ ์Šค์ฝ”ํ”„๋ž€?
์Šค์ฝ”ํ”„๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์— ๋Œ€ํ•œ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. ์Šค์ฝ”ํ”„๋Š” ๊ฐ์ฒด๊ฐ€ ์–ด๋А ๋ฒ”์œ„์—์„œ ์œ ํšจํ•œ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ, Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์›ํ•œ๋‹ค.
- ์‹ฑ๊ธ€ํ†ค(Singleton) ์Šค์ฝ”ํ”„: ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„๋Š” ํ•˜๋‚˜์˜ ๋นˆ ๊ฐ์ฒด๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ์Šค์ฝ”ํ”„๋‹ค. ์ฆ‰, Spring ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ํ•ด๋‹น ๋นˆ์€ ์˜ค์ง ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑ๋˜๊ณ , ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ์ ์ธ ์Šค์ฝ”ํ”„์ด๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๋นˆ์ด ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์„ค์ •๋œ๋‹ค.
- ํ”„๋กœํ† ํƒ€์ž…(Prototype) ์Šค์ฝ”ํ”„: ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„๋Š” ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šค์ฝ”ํ”„๋‹ค. ์ฆ‰, Spring ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์ฒญ๋งˆ๋‹ค ํ•ด๋‹น ๋นˆ์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„๋Š” ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
- ์š”์ฒญ(Request) ์Šค์ฝ”ํ”„: ์š”์ฒญ ์Šค์ฝ”ํ”„๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ HTTP ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šค์ฝ”ํ”„๋‹ค. ์ฆ‰, ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋นˆ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉฐ, ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋Š” ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ๊ฐ์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
- ์„ธ์…˜(Session) ์Šค์ฝ”ํ”„: ์„ธ์…˜ ์Šค์ฝ”ํ”„๋Š” ์‚ฌ์šฉ์ž ์„ธ์…˜ ๋‹จ์œ„๋กœ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šค์ฝ”ํ”„๋‹ค. ์ฆ‰, ํ•œ ์„ธ์…˜์—์„œ ํ•ด๋‹น ๋นˆ์„ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉฐ, ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋Š” ์†Œ๋ฉธ๋œ๋‹ค. ์„ธ์…˜ ์Šค์ฝ”ํ”„๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ธ์…˜ ๋‹จ์œ„๋กœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
 
์Šค์ฝ”ํ”„๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๊ณ , ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
 

5) ์„ค์ • ๊ด€๋ฆฌ: Spring์€ XML, Java Config, Annotation ๋“ฑ์„ ํ†ตํ•ด ๋นˆ์˜ ์„ค์ •์„ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์„ ์™ธ๋ถ€ ์„ค์ • ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋™์ ์œผ๋กœ ๋นˆ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
 
6) AOP(Aspect-Oriented Programming) ์ง€์›: Spring์€ AOP๋ฅผ ์ง€์›ํ•˜์—ฌ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ด€๋ จ ์—†๋Š” ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ(๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ)์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Bean์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ๋ชจ๋“ˆ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
 
 
์ด๋Ÿฌํ•œ ์ด์œ ๋“ค๋กœ ์ธํ•ด Spring์—์„œ๋Š” bean ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ์ฒด์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ , ๋ผ์ดํ”„์‚ฌ์ดํด๊ณผ ์Šค์ฝ”ํ”„๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •๊ณผ AOP๋ฅผ ์ง€์›ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด๋ฅผ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์—ฐ์„ฑ๊ณผ ๋ชจ๋“ˆ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
 
 
 
 
 

์ฐธ๊ณ  - https://bnzn2426.tistory.com/124

๋ฐ˜์‘ํ˜•