[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 23. ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ

2023. 2. 8. 13:32ยทSpring/Spring ๊ธฐ๋ณธ

 

๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€์ด๋‚˜, ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์ฒ˜๋Ÿผ

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— ํ•„์š”ํ•œ ์—ฐ๊ฒฐ์„ ๋ฏธ๋ฆฌ ํ•ด๋‘๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ์ ์— ์—ฐ๊ฒฐ์„ ๋ชจ๋‘ ์ข…๋ฃŒํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด,

 

๊ฐ์ฒด์˜ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.


์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ์Šคํ”„๋ง์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—…๊ณผ ์ข…๋ฃŒ ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๋Š”์ง€ ์˜ˆ์ œ๋กœ ์•Œ์•„๋ณด์ž.

 

 

์ฐธ๊ณ  : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€ 

๋”๋ณด๊ธฐ

 

WAS(Web Application Server)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์—๋Š” ๋งŽ์€ ๋น„์šฉ์ด ๋“ ๋‹ค

 

์„œ๋ฒ„๊ฐ€ DB์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Connecting ๋น„์šฉ์ด ๊ฐ€์žฅ ํฐ ๋น„์œจ์„ ์ฐจ์ง€ํ•œ๋‹ค.

 

์ด์ฒ˜๋Ÿผ Connection์„ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์ด๋‹ค.

 

์ด๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ Connection Pool์ด๋‹ค.

 

์ปค๋„ฅ์…˜ ํ’€(Connection Pool)์ด๋ž€?

 

์ปค๋„ฅ์…˜ ํ’€์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ์ปค๋„ฅ์…˜์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๊ณ  ์ด๋ฅผ pool๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฆ‰, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ปค๋„ฅ์…˜ ํ’€์˜ ์ปค๋„ฅ์…˜์„ ์ด์šฉํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

์ด์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ์ปค๋„ฅ์…˜์„ ์ด์šฉํ•˜๋ฉด Connection์— ํ•„์š”ํ•œ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ DB์— ๋น ๋ฅด๊ฒŒ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์˜ˆ์ œ ์ฝ”๋“œ ์ž‘์„ฑ

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ๋ฏธ๋ฆฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

์‹ค์ œ๋กœ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๋‹จ์ˆœํžˆ ๋ฌธ์ž๋งŒ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

์ด NetworkClient ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— connect() ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์—ฐ๊ฒฐ์„ ๋งบ์–ด๋‘์–ด์•ผ ํ•˜๊ณ ,

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด disConnect() ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์—ฐ๊ฒฐ์„ ๋Š์–ด์•ผ ํ•œ๋‹ค.

 

 

 

@Configuration
static class LifeCycleConfig {

    @Bean
    public NetworkClient networkClient() {
        NetworkClient networkClient = new NetworkClient();
        networkClient.setUrl("http://hello-spring.dev");

 

new NetworkClient() : ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ  --> ์ƒ์„ฑ์ž ํ˜ธ์ถœ ( url ์—†์Œ ) 

 

setUrl :  url ์ˆ˜์ •์ž ์ฃผ์ž…

 

 

 

public NetworkClient() {
    System.out.println("์ƒ์„ฑ์ž ํ˜ธ์ถœ , url = " + url);
    connect();
    call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
}

 

์ƒ์„ฑ์ž

 

๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ(new) ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ

 

 

 

 

 

์ƒ์„ฑ์ž ๋ถ€๋ถ„์„ ๋ณด๋ฉด url ์ •๋ณด ์—†์ด connect๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๋„ˆ๋ฌด ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ์ด์ง€๋งŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„์—๋Š” url์ด ์—†๊ณ ,

 

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ์— ์™ธ๋ถ€์—์„œ ์ˆ˜์ •์ž ์ฃผ์ž…์„ ํ†ตํ•ด์„œ setUrl() ์ด ํ˜ธ์ถœ๋˜์–ด์•ผ url์ด ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 

์Šคํ”„๋ง ๋นˆ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ฐ€์ง„๋‹ค.

 

๊ฐ์ฒด ์ƒ์„ฑ -> ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…

 

์Šคํ”„๋ง ๋นˆ์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋‹ค ๋๋‚œ ๋‹ค์Œ์—์•ผ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ดˆ๊ธฐํ™” ์ž‘์—…์€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜๊ณ  ๋‚œ ๋‹ค์Œ์— ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋ชจ๋‘ ์™„๋ฃŒ๋œ ์‹œ์ ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ?

 

 

 

์Šคํ”„๋ง ๋นˆ์˜ ์ด๋ฒคํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด

 

์Šคํ”„๋ง์€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋˜๋ฉด ์Šคํ”„๋ง ๋นˆ์—๊ฒŒ ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ดˆ๊ธฐํ™” ์‹œ์ ์„ ์•Œ๋ ค์ฃผ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

๋˜ํ•œ ์Šคํ”„๋ง์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ์†Œ๋ฉธ ์ฝœ๋ฐฑ์„ ์ค€๋‹ค. ๋”ฐ๋ผ์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

    ์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ์ƒ์„ฑ -> ์Šคํ”„๋ง๋นˆ์ƒ์„ฑ -> ์˜์กด๊ด€๊ณ„์ฃผ์ž… -> ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ -> ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ  -> ์Šคํ”„๋ง ์ข…๋ฃŒ

 

 

์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ: ๋นˆ์ด ์ƒ์„ฑ๋˜๊ณ , ๋นˆ์˜ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ

 

์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ: ๋นˆ์ด ์†Œ๋ฉธ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ

 

 

 

์ฐธ๊ณ : ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๋ถ„๋ฆฌํ•˜์ž.

๋”๋ณด๊ธฐ

 

์ƒ์„ฑ์ž๋Š” ํ•„์ˆ˜ ์ •๋ณด(ํŒŒ๋ผ๋ฏธํ„ฐ)๋ฅผ ๋ฐ›๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฑ…์ž„์„ ๊ฐ€์ง„๋‹ค. 

 

๋ฐ˜๋ฉด์— ์ดˆ๊ธฐํ™”๋Š” ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ’๋“ค์„ ํ™œ์šฉํ•ด์„œ ์™ธ๋ถ€ ์ปค๋„ฅ์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š”๋“ฑ ๋ฌด๊ฑฐ์šด ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

 

๋”ฐ๋ผ์„œ ์ƒ์„ฑ์ž ์•ˆ์—์„œ ๋ฌด๊ฑฐ์šด ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ํ•จ๊ป˜ ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š”

 

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜ ๊ด€์ ์—์„œ ์ข‹๋‹ค. 

 

๋ฌผ๋ก  ์ดˆ๊ธฐํ™” ์ž‘์—…์ด ๋‚ด๋ถ€ ๊ฐ’๋“ค๋งŒ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜๋Š” ์ •๋„๋กœ ๋‹จ์ˆœํ•œ ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ์ž์—์„œ ํ•œ๋ฒˆ์— ๋‹ค ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

์‹ฑ๊ธ€ํ†ค ๋นˆ๋“ค์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์‹ฑ๊ธ€ํ†ค ๋นˆ๋“ค๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์—

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ์ด ์ผ์–ด๋‚œ๋‹ค. 

 

๋’ค์—์„œ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ ์‹ฑ๊ธ€ํ†ค ์ฒ˜๋Ÿผ ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๊นŒ์ง€ ์ƒ์กดํ•˜๋Š” ๋นˆ๋„ ์žˆ์ง€๋งŒ, 

 

์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์งง์€ ๋นˆ๋“ค๋„ ์žˆ๋Š”๋ฐ ์ด ๋นˆ๋“ค์€ ์ปจํ…Œ์ด๋„ˆ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ด๋‹น ๋นˆ์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ์ด ์ผ์–ด๋‚œ๋‹ค. 

 

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์Šค์ฝ”ํ”„์—์„œ ์•Œ์•„๋ณด๊ฒ ๋‹ค. 

 

 

 

 

 

์Šคํ”„๋ง์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ์„ ์ง€์›ํ•œ๋‹ค.

 

  • ์ธํ„ฐํŽ˜์ด์Šค(InitializingBean, DisposableBean)
  • ์„ค์ • ์ •๋ณด์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ง€์ •
  • @PostConstruct, @PreDestroy ์• ๋…ธํ…Œ์ด์…˜ ์ง€์›

 

 

 

์ธํ„ฐํŽ˜์ด์Šค InitializingBean, DisposableBean

 

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class NetworkClient implements InitializingBean, DisposableBean {

 

InitializingBean,DisposableBean ์ธํ„ฐํŽ˜์ด์Šค 

 

 

@Override
// ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋๋‚˜๋ฉด ํ˜ธ์ถœ
public void afterPropertiesSet() throws Exception {
    System.out.println("NetworkClient.afterPropertiesSet");
    connect();
    call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
}

 

InitializingBean ์€ afterPropertiesSet() ๋ฉ”์„œ๋“œ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค.

 

 

@Override
// ๋นˆ์ด ์ข…๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœ
public void destroy() throws Exception {
    System.out.println("NetworkClient.destroy");
    disconnect();
}

 

DisposableBean ์€ destroy() ๋ฉ”์„œ๋“œ๋กœ ์†Œ๋ฉธ์„ ์ง€์›ํ•œ๋‹ค.

 

 

 

 

 

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๊ฐ€ ์ฃผ์ž… ์™„๋ฃŒ ํ›„์— ์ ์ ˆํ•˜๊ฒŒ ํ˜ธ์ถœ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ข…๋ฃŒ๊ฐ€ ํ˜ธ์ถœ๋˜์ž ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋œ ๊ฒƒ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ์ธํ„ฐํŽ˜์ด์Šค ๋‹จ์ 


์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์Šคํ”„๋ง ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.

 

ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์Šคํ”„๋ง ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•œ๋‹ค. ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.


๋‚ด๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

 ์ง€๊ธˆ์€ ๋‹ค์Œ์˜ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์–ด์„œ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

 

๋นˆ ๋“ฑ๋ก ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ ์ง€์ •

 

 

// ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋๋‚˜๋ฉด ํ˜ธ์ถœ
public void init() {
    System.out.println("NetworkClient.init");
    connect();
    call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
}

 

์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ init

 

 

 

// ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœ
public void close() {
    System.out.println("NetworkClient.close");
    disconnect();
}

 

์†Œ๋ฉธ ๋ฉ”์„œ๋“œ close 

 

 

 

 

@Bean(initMethod = "init", destroyMethod = "close")

 

์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์‹คํ–‰ ๊ฒฐ๊ณผ

 

 

์„ค์ • ์ •๋ณด ์‚ฌ์šฉ ํŠน์ง•

 

๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ž์œ ๋กญ๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋‹ค.


์Šคํ”„๋ง ๋นˆ์ด ์Šคํ”„๋ง ์ฝ”๋“œ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.


์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์„ค์ • ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋„ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ถ”๋ก 

๋”๋ณด๊ธฐ

 

@Bean์˜ destroyMethod ์†์„ฑ์—๋Š” ์•„์ฃผ ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.


๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„ close , shutdown ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


@Bean
์˜ destroyMethod ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด (inferred) (์ถ”๋ก )์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค.


์ด ์ถ”๋ก  ๊ธฐ๋Šฅ์€ close , shutdown ๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•ด์ค€๋‹ค. ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๋ก ํ•ด์„œ ํ˜ธ์ถœํ•ด์ค€๋‹ค.


๋”ฐ๋ผ์„œ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋Š” ๋”ฐ๋กœ ์ ์–ด์ฃผ์ง€ ์•Š์•„๋„ ์ž˜ ๋™์ž‘ํ•œ๋‹ค.


์ถ”๋ก  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹ซ์œผ๋ฉด destroyMethod="" ์ฒ˜๋Ÿผ ๋นˆ ๊ณต๋ฐฑ์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 

 

์• ๋…ธํ…Œ์ด์…˜ @PostConstruct, @PreDestroy

 

@PostConstruct , @PreDestroy ์ด ๋‘ ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€์žฅ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ดˆ๊ธฐํ™”์™€ ์ข…๋ฃŒ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

@PostConstruct
 public void init() {
     System.out.println("NetworkClient.init");
     connect();
     call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€");
 }

 

@PostConstruct 

 

 

 

@PreDestroy
public void close() {
    System.out.println("NetworkClient.close");
    disconnect();
}

 

@PreDestroy 

 

 

 

 

์‹คํ–‰ ๊ฒฐ๊ณผ

 

 

 

 

@PostConstruct, @PreDestroy ์• ๋…ธํ…Œ์ด์…˜ ํŠน์ง•


์ตœ์‹  ์Šคํ”„๋ง์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


์• ๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋งŒ ๋ถ™์ด๋ฉด ๋˜๋ฏ€๋กœ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค.


ํŒจํ‚ค์ง€๋ฅผ ์ž˜ ๋ณด๋ฉด javax.annotation.PostConstruct ์ด๋‹ค.

 

์Šคํ”„๋ง์— ์ข…์†์ ์ธ ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ผ JSR-250 ๋ผ๋Š” ์ž๋ฐ” ํ‘œ์ค€์ด๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํ”„๋ง์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ๋™์ž‘ํ•œ๋‹ค.

 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.


์œ ์ผํ•œ ๋‹จ์ ์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์ ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒ ํ•ด์•ผ ํ•˜๋ฉด @Bean์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ž.

 

 

 

 

์ •๋ฆฌ


@PostConstruct, @PreDestroy ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ž

 

์ฝ”๋“œ๋ฅผ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋ฉด @Bean ์˜ initMethod , destroyMethod ๋ฅผ ์‚ฌ์šฉํ•˜์ž.

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 25. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ / Provider  (0) 2023.02.09
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 24. ๋นˆ ์Šค์ฝ”ํ”„  (0) 2023.02.09
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 22. ์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ / List, Map  (0) 2023.02.07
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 21. @Autowired ํ•„๋“œ ๋ช… / @Qualifier, @Primary  (0) 2023.02.07
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 20. ์ƒ์„ฑ์ž ์ฃผ์ž… / final ํ‚ค์›Œ๋“œ / ๋กฌ๋ณต(Lombok)  (0) 2023.02.07
'Spring/Spring ๊ธฐ๋ณธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 25. ํ”„๋กœํ† ํƒ€์ž… ์Šค์ฝ”ํ”„ / Provider
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 24. ๋นˆ ์Šค์ฝ”ํ”„
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 22. ์กฐํšŒํ•œ ๋นˆ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ / List, Map
  • [์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 21. @Autowired ํ•„๋“œ ๋ช… / @Qualifier, @Primary
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 23. ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”