스프링 프레임워크에서 빈 범위(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의 선택 기준을 실무에 적용할 것.