์คํ๋ง(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๋ ๋น ํฉํ ๋ฆฌ ๊ตฌ์ฑ์ ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
ํ๋กํผํฐ ํ์ผ ๋ฐ ํ๊ฒฝ ์ค์
: ์คํ๋ง์ ์ธ๋ถ ํ๋กํผํฐ ํ์ผ์ ๋ก๋ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ค.
์ด๋ฅผ ํตํด ํ๊ฒฝ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์ค์ ํ๊ณ ์กฐ์ ํ ์ ์๋ค.
์คํ๋ง ํ๋ ์์ํฌ ์์ฒด
: ์คํ๋ง ํ๋ ์์ํฌ ์์ฒด๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ์ ์ธ ๋ถ๋ถ ์ค ํ๋๋ผ๊ณ ๋งํ ์ ์๋ค.
์คํ๋ง์ ์์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ค์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ํ ์ญํ ์ ํ๋ค .
'๐ฉ๐ปโ๐ป Developer > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[spring boot] Spring Security ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ํ์ด์ง ์์ ๊ธฐ (6.1 ์ด์ ๋ฒ์ ) (0) | 2024.05.15 |
---|---|
[Spring] ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์๋ ฅ์ ๋์ด๋ ๋ฐฉ๋ฒ (0) | 2024.04.01 |
[Spring] ์คํ๋ง ๋ถํธ์์ auto-configuration์ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ (0) | 2024.03.21 |
[Spring] traceld ์ spanld๋? (0) | 2024.03.20 |
[Spring] ์ด๋ ธํ ์ด์ ์ ์ฉ๋ (0) | 2024.03.19 |
๋๊ธ