9월 25일 - Bean Scope

Yullgiii·2024년 9월 25일
0

[Spring] Bean Scope의 종류와 사용 범위

스프링에서 Bean은 POJO(Plain Old Java Object) 기반의 객체입니다. 상황과 필요에 따라 Bean을 하나만 만들어 사용해야 할 때도 있고, 여러 개가 필요할 때도 있으며, 특정 시점에서만 사용해야 할 때도 있습니다. 이러한 요구사항을 해결하기 위해 스프링에서는 Bean의 사용 범위를 설정할 수 있는 Bean Scope를 제공합니다.

기본적으로, Bean을 특별히 설정하지 않으면 Spring에서는 Singleton으로 생성됩니다. 싱글톤 패턴처럼 특정 타입의 Bean을 단 하나만 만들어 애플리케이션 전체에서 공유해서 사용하는 방식입니다. 대부분의 경우 Bean을 이렇게 하나만 만들어 사용하는 게 일반적이지만, 다양한 요구사항에 따라 다른 Scope가 필요할 때도 있습니다.

Scope의 종류

1. singleton

  • 설명: 해당 Bean이 IoC 컨테이너에서 단 하나의 객체로만 존재합니다. 즉, 모든 요청에서 동일한 인스턴스를 공유합니다.
  • 사용 예시: 주로 빈을 전역으로 관리할 때 사용됩니다.

2. prototype

  • 설명: 해당 Bean에 대해 다수의 객체가 존재할 수 있으며, 요청할 때마다 새로운 객체를 반환합니다.
  • 사용 예시: 상태를 갖고 있어야 하거나, 매번 새로운 인스턴스를 사용해야 할 때 사용합니다.

3. request

  • 설명: HTTP 요청마다 별도의 Bean 객체가 생성되고, 요청이 끝나면 소멸됩니다.
  • 사용 예시: 웹 애플리케이션에서 특정 요청마다 새로운 데이터를 필요로 하는 경우 사용합니다.

4. session

  • 설명: HTTP 세션마다 단 하나의 Bean 객체가 존재하며, 세션이 끝나면 소멸됩니다.
  • 사용 예시: 세션에 종속적인 데이터를 유지해야 할 때 사용합니다.

5. global session

  • 설명: 글로벌 HTTP 세션에서 단 하나의 Bean 객체로 존재하며, 글로벌 세션이 끝나면 소멸됩니다.
  • 사용 예시: 주로 포털 애플리케이션과 같은 환경에서 사용합니다.

request, session, global sessionMVC 웹 애플리케이션에서만 사용 가능합니다.

Bean Scope 설정 방법

Scope는 Bean으로 등록하는 클래스에 어노테이션을 설정해서 사용할 수 있습니다.

예제 코드

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Scope("prototype")
@Component
public class UserController {
    // 컨트롤러 로직
}

위의 코드에서는 @Scope("prototype") 어노테이션을 사용하여 UserController를 요청할 때마다 새로운 인스턴스를 반환하도록 설정하고 있습니다.

추가 예제: 다른 Scope 설정

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Scope("singleton") // 기본 값이므로 생략 가능
@Service
public class OrderService {
    // 싱글톤으로 관리
}

@Scope("request")
@Component
public class RequestHandler {
    // 각 요청마다 새로운 인스턴스
}

@Scope("session")
@Component
public class SessionManager {
    // 세션마다 하나의 인스턴스
}

So...

Spring의 Bean Scope를 사용하면 특정 요구사항에 따라 Bean의 생명주기와 사용 범위를 유연하게 설정할 수 있습니다. Bean이 항상 동일한 인스턴스를 사용해야 할 때는 singleton, 요청마다 새로운 인스턴스를 원할 때는 prototype, request, session 등을 적절히 활용해 개발 상황에 맞는 최적의 Bean 관리를 할 수 있습니다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글