์คํ๋ง ๋น์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ
๋น์ด ์์ฑ๋๊ฑฐ๋ ์๋ฉธ๋๋ ๊ฒฝ์ฐ ํน์ ํ ์์ ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
ํ๋์ ์์๋ก๋ ๋น์ด ์์ฑ๋ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ํ์ ๋ฏธ๋ฆฌ ์์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ์์ ์ ์ํด ์คํ๋ง ๋น์ ์ด๊ธฐํ ์์ ๊ณผ ์ข ๋ฃ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์คํ๋ง ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ
๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ์ ์คํ๋ง ๋น์ด ์์ฑ๋ ํ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋ฃ๋๊ฑฐ๋ ์ฃฝ๊ธฐ ์ง์ ์ ์คํ๋ง ๋น ์์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์คํ๋ง ๋น์ ์ด๋ฒคํธ์ฌ์ดํด
์คํ๋ง ์ปจํ ์ด๋ ์์ฑ $\to$ ๋น ์์ฑ $\to$ ์์กด๊ด๊ณ ์ฃผ์ $\to$ ์ด๊ธฐํ ์ฝ๋ฐฑ $\to$ ์ฌ์ฉ $\to$ ์๋ฉธ์ ์ฝ๋ฐฑ $\to$ ์คํ๋ง ์ข ๋ฃ
์ด๊ธฐํ ์ฝ๋ฐฑ : ๋น์ด ์์ฑ๋๊ณ ๋น์ ์์กด๊ด๊ณ ์ฃผ์
์ด ์๋ฃ๋ ํ ํธ์ถ๋ฉ๋๋ค.
์๋ฉธ์ ์ฝ๋ฐฑ : ๋น์ด ์๋ฉธ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค.
์คํ๋ง ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ ์ฌ์ฉ๋ฐฉ๋ฒ
๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์ธํฐํ์ด์ค(InitializingBean, DisposableBean) ์ฌ์ฉ
- ์ค์ ์ ๋ณด ์ด๊ธฐํ ๋ฉ์๋, ์ข ๋ฃ ๋ฉ์๋ ์ง์
- @PostConstruct, @PreDestroy ์ฌ์ฉ
๊ฐ์ฅ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ @PostConstruct์ @PreDestroy๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฉฐ, ํด๋น ๋ฐฉ๋ฒ์ ๋จผ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
@PostConstruct, @PreDestroy
๋ฉ์๋ ์์ ํด๋น ์ด๋ ธํ ์ด์ ๋ง ๋ถ์ด๋ฉด ์๋์ผ๋ก ํธ์ถ๋๊ธฐ์ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
...
@PostConstruct
public void init() {
System.out.println("์ด๊ธฐํ ๋ฉ์๋ ํธ์ถ")
}
...
@PreDestroy
public void destroy() {
System.out.println("์ข
๋ฃ ๋ฉ์๋ ํธ์ถ")
}
ํด๋น ์ด๋ ธํ ์ด์ ์ ํจํค์ง๋ javax.annotation ์ ๋๋ค.
์ฆ ์คํ๋ง์ ์ข ์์ ์ธ ๊ธฐ์ ์ด ์๋๋ผ JSR-250 ๋ผ๋ ์๋ฐ ํ์ค ๊ธฐ์ ์ธ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์คํ๋ง์ด ์๋ ๋ค๋ฅธ ์ปจํ ์ด๋์์๋ ๋์ํฉ๋๋ค.
๋ํ ํด๋น ๋ฐฉ๋ฒ์ ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์ ์ด์ธ๋ฆฝ๋๋ค.
์ ์ผํ ๋จ์ ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ ์ฉํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ๋๋ค.
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๊ธฐํ, ์ข ๋ฃ ํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ @Bean ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
InitializingBean, DisposableBean
InitializingBean, DisposableBean์ ์ธํฐํ์ด์ค์ด๋ฉฐ afterPropertiesSet(), destroy()๋ฅผ ์ง์ํฉ๋๋ค.
- afterPropertiesSet(): ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋๋ ํ ํธ์ถ
- destroy(): ๋น์ด ์ฃฝ๊ธฐ ์ง์ ์ ํธ์ถ
๋จ์ :
- ์ด ์ธํฐํ์ด์ค๋ ์คํ๋ง ์ ์ฉ ์ธํฐํ์ด์ค์ ๋๋ค. ์ฆ ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์คํ๋ง ์ ์ฉ ์ธํฐํ์ด์ค์ ์์กดํฉ๋๋ค.
- ์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋์ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ๋ด๊ฐ ์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉํ ์ ์์ต๋๋ค.
@Bean ์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋ ์ง์
@Bean( initMethod = "init",destroyMethod= "close" ) ์ฒ๋ผ ์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
๋ฉ์๋ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ค ์ ์๊ณ , ์คํ๋ง ๋น์ด ์คํ๋ง ์ฝ๋์ ์์กด์ ์ด์ง ์์ต๋๋ค.
๋ํ ์ฝ๋๊ฐ ์๋๋ผ ์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ด๊ธฐํ, ์ข ๋ฃ ๋ฉ์๋๋ฅผ ์ ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ถ๋ก ๊ธฐ๋ฅ
@Bean์ destroyMethod ์์ฑ์๋ ํน๋ณํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋๋ถ๋ถ close, shutdown ์ด๋ผ๋ ์ด๋ฆ์ ์ข ๋ฃ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
@Bean์ destroyMethod๋ ๊ธฐ๋ณธ๊ฐ์ด (inferred)(์ถ๋ก )์ผ๋ก ๋ฑ๋ก๋์ด ์์ต๋๋ค.
์ด ์ถ๋ก ๊ธฐ๋ฅ์ close, shutdown ์ด๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ํธ์ถํด์ค๋๋ค.
์ถ๋ก ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ซ์ผ๋ฉด destroyMethod ="" ์ฒ๋ผ ๋น ๊ณต๋ฐฑ์ ์ง์ ํ๋ฉด ๋ฉ๋๋ค.
๐ Reference