๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ปค๋ฅ์ ํ์ด๋, ๋คํธ์ํฌ ์์บฃ์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ ํ์ํ ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ํด๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์์ ์ ์ฐ๊ฒฐ์ ๋ชจ๋ ์ข ๋ฃํ๋ ์์ ์ ํ๋ ค๋ฉด ๊ฐ์ฒด์ ์ด๊ธฐํ์ ์ข ๋ฃ ์์ ์ด ํ์ํ๋ค.
[ ์คํ๋ง ๋น์ ์ด๋ฒคํธ ๋ผ์ดํ์ฌ์ดํด (์ฑ๊ธํค์ผ ๋) ]
- ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ
- ์คํ๋ง ๋น ์์ฑ
- ์์กด๊ด๊ณ ์ฃผ์
- ์ด๊ธฐํ ์ฝ๋ฐฑ (๋น์ด ์์ฑ๋๊ณ , ๋น์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋ฃ๋ ํ ํธ์ถ)
- ์ฌ์ฉ
- ์๋ฉธ์ ์ฝ๋ฐฑ (๋น์ด ์๋ฉธ๋๊ธฐ ์ง์ ์ ํธ์ถ)
- ์คํ๋ง ์ข ๋ฃ
โ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ด๊ธฐํ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
์์ฑ์๋ ํ์ ์ ๋ณด๋ ๋ฐ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๋ฐ๋ฉด์ ์ด๊ธฐํ๋ ์์ฑ๋ ๊ฐ์ ํ์ฉํด์ ์ธ๋ถ ์ปค๋ฅ์ ์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค.
์์ฑ์ ์์์ ๋ฌด๊ฑฐ์ด ์์ ์ ํ๋ ๊ฒ์ ์ ์ง๋ณด์๋ฉด์์ ์ข์ง ์๋ค.
์คํ๋ง์ 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ์ ์ง์ํ๋ค.
- ์ธํฐํ์ด์ค (InitializingBean, DisposableBean)
- ์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข ๋ฃ ๋ฉ์๋ ์ง์
- @PostConstruct, @PreConstruct
[ ์ธํฐํ์ด์ค (InitializingBean, DisposableBean) ]
public class NetworkClient implements InitializingBean, DisposableBean {
private String url;
public NetworkClient(){
System.out.println("์์ฑ์ ํธ์ถ, url = " + url);
connect();
call("์ด๊ธฐํ ์ฐ๊ฒฐ ๋ฉ์ธ์ง");
}
public void setUrl(String url) {
this.url = url;
}
//์๋น์ค ์์์ ํธ์ถ
public void connect(){
System.out.println("connect: " + url);
}
public void call(String message){
System.out.println("call: " + url + " message = " + message);
}
//์๋น์ค ์ข
๋ฃ์ ํธ์ถ
public void disconnect(){
System.out.println("close: " + url);
}
@Override
public void afterPropertiesSet() throws Exception{
System.out.println("NetworkClient.afterPropertiesSet");
connect();
call("์ด๊ธฐํ ์ฐ๊ฒฐ ๋ฉ์ธ์ง");
} //์์กด๊ด๊ณ ์ฃผ์
์ด ๋๋๋ฉด ํธ์ถํด์ฃผ๊ฒ ๋ค๋ ๋ป
@Override
public void destory() throws Exception{
System.out.println("NetworkClient.destory");
disconnect();
} //bean์ด ์ข
๋ฃ๋ ๋ ํธ์ถ
}
InitializingBean, DisposableBean ์ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ฉ์๋๋ฅผ ์์ฑํจ์ผ๋ก์จ ๊ฐ๊ฐ ์ด๊ธฐํ์ ์๋ฉธ์ ์ง์ํ๋ค.
๐๋จ์
- ์คํ๋ง ์ ์ฉ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์คํ๋ง์ ์์กดํ๋ค.
- ์ด๊ธฐํ, ์๋ฉธ์ ๋ฉ์๋ ์ด๋ฆ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉํ ์ ์๋ค.
์ง๊ธ์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ด๋ค.
[ ์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข ๋ฃ ๋ฉ์๋ ์ง์ ]
public void init(){
System.out.println("NetworkClient.init");
connect();
call("์ด๊ธฐํ ์ฐ๊ฒฐ ๋ฉ์ธ์ง");
} //์์กด๊ด๊ณ ์ฃผ์
์ด ๋๋๋ฉด ํธ์ถํด์ฃผ๊ฒ ๋ค๋ ๋ป
public void close() {
System.out.println("NetworkClient.close");
disconnect();
} //bean์ด ์ข
๋ฃ๋ ๋ ํธ์ถ
์ฝ๋๋ฅผ ์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๋ณ๊ฒฝํ๊ณ , ์ค์ ์ ๋ณด์ ์ด๊ธฐํ์ ์๋ฉธ ๋ฉ์๋๋ฅผ ์ง์ ํด์ค๋ค.
@Bean(initMethod = "init", destroyMethod = "close")
๐ ํน์ง
- ์์ ๋กญ๊ฒ ๋ฉ์๋ ์ด๋ฆ์ ์ง์ ํ ์ ์๋ค.
- InitializingBean, DisposableBean๊ณผ๋ ๋ค๋ฅด๊ฒ ์คํ๋ง์ฝ๋์ ์์กดํ์ง ์๋๋ค.
- ์ค์ ์ ๋ณด๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๊ณ ์น ์ ์๋ ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ ์ฉ๊ฐ๋ฅํ๋ค.
[ @PostConstruct, @PreConstruct ์ด๋ ธํ ์ด์ ์ฌ์ฉ ]
์ต๊ทผ์๋ ์ด ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
๊ทธ์ ์ด๊ธฐํ์ ์ข ๋ฃ ๋ฉ์๋์ ๊ฐ๊ฐ @PostConstruct, @PreDestroy์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
@PostConstruct
public void init(){
System.out.println("NetworkClient.init");
connect();
call("์ด๊ธฐํ ์ฐ๊ฒฐ ๋ฉ์ธ์ง");
} //์์กด๊ด๊ณ ์ฃผ์
์ด ๋๋๋ฉด ํธ์ถํด์ฃผ๊ฒ ๋ค๋ ๋ป
@PreDestroy
public void close() {
System.out.println("NetworkClient.close");
disconnect();
} //bean์ด ์ข
๋ฃ๋ ๋ ํธ์ถ
์ด๋ ๊ฒ๋ง ํ๋ฉด ๋!!
๋ฌผ๋ก ์ค์ ์ ๋ณด์๋ ๊ทธ๋ฅ @Bean์ด๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
๐ํน์ง
- ์ด๋ ธํ ์ด์ ๋ง ๋ถ์ด๋ฉด ๋๋ฏ๋ก ๋งค์ฐ ํธ๋ฆฌํ๋ค.
- ์คํ๋ง์ ์ข ์์ ์ธ ๊ธฐ์ ์ด ์๋๋ผ ์๋ฐ ํ์ค์ด๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ์ปจํ ์ด๋์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
- ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์ ์ด์ธ๋ฆฐ๋ค.
๐๋จ์
- ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉํ์ง ๋ชปํ๋ค.
๋ฐ๋ผ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๊ธฐํ, ์ข ๋ฃํ๋ ค๋ฉด @Bean์ initMethod, destroyMethod๋ฅผ ์ฌ์ฉํ๋ค.
์คํ๋ง์ด ๋์ํ๋ ๊ฒ, ์ด๊ธฐํํ๋ ๊ฒ, ์ข ๋ฃํ๋ ์์ ์ ๋์ผ๋ก ์ง์ ํ์ธํ๊ฒ ๋๋ ๋๋ฌด ์ ๊ธฐํ๋ค.
ํ์คํ ์์ ๋ฐฉ๋ฒ์ด ๋ ์ด๋ ต๊ณ ๋ณต์กํ ๊ฒ ๊ฐ๋ค. ์ฌ์ค ์ด ๋ฐฉ๋ฒ์ ์ด๋์ ์ด๋ป๊ฒ ์ ์ฉํ๋์ง๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ผ๋ฅธ ํ๋ก์ ํธ ๋ง๋ค๋ฉด์ ๋ ์ดํดํ๊ณ ์ถ๋ค.
์ด ๊ธ์ ์ธํ๋ฐ ๊น์ํ ๊ฐ์ฌ๋์ ์คํ๋ง ํต์ฌ์๋ฆฌ ๊ธฐ๋ณธํธ์ ๋ฃ๊ณ ์์ฑ๋ ๋ณต์ต ํฌ์คํ ์ ๋๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring boot - ๋ก๊น [ ์คํ๋ง ๋ก๊ทธ๋จ๊ธฐ๊ธฐ ] (0) | 2021.08.13 |
---|---|
Spring ์๋ธ๋ฆฟ [HttpServletRequest/HttpServletResponse] (0) | 2021.08.01 |
Spring ํต์ฌ์๋ฆฌ-๊ธฐ๋ณธ [@Autowired/@Qualifier/@Primary] (0) | 2021.07.16 |
Spring ํต์ฌ์๋ฆฌ-๊ธฐ๋ณธ [์ปดํฌ๋ํธ ์ค์บ] (0) | 2021.07.12 |
Spring ๊ธฐ๋ณธ [ ์ฑ๊ธํค/์คํ๋ง์ปจํ ์ด๋] (0) | 2021.07.11 |