๐ 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
'Back > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring/Security] JWT (JSON Web Token) (10) | 2023.06.26 |
---|---|
[Spring/Security] Authentication ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ ์๋ 2๊ฐ์ง ํ์ (4) | 2023.06.23 |
[Spring/Security] ๊ตฌ๊ธ ํ์ ํ๋กํ ์ ๋ณด ๋ฐ์์ค๊ธฐ (5) | 2023.06.23 |
[Spring/Security] ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ค๋น (6) | 2023.06.23 |
[Spring] ์คํ๋ง AOP - ํฌ์ธํธ์ปท / ํฌ์ธํธ์ปท ์ง์์์ ์ข ๋ฅ / execution / @target / @within (0) | 2023.05.25 |