스프링 프레임워크에서 빈 범위(Bean Scope) 이해하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- Spring Framework 개발자, 특히 초보자 및 인터뷰 준비자
- 난이도: 중간 수준 (기초 개념부터 실무 적용까지 설명)
핵심 요약
- Singleton 범위는 애플리케이션 전체에서 단일 인스턴스를 공유하며, Prototype 범위는 요청 시마다 새로운 인스턴스를 생성함.
- 웹 특화 범위(Request, Session, Global-Session)는 HTTP 요청/세션 범위 내에서 인스턴스를 관리하며, @Scope 어노테이션으로 설정 가능.
- Spring Bean Lifecycle은 생성, 초기화, 사용, 종료 단계로 구성되며, @PostConstruct와 @PreDestroy 어노테이션으로 콜백 메서드 지정 가능.
섹션별 세부 요약
1. Spring Bean Lifecycle
- 빈 생성 시 BeanFactory가 책임을 지며, @ComponentScan으로 자동 등록 가능.
- @PostConstruct는 초기화 단계에서 실행되며, @PreDestroy는 종료 시 실행됨.
- 예시:
@Component
어노테이션을 사용한 빈은@Autowired
로 의존성 주입 가능.
2. Singleton vs Prototype 범위 사용 사례
- Singleton: 전역적으로 공유해야 하는 서비스 빈(예:
@Service
어노테이션 적용). - Prototype: 요청마다 상태가 달라지는 객체(예:
@Scope("prototype")
설정). - 구현 예시:
```java
@Component
@Scope("prototype")
public class PrototypeBean {
// Prototype 범위 적용 예
}
```
3. 웹 특화 범위 (Request, Session)
- Request 범위: HTTP 요청 당 하나의 인스턴스 생성 (예:
@Scope("request")
). - Session 범위: 사용자 세션 당 하나의 인스턴스 생성 (예:
@Scope("session")
). - 구성 예시:
```java
@Component
@Scope("session")
public class SessionScopedBean {
// 세션 범위 적용 예
}
```
4. 어노테이션과 구성 예시
- @Configuration 클래스로 빈 정의 가능, @Bean 메서드로 명시적 설정 가능.
- XML 구성과 Java 구성 모두 지원하며, @EnableWebMvc로 웹 관련 설정 활성화 가능.
5. 시각적 다이어그램 요약
- Singleton: 애플리케이션 전체에서 하나의 인스턴스 공유.
- Prototype: 요청 시마다 새로운 인스턴스 생성.
- Request/Session: HTTP 요청/세션 범위 내에서 인스턴스 생성.
결론
- Spring Bean Scope 이해는 애플리케이션 설계의 핵심이며, @Scope 어노테이션과 @PostConstruct/ @PreDestroy를 활용해 빈의 생명주기를 정확히 제어해야 함.
- 시각적 다이어그램을 통해 범위 차이를 명확히 파악하고, Singleton vs Prototype의 선택 기준을 실무에 적용할 것.