💻 백엔드개발/Spring

[Spring] Section8_빈 생명주기 콜백

aaahyunseo 2024. 10. 12. 03:44

인프런

스프링 핵심 - 기본편

김영한


Section8_빈 생명주기 콜백

데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행 → 객체의 초기화와 종료 작업 필요.

  • NetworkClient는 애플리케이션 시작 시점에 Connect() 호출로 연결 맺기, 종료 시점에 disConnect() 호출로 연결 끊기

스프링 빈의 라이프 사이클

  • 객체 생성 → 의존 관계 주입 (생성자 주입은 예외, 객체를 만들 때 이미 스프링 빈에 들어와야 함.)
  • 객체 생성 후 의존 관계 주입이 다 끝나야 데이터 사용 준비 끝 → 초기화 작업
  • 완료 시점을 알 수 있는 방법은 “콜백 메서드”
  • 스프링 빈의 이벤트 라이프 사이클
    • 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료
      • 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입 완료 후 호출.
      • 소멸 전 콜백 : 빈이 소멸되기 직전에 호출.
  • 객체 생성과 초기화 분리 → SRP(단일 책임 원칙) ⇒ 유지 보수에 용이함.

빈 생명 주기 콜백 지원 3가지 방법

  1. 인터페이스(InitializingBean, DisposableBean)
  • InitializingBean은 afterPropertiesSet() 메서드로 초기화 지원
  • DisposableBean은 destroy() 메서드로 소멸 지원
  • 이름 변경은 안됨, 스프링 전용 인터페이스, 외부 라이브러리에 적용 안됨
  • 초창기 이후로는 잘 사용하지 않음.

2. 설정 정보에 초기화/종료 메서드 지정

  • @Bean(initMethod=”init”, destroyMethod=”close”)
  • 메서드 이름 변경 가능, 스프링 코드에 의존X, 외부 라이브러리에도 메서드 적용 가능
  • destroyMethod의 default 값 → close, shutdown

3. @PostConstruct, @PreDestroy 어노테이션 지원

  • @PostConstruct, @PreDestroy
  • 최근 스프링에서 가장 권장(편리함)
  • 하지만 유일한 단점은 외부 라이브러리에 사용 불가 (→ 2번 방법 사용)

'💻 백엔드개발 > Spring' 카테고리의 다른 글

MVC 패턴  (3) 2024.11.01
[Spring] Section9_빈 스코프  (0) 2024.10.12
[Spring] Section7_의존관계 주입  (0) 2024.10.12
[Spring] Section6_컴포넌트 스캔  (0) 2024.10.12
[Spring] Section5_싱글톤 컨테이너  (0) 2024.10.12