[Spring] ์Šคํ”„๋ง์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ๊ฒƒ์€?

    ์Šคํ”„๋ง(Spring)์€ ์ž๋ฐ” ๊ฐœ๋ฐœ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 

    ์˜์กด์„ฑ ์ฃผ์ž…(Dependenct Injection)๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋“ค์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋” ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. 

     

    ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋•Œ, ์Šคํ”„๋ง์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ?

     

    ์˜์กด์„ฑ ์ฃผ์ž… ์ปจํ…Œ์ด๋„ˆ (Dependency Injection Container) 

    : ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ์€ ์˜์กด์„ฑ ์ฃผ์ž…(DI) ์ด๋‹ค. DI Container๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ, 

    ์Šคํ”„๋ง์€ ์ด๋ฅผ ํ†ตํ•ด ๋Š์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling)์„ ์œ ์ง€ํ•˜๋ฉฐ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ œ์–ดํ•œ๋‹ค.

     

    AOP(Aspect-Oriented Programming) 

    : AOP๋Š” ์Šคํ”„๋ง์˜ ๋˜ ๋‹ค๋ฅธ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

    ์ด๋ฅผ ํ†ตํ•ด ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(Cross-Cutting Concerns)๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค. 

    ์Šคํ”„๋ง์€ AOP๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด AspectJ์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

     

    ๋ผ์ดํ”„์‚ฌ์ดํด ์ด๋ฒคํŠธ(Lifecycle Events) 

    : ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ์™€ ๊ฐ™์€ ๋ผ์ดํ”„์‚ฌ์ดํด ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ง„๋‹ค. 

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋  ๋•Œ ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ๋ฅผ ์บ์น˜ํ•˜๊ณ  ์ ์ ˆํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

     

    BeanPostProcessor ์™€ BeanFactoryPostProcessor 

    : ์ด ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์Šคํ”„๋ง์ด ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ •์— ๊ฐœ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. 

    BeanPostProcessor๋Š” ๋นˆ์ด ์ƒ์„ฑ๋œ ํ›„, ๋นˆ์„ ์ˆ˜์ • ๋˜๋Š” ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ , 

    BeanFactoryPostProcessor๋Š” ๋นˆ ํŒฉํ† ๋ฆฌ ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. 

     

    ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ ๋ฐ ํ™˜๊ฒฝ ์„ค์ • 

    : ์Šคํ”„๋ง์€ ์™ธ๋ถ€ ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. 

    ์ด๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ์„ค์ •ํ•˜๊ณ  ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

     

    ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด 

    : ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด๋„ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. 

    ์Šคํ”„๋ง์€ ์ž์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์€ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค .

     

     

    ๋Œ“๊ธ€