์Šคํ”„๋ง์˜ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ์ง€์›

2025. 3. 24. 23:46ยท๐Ÿ“ Spring/Lecture

์ธํ”„๋Ÿฐ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ๋ณธํŽธ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

 

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

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ → ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ(์ƒ์„ฑ์ž ์ฃผ์ž…) → ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(์ˆ˜์ •์ž ์ฃผ์ž…, ํ•„๋“œ ์ฃผ์ž…) → ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ → ์‚ฌ์šฉ → ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ → ์Šคํ”„๋ง ์ข…๋ฃŒ

 

 

์Šคํ”„๋ง์˜ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ์ง€์›

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

์Šคํ”„๋ง ์ดˆ์ฐฝ๊ธฐ์— ๋‚˜์˜จ ๋ฐฉ๋ฒ•, ํ˜„์žฌ๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•๋“ค ์กด์žฌ

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

//์ธํ„ฐํŽ˜์ด์Šค(InitializingBean, DisposableBean)
public class NetworkClient implements InitializingBean, DisposableBean {
  ...

  //์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ๋๋‚˜๋ฉด ํ˜ธ์ถœํ• ๊ฒŒ!
  @Override
  public void afterPropertiesSet() throws Exception {
    connect(); //์„œ๋น„์Šค ์‹œ์ž‘ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
    call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€"); //public void call(String message){}
  }

  //์Šคํ”„๋ง ๋นˆ์ด ์ข…๋ฃŒ๋  ๋•Œ ํ˜ธ์ถœํ• ๊ฒŒ!
  @Override
  public void destroy() throws Exception {
    disconnect(); //์„œ๋น„์Šค ์ข…๋ฃŒ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
  }
}
public class BeanLifCycleTest {
  @Test
  public void lifeCycleTest() {
    ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
    NetworkClient client = ac.getBean(NetworkClient.class);
    ac.close();
  }

  @Configuration
  static class LifeCycleConfig {
    @Bean
    public NetworkClient networkClient() {
      NetworkClient networkClient = new NetworkClient();
      networkClient.setUrl("http://aaaa.dev");
      return networkClient;
    }
  }
}

๋‹จ์ 

์Šคํ”„๋ง ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค → ์Šคํ”„๋ง ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กด

์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ์šฉ ๋ถˆ๊ฐ€

 

 

 

์„ค์ • ์ •๋ณด์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ง€์ •

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ

//์„ค์ • ์ •๋ณด์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ง€์ •
public class NetworkClient {
  ...

  public void init() {
    connect(); //์„œ๋น„์Šค ์‹œ์ž‘ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
    call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€"); //public void call(String message){}
  }

  public void close() {
    disconnect(); //์„œ๋น„์Šค ์ข…๋ฃŒ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
  }
}
public class BeanLifCycleTest {
  @Test
  public void lifeCycleTest() {
    ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
    NetworkClient client = ac.getBean(NetworkClient.class);
    ac.close();
  }

  @Configuration
  static class LifeCycleConfig {
    //initMethod, destroyMethod ์ง€์ •
    @Bean(initMethod = "init", , destroyMethod = "close")
    public NetworkClient networkClient() {
      NetworkClient networkClient = new NetworkClient();
      networkClient.setUrl("http://hello-spring.dv");
      return networkClient;
    }
  }
}

ํŠน์ง•

๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑ

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

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋„ ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ ์šฉ ๊ฐ€๋Šฅ

 

์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ถ”๋ก  (@Bean์˜ destroyMethod ์†์„ฑ)

๋Œ€๋ถ€๋ถ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ : 'close', 'shutdown' 

@Bean์˜ destroyMethod๋Š” ๊ธฐ๋ณธ๊ฐ’์ด (inferred) ์ถ”๋ก ์œผ๋กœ ๋“ฑ๋ก → 'close', 'shutdown' ๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ (์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๋ก ํ•ด์„œ ํ˜ธ์ถœ)

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

์ถ”๋ก  ๊ธฐ๋Šฅ OFF : destroyMethod="" (๊ณต๋ฐฑ์œผ๋กœ ์ง€์ •)

 

 

 

