Beans(๋น)
์คํ๋ง ๋น(Bean) : ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์ฑํ๊ณ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด
Bean์ ์คํ๋ง์ ๊ตฌ์ฑํ๋ ํต์ฌ ์์๋ก, ๋น ์ ์ ๋ฉํ๋ฐ์ดํฐ(BeanDefinition)๋ก ๋ฑ๋ก๋๊ณ ์ปจํ ์ด๋๋ ํด๋น ์ ์์ ๋ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑ, ์์กด์ฑ ์ฃผ์ , ์ด๊ธฐํ, ์๋ฉธ๊น์ง ๊ด๋ฆฌํ๋ค.
ํต์ฌ ๊ตฌ์ฑ ์์
class
๋น์ผ๋ก ๋ฑ๋กํ Java ํด๋์ค
์คํ๋ง ์ปจํ ์ด๋์ ์ํด ๊ฐ์ฒด๋ก ์์ฑ ๋ฐ ๊ด๋ฆฌ๋์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ Bean์ผ๋ก ์ฌ์ฉ
id
์ปจํ ์ด๋์์ ๋น์ ์๋ณํ๊ธฐ ์ํ ๊ณ ์ ์๋ณ์
ํด๋์ค๋ช ์ decapitalizeํ ์ด๋ฆ์ ๊ธฐ๋ณธ์ผ๋ก ๋ถ์ฌํ๋ฉฐ, ๋ช ์์ ์ผ๋ก ์ง์ ๊ฐ๋ฅ
scope
๋น ์ธ์คํด์ค์ ์์กด ๋ฒ์ ์ ์
๊ธฐ๋ณธ๊ฐ singleton
constructor-arguments
Bean์ ์์ฑํ ๋ ์์ฑ์์ ์ ๋ฌํ ์ธ์๋ค์ ์ ์
Bean์ ์ด๊ธฐํํ๋ ๋ฐ ์ฌ์ฉ
property
Bean์ ์์ฑํ ๋ setter๋ฅผ ํตํด ์ ๋ฌํ ์ธ์๋ค์ ์ ์
๊ธฐํ ๋ฉํ๋ฐ์ดํฐ
initMethod, destroyMethod, lazyInit, primary, autowireCandidate, dependsOn, description ๋ฑ
์คํ๋ง ๋น ๋ฑ๋ก ๋ฐฉ๋ฒ
1. ์ปดํฌ๋ํธ ์ค์บ
์ปดํฌ๋ํธ ์ค์บ์ผ๋ก ์ด๋ ธํ ์ด์ ์ด ๋ถ์ฌ๋ ํด๋์ค๋ฅผ ์๋ ํ์งํ์ฌ ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
์ฌ์ฉ ์ด๋ ธํ ์ด์ :
@Component์ ํนํ ์ด๋ ธํ ์ด์ (@Controller,@Service,@Repository, ๋ฑ)ํ์ ๋ฒ์:
@ComponentScan์basePackages,basePackageClasses,includeFilters,excludeFilters๋ก ์ ์ด์ด๋ฆ ๊ท์น: ๊ธฐ๋ณธ์ ํด๋์ค๋ช decapitalize. @Component("customName")๋ก ์ง์ ๊ฐ๋ฅ
์์กด์ฑ ์ฃผ์ ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋๋ฐ, ๊ทธ ์ค ์์ฑ์ ์ฃผ์ ๋ฐฉ๋ฒ์ ๊ถ์ฅํ๊ณ ์๋ค.(๋จ์ผ ์์ฑ์์ผ ๊ฒฝ์ฐ @Autowired ์๋ต ๊ฐ๋ฅ)
2. ์๋ฐ ์ค์ (@Configuration + @Bean)
์ ํํ ๋์ง ์์ ์ฝ๋๊ฑฐ๋, ์ํฉ์ ๋ฐ๋ผ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
@Configuration์ ๋ ๊ฐ์ง ์์ฑ์ด ์กด์ฌํ๋๋ฐ, ๊ฐ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
value:@Configuration์ ์ธ๋ ํด๋์ค์ ์ด๋ฆ์ ์ง์ proxyBeanMethods: ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๋น์ ์ฐธ์กฐํ ๋ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๊ธํค ๋ณด์ฅ(๊ธฐ๋ณธ๊ฐtrue)์ง์ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋,
CGLIB์ ์ํด ์์ฑ๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๊ธํค ๋ณด์ฅ
๋น ์๋ช
์ฃผ๊ธฐ
์คํ๋ง ๋น์ ์์ฑ - ์์กด๊ด๊ณ ์ฃผ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์ฌ์ฉํ ์ ์๋ ์ํ๊ฐ ๋๋ฉฐ, ์คํ๋ง ๋น์ ๋๋ต์ ์ธ ์ด๋ฒคํธ ๋ผ์ดํ ์ฌ์ดํด์ ์๋์ ๊ฐ๋ค.
์คํ๋ง ์ปจํ ์ด๋ ์์ฑ
์คํ๋ง ๋น ์์ฑ ๋ฐ ๋ฑ๋ก
Bean์ผ๋ก ๋ฑ๋กํ ์ ์๋Annotation๋ฐConfiguration์ ์ฝ์ด IoC ์ปจํ ์ด๋ ์์Bean์ผ๋ก ๋ฑ๋ก์์กด ๊ด๊ณ ์ฃผ์ ์ ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ํ(Field/Setter ์ฃผ์ ์ ๊ฒฝ์ฐ์๋ง)
์์ฑ์ ์ฃผ์ : ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋์์ ๋ฐ์
Setter/Field ์ฃผ์ : ๊ฐ์ฒด ์์ฑ -> ์์กด ๊ด๊ณ ์ฃผ์ ๋จ๊ณ ๋ถ๋ฆฌ
์ด๊ธฐํ ์ฝ๋ฐฑ
๋น์ด ์์ฑ๋๊ณ , ๋น์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋ฃ๋ ํ ํธ์ถ
๋ฐํ์ ์ฌ์ฉ
์ค์ ์ ํ๋ฆฌ์ผ์ด์ (๋น) ๋์ ๋จ๊ณ
์๋ฉธ ์ ์ฝ๋ฐฑ
๋น์ด ์๋ฉธ๋๊ธฐ ์ง์ ์ ํธ์ถ
์คํ๋ง ์ข ๋ฃ
๋น ์๋ช
์ฃผ๊ธฐ(์ด๊ธฐํ/์๋ฉธ) ์ฝ๋ฐฑ
๋น์ ์์ ๋ฐ ์ข ๋ฃ ์์ ์ ์ถ๊ฐ์ ์ธ ์ฝ๋ฐฑ ์์ ์ ์ํํ ์ ์์ผ๋ฉฐ, ์๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.(์คํ๋๋ ์์๋ ์๋ ๋ฒํธ ์์๋๋ก ์คํ)
1. @PostConstruct, @PreDestroy ์ ๋
ธํ
์ด์
@PostConstruct: ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋๋๋ฉด ํธ์ถ
@PreDestroy: ๋น์ด ์ข ๋ฃ๋ ๋ ํธ์ถ
์ต์ ์คํ๋ง์์ ๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ
javax.annotation.PostConstruct์ธ ์๋ฐ ํ์ค ๊ธฐ์์ปดํฌ๋ํธ ์ค์บ๊ณผ ๊ถํฉ์ด ์ข์
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ ์ฉ ๋ถ๊ฐ๋ฅ -> ์ด ๊ฒฝ์ฐ
@Bean์initMethod,destroyMethod๋ฅผ ์ฌ์ฉ
2. ์ธํฐํ์ด์ค(InitializingBean, DisposableBean)
InitializingBeanInafterPropertiesSet(): ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋๋๋ฉด ํธ์ถDisposableBeanIndestroy(): ๋น์ด ์ข ๋ฃ๋ ๋ ํธ์ถ
์คํ๋ง ์ ์ฉ ์ธํฐํ์ด์ค์ ์์กด
์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋์ ์ด๋ฆ ๋ณ๊ฒฝ ๋ถ๊ฐ
์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉ ๋ถ๊ฐ
3. ์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข
๋ฃ ๋ฉ์๋ ์ง์
@Bean(initMethod = "init", destroyMethod = "close")์ด๊ธฐํ/์๋ฉธ ๋ฉ์๋ ์ง์
๋ฉ์๋ ์ด๋ฆ ์์ ๋กญ๊ฒ ์ค์ ๊ฐ๋ฅ
์คํ๋ง ๋น์ด ์คํ๋ง ์ฝ๋์ ์์กดํ์ง ์์
์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ด๊ธฐํ, ์ข ๋ฃ ๋ฉ์๋ ์ ์ฉ ๊ฐ๋ฅ
์ข ๋ฃ ๋ฉ์๋ ์ถ๋ก ๊ธฐ๋ฅ
@Bean์destroyMethod์์ฑ์๋ ์๋ฌด๊ฒ๋ ์ง์ ํ์ง ์์ผ๋ฉด ์ถ๋ก ๊ธฐ๋ฅ์ด ๋์close,shutdown๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ์ข ๋ฃ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ํธ์ถ์ถ๋ก ๊ธฐ๋ฅ์ ๋ง๊ธฐ ์ํด์
destroyMethod=""๋ก ์ง์ ํ ์ ์์
์ค์ฝํ
๋น์ด ์กด์ฌํ ์ ์๋ ๋ฒ์๋ฅผ ๋ปํ๋ฉฐ, ์คํ๋ง ๋น์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ์ค์ฝํ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋ณดํต ์คํ๋ง ์ปจํ ์ด๋์ ์์๊ณผ ์ข ๋ฃ ์์ ๊ณผ ๊ฐ์ผ๋ฉฐ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ค์ฝํ๋ฅผ ์ง์ํ๋ค.
์ฑ๊ธํค(Default): ์คํ๋ง ์ปจํ ์ด๋์ ์์๊ณผ ์ข ๋ฃ ์์ ์ ์์ฑ๋๊ณ ์๋ฉธํ๋ ๊ฐ์ฅ ๋์ ๋ฒ์์ ์ค์ฝํ, ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ค์ฝํ
ํ๋กํ ํ์ : ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๋น์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ ์ฃผ์ ๊น์ง๋ง ๊ด์ฌํ๊ณ ๋๋ ๊ด๋ฆฌํ์ง ์๋ ์ค์ฝํ
์น ๊ด๋ จ ์ค์ฝํ
request: ์น ์์ฒญ ํ๋๊ฐ ๋ค์ด์ค๊ณ ๋๊ฐ ๋ ๊น์ง ์ ์ง๋๋ ์ค์ฝํ
session: ์น Session๊ณผ ๋์ผํ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์ค์ฝํ
application: ์๋ธ๋ฆฟ ์ปจํ ์คํธ์ ๋์ผํ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์ค์ฝํ
ํ๋กํ ํ์
์ค์ฝํ
์ฑ๊ธํค ์ค์ฝํ๋ ์คํ๋ง ์ปจํ ์ด๋์์ ํญ์ ๊ฐ์ ์ธ์คํด์ค์ ์คํ๋ง ๋น์ ๋ฐํํ์ง๋ง, ์ค์ฝํ์ ๋น์ ์คํ๋ง ์ปจํ ์ด๋์ ์์ฒญํ ๋๋ง๋ค ์๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ค.
์ฑ๊ธํค ๋น / ํ๋กํ ํ์ ๋น ๋น๊ต
์ฑ๊ธํค ์ค์ฝํ ๋น์ ์คํ๋ง ์ปจํ ์ด๋์ ์์ฒญ
ํ๋กํ ํ์ ์ค์ฝํ ๋น์ ์คํ๋ง ์ปจํ ์ด๋์ ์์ฒญ
(์์ฒญ ํ ๋น์ด ์ด๋ฏธ ์์ฑ๋์ด ์๋ ์ํ)
์์ฒญ ์จ ์์ ์ ํ๋กํ ํ์ ๋น์ ์์ฑํ๊ณ ์์กด ๊ด๊ณ ์ฃผ์
์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๊ณ ์๋ ๋น ๋ฐํ
์์ฑํ ๋น์ ๋ฐํ
๊ฐ์ ์์ฒญ์ด ์๋ ๊ณ์ ๊ฐ์ ์ธ์คํด์ค์ ์คํ๋ง ๋น ๋ฐํ
๊ฐ์ ์์ฒญ์ด ์ค๋ฉด ๊ณ์ ์๋ก์ด ์ธ์คํด์ค์ ์คํ๋ง ๋น ๋ฐํ
ํ๋กํ ํ์ ๋น์ ํน์ง์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์คํ๋ง ์ปจํ ์ด๋์ ์์ฒญํ ๋ ๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑ
์คํ๋ง ์ปจํ ์ด๋๋ ํ๋กํ ํ์ ์ค์ฝํ ๋น์
์์ฑ/์์กด๊ด๊ณ ์ฃผ์ /์ด๊ธฐํ๊น์ง๋ง ์ฒ๋ฆฌ์์ฑ ๋ฐ ์ด๊ธฐํ๊น์ง๋ง ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์
@PreDestroy๊ฐ์ ์ข ๋ฃ ๋ฉ์๋๋ ํธ์ถํ์ง ์์ํ๋กํ ํ์ ๋น์ ํ๋กํ ํ์ ๋น์ ์กฐํํ ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌ
์ฌ๋ฌ ๋น์์ ๊ฐ์ ํ๋กํ ํ์ ๋น์ ์ฃผ์ ๋ฐ์ผ๋ฉด, ์ฃผ์ ๋ฐ์ ๋ชจ๋ ๋น์ ๊ฐ์ ๋ค๋ฅธ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉ(ํ๋์ ๋น์์ ๊ณ์ ๊ฐ์ ํ๋กํ ํ์ ๋น์ ๊ฐ์ง)
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?