Spring Bean 생명주기를 설명해주세요.
답변 포인트
컨테이너 관리 객체의 생성과 소멸를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.
정답 및 해설
빠른 요약
Spring Bean은 객체 생성, 의존성 주입, 초기화 콜백, 사용, 소멸 콜백 순서로 관리됩니다. @PostConstruct와 @PreDestroy 등으로 초기화와 정리 로직을 둘 수 있습니다.
Spring Bean은 객체 생성, 의존성 주입, 초기화 콜백, 사용, 소멸 콜백 순서로 관리됩니다. @PostConstruct와 @PreDestroy 등으로 초기화와 정리 로직을 둘 수 있습니다.
핵심 개념
핵심 기준은 컨테이너 관리 객체의 생성과 소멸입니다.
Spring Bean은 개발자가 직접 new로 생명주기를 관리하는 객체가 아니라 Spring 컨테이너가 생성하고 의존성을 주입하며 필요하면 프록시를 적용하는 객체입니다. 기본 singleton Bean은 애플리케이션 컨텍스트와 거의 같은 생명주기를 가집니다.
생명주기를 이해하면 초기화 시점, 리소스 정리, AOP 프록시 적용 시점, scope 차이에서 생기는 문제를 더 정확히 설명할 수 있습니다.
동작 흐름
- BeanDefinition을 읽고 Bean 인스턴스를 생성합니다.
- 생성자, 필드, setter 등을 통해 의존성을 주입합니다.
- BeanPostProcessor와 초기화 콜백이 실행되고 프록시가 적용될 수 있습니다.
- 컨테이너 종료 시 destroy 콜백으로 리소스를 정리합니다.
실제 예시
@Component
public class CacheWarmup {
@PostConstruct
void init() {
// 의존성 주입 이후 실행
}
@PreDestroy
void close() {
// 컨테이너 종료 전 리소스 정리
}
}예시는 핵심 구조를 단순화한 것입니다. 실무에서는 운영 환경, 장애 상황, 보안 요구사항에 맞게 세부 설정을 조정해야 합니다.
실무에서 주의할 점
- 초기화 콜백에서 외부 API 호출이나 대용량 작업을 하면 애플리케이션 시작이 느려집니다.
- 프록시 기반 기능은 자기 호출(self-invocation)에서는 적용되지 않을 수 있습니다.
- singleton Bean에 요청별 상태를 필드로 저장하면 동시성 버그가 생길 수 있습니다.
함께 연결해서 보면 좋은 키워드
Spring, Bean, Lifecycle, DI
면접에서 짚으면 좋은 포인트
- 프레임워크가 자동으로 해주는 일과 개발자가 직접 설계해야 하는 일을 구분해 설명하면 좋습니다.
- Bean scope, AOP proxy, 초기화 콜백의 실행 시점을 함께 언급하면 실무적인 답변이 됩니다.
정리
한 줄로 정리하면, Spring Bean은 객체 생성, 의존성 주입, 초기화 콜백, 사용, 소멸 콜백 순서로 관리됩니다. @PostConstruct와 @PreDestroy 등으로 초기화와 정리 로직을 둘 수 있습니다. 개념의 정의뿐 아니라 장애 시 동작, 운영 지표, 자동화와 복구 전략까지 함께 이해하는 것이 중요합니다.