@PostConstruct, @PreDestory ์• ๋…ธํ…Œ์ด์…˜ ์ง€์›

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

import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;

//์„ค์ • ์ •๋ณด์— ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ ์ง€์ •
public class NetworkClient {
  ...

  @PostConstruct
  public void init() {
    connect(); //์„œ๋น„์Šค ์‹œ์ž‘ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
    call("์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€"); //public void call(String message){}
  }
  
  @PreDestroy
  public void close() {
    disconnect(); //์„œ๋น„์Šค ์ข…๋ฃŒ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
  }
}
public class BeanLifCycleTest {
  @Test
  public void lifeCycleTest() {
    ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
    NetworkClient client = ac.getBean(NetworkClient.class);
    ac.close();
  }

  @Configuration
  static class LifeCycleConfig {
    @Bean
    public NetworkClient networkClient() {
      NetworkClient networkClient = new NetworkClient();
      networkClient.setUrl("http://aaaa.dev");
      return networkClient;
    }
  }
}

ํŠน์ง•

ํŒจํ‚ค์ง€ jakarta.annotation.PostConstruct : ์Šคํ”„๋ง์— ์ข…์†์ ์ธ ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ผ ์ž๋ฐ” ํ‘œ์ค€ → ์Šคํ”„๋ง์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ๋™์ž‘

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

์œ ์ผํ•œ ๋‹จ์  ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ์šฉ ๋ถˆ๊ฐ€ → @Bean์˜ ๊ธฐ๋Šฅ initMethod, destroyMethod์„ ์‚ฌ์šฉํ•˜์ž

๋ฐ˜์‘ํ˜•

'๐Ÿ“ Spring > Lecture' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

@ModelAttribute์™€ Model  (0) 2025.04.04
๋นˆ ์Šค์ฝ”ํ”„  (0) 2025.03.25
Annotation ์ง์ ‘ ์ƒ์„ฑ  (0) 2025.03.24
์กฐํšŒ ๋นˆ์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ  (0) 2025.03.24
์˜์กด๊ด€๊ณ„ ์ฃผ์ž…  (0) 2025.03.24
'๐Ÿ“ Spring/Lecture' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • @ModelAttribute์™€ Model
  • ๋นˆ ์Šค์ฝ”ํ”„
  • Annotation ์ง์ ‘ ์ƒ์„ฑ
  • ์กฐํšŒ ๋นˆ์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ
leee
leee
  • leee
    LEE
    leee
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์นดํ…Œ๊ณ ๋ฆฌ
      • ๐Ÿ“ QA
        • Test
        • Lecture
      • ๐Ÿ“ SQL
        • ๐Ÿ“
      • ๐Ÿ“ Spring
        • Lecture
        • Error
      • ๐Ÿ“ Github
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿ 
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    API test
    api ํ…Œ์ŠคํŠธ
    SQL_Join
    API ์ž๋™ํ™” ํ…Œ์ŠคํŠธ
    mysql_๊ธฐ๊ฐ„_๊ฒ€์ƒ‰
    shift_์—ฐ์‚ฐ์ž
    AppConfig
    ์ƒ์„ฑ์ž์ฃผ์ž…
    ์Šคํ”„๋ง ๊ฐ์ฒด์ง€ํ–ฅ
    mismatch
    Postman
    ํฌ์ŠคํŠธ๋งจ
    DI ์ปจํ…Œ์ด๋„ˆ
    mysql_์—ฐ์‚ฐ์ž
    MySQL
    mysql_๋ฐ์ดํ„ฐํƒ€์ž…๋ณ€ํ™˜
    COUNT(*)
    ๊นƒํ—ˆ๋ธŒ ์ธํ…”๋ฆฌ์ œ์ด ์—ฐ๋™ ํ•ด์ œ
    API Testing
    mysql_join
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
leee
์Šคํ”„๋ง์˜ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ ์ง€์›
์ƒ๋‹จ์œผ๋กœ

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