Spring 핵심 원리 기본편 (10) - 빈(Bean)의 생명주기 콜백 (@PostConstruct, @PreDestroy)

김정욱·2021년 2월 23일
2
post-thumbnail

빈 생명주기 콜백

  • 객체의 초기화 작업
    • 빈(Bean)의 생성의존관계 주입이 완료되고 호출되는 작업
    • 애플리케이션 시작 시점에 필요한 연결을 미리 하는 작업은 반드시 빈 생성&의존관계 주입이 모두 완료된 후 시작되어야 함
    • 개발자가 이 시점을 알기 위해 필요한 것이 초기화 콜백 메서드
  • 객체의 종료 작업
    • 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하기 위한 과정
    • 개발자가 이 시점을 알기 위해 필요한 것이 종료 콜백 메서드

생명주기 콜백의 변화

초기화 작업 / 종료 작업을 하기 위한 스프링의 방법은 크게 3가지가 있으며, 시간에 따라 변화되었다.

  • 3가지 방법
    1) 인터페이스 상속(InitializingBean / DisposableBean)
    2) 빈(Bean) 등록 초기화, 소멸 메서드
    3) 어노테이션 @PostConstruct / @PreDestory

1. 인터페이스 상속(InitializingBean / DisposableBean)

  • 가장 과거에 사용되던 방법
  • 초기화 / 종료 작업을 하기 위해 2가지 인터페이스를 상속받은 뒤 사용
  • 단점
    • 스프링 전용 인터페이스에 의존
    • 초기화, 소멸 메서드의 이름 변경 불가능
    • 외부 라이브러리에 적용 불가능

2. 빈(Bean) 등록 초기화, 소멸 메서드

1. (빈 선언시 이름 지정)

  • @BeaninitMethoddestoryMethod로 이름 지정

2. (메서드 구현)

  • 지정한 이름에 따른 함수 선언 및 사용
  • 장점
    • 메서드 이름을 자유롭게 지정
    • 스프링 빈이 스프링 코드에 의존하지 않는다
    • 외부 라이브러리에도 초기화, 종료 메서드를 적용할 수 있다.
  • 특징
    • destoryMethod는 기본적으로 (inferred)-추론으로 등록되어 있다.
    • destoryMethod는 명시하지 않을 때 close / shutdown 이라는 이름의 종료 메서드를 기본적으로 추론하여 사용
      --> 대부분 라이브러리에서 close / shutdown사용함
    • 추론 기능을 사용하기 싫으면 destoryMethod=""으로 공백을 지정

3. @PostConstruct / @PreDestory

  • 초기화 작업
    : @PostConstuct를 원하는 메서드 위에 선언
  • 종료 작업
    : @PreDestory를 원하는 메서드 위에 선언

  • 최신 스프링에서 가장 권장하는 방법
  • 유일한 단점 --> 외부 라이브러리에 적용하지 못함 --> @Bean 사용해야함!

정리

  • 기본적으로 @PostConstuct / @PreDestory를 사용하자
  • 외부 라이브러리를 초기화 / 종료 해야하면 @BeaninitMethod / destoryMethod 사용!
profile
Developer & PhotoGrapher

0개의 댓글