[SB_BASIC] 스프링 빈의 생명주기(Lifecycle)

junghan·2023년 6월 16일
0

SpringBootProject

목록 보기
20/35
post-thumbnail

스프링 빈의 생명주기(Lifecycle)에 대해서 알아보겠습니다.

스프링 빈은 스프링 컨테이너에 의해 생성되고, 초기화되며, 사용되며, 소멸됩니다. 이러한 생명주기를 관리하기 위해 스프링은 다양한 콜백 메서드(callback method)를 제공합니다. 콜백 메서드는 스프링 컨테이너에 의해 호출되는 메서드로, 빈의 초기화나 소멸과 같은 특정 시점에서 호출되어 원하는 작업을 수행할 수 있습니다.


스프링 빈의 생명주기 단계

스프링 컨테이너 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 빈 생성 종료

  1. 객체 생성: 스프링은 빈의 객체를 생성합니다. 이때, 생성자를 통해 필요한 의존성을 주입할 수 있습니다. 생성된 객체는 아직 초기화되지 않은 상태입니다.

  2. 의존관계 주입: 스프링은 빈의 의존성 주입(Dependency Injection)을 수행합니다. 즉, 필요한 의존 객체를 주입하여 빈이 완전히 초기화될 수 있도록 합니다.

  3. 초기화 콜백: 의존관계 주입이 완료된 후에는 초기화 콜백 메서드가 호출됩니다. 초기화 콜백 메서드는 빈이 사용하기 전에 필요한 초기화 작업을 수행하는 역할을 합니다. 스프링은 여러 가지 방법으로 초기화 콜백을 지원하며, 개발자는 @PostConstruct 어노테이션을 이용하거나 @Bean에 initMethod를 추가하는 방법 등을 선택할 수 있습니다.

  4. 사용: 초기화가 완료된 스프링 빈은 사용됩니다. 이때, 필요한 비즈니스 로직을 수행하거나 데이터를 제공하는 등의 작업을 수행합니다.

  5. 소멸전 콜백: 스프링 컨테이너가 종료되기 직전에는 소멸전 콜백 메서드가 호출됩니다. 소멸전 콜백 메서드는 빈이 소멸되기 전에 정리 작업이나 리소스 반환 등의 종료 작업을 수행하는 역할을 합니다. 마찬가지로, 스프링은 여러 가지 방법으로 소멸전 콜백을 지원하며, @PreDestroy 어노테이션을 이용하거나 @Bean에 destroyMethod 추가하는 방법 등을 선택할 수 있습니다.


생명주기 특성

스프링은 객체의 생성과 초기화를 분리하는 것을 권장합니다. 생성자는 객체의 필수 정보를 받고, 메모리를 할당하여 객체를 생성하는 역할을 담당하며, 초기화는 생성된 객체의 외부 커넥션 연결 등과 같은 무거운 동작을 수행합니다. 객체 생성과 초기화를 명확하게 분리함으로써 코드의 가독성과 유지보수성을 높일 수 있습니다.

또한, 싱글톤 빈은 스프링 컨테이너가 종료될 때 함께 소멸되므로 컨테이너의 종료 직전에 소멸전 콜백이 발생합니다. 이와 달리, 생명주기가 짧은 빈들은 해당 빈이 종료되기 직전에 소멸전 콜백이 호출됩니다. 이러한 생명주기 관리를 통해 스프링은 안전하게 초기화와 종료 작업을 수행할 수 있도록 지원합니다.

스프링의 빈 생명주기 관리는 애플리케이션의 구성 요소들을 효율적으로 관리하고 초기화/소멸 작업을 일관성 있게 처리하는 데 도움을 줍니다. 개발자는 이러한 생명주기 콜백을 적절히 활용하여 초기화 작업이나 리소스 관리 등을 수행할 수 있습니다.


정리

  • @PostConstruct, @PreDestroy 애노테이션을 사용 추천
  • 코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 수동 빈 등록 시 @Bean에 initMethod,destroyMethod를 추가하는 방식으로 사용
profile
42seoul, blockchain, web 3.0

0개의 댓글