스프링
스프링 빈과 빈 스코프
생각없는 개발자
2025. 2. 14. 16:55
스프링 프레임워크에서는 객체를 직접 생성하고 관리하는 대신, 스프링 컨테이너가 관리하도록 한다. 이렇게 스프링 컨테이너가 생성하고 관리하는 객체를 스프링 빈(Spring Bean)이라고 한다.
1. 스프링 빈의 특징
- 스프링 컨테이너가 관리 : 개발자가 new 키워드로 직접 객체를 생성하지 않고, 스프링이 관리한다.
- 의존성 주입(DI, Dependency Injection)을 통해 객체 간의 관계를 설정할 수 있다.
- 싱글톤이 기본 스코프 : 기본적으로 스프링 빈은 하나만 생성되어 공유된다.
2. 빈 등록 방법
2.1 @Component 사용
클래스 위에 @Component 어노테이션을 붙이면 해당 클래스는 빈으로 등록된다.
@Component
public class MyBean {
public void hello() {
System.out.println("Hello, Spring Bean!");
}
}
2.2 @Configuration과 @Bean 사용
직접 설정 파일을 만들어 스프링 빈을 등록할 수도 있다.
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
3. 스프링 빈의 스코프
빈 스코프(Bean Scope)란 스프링 컨테이너에서 빈이 생성되고 관리되는 범위를 의미한다. 기본적으로 싱글톤이지만, 필요에 따라 다양한 스코프를 지정할 수 있다.
3.1 싱글톤
- 하나의 인스턴스만 생성되어 애플리케이션 전역에서 공유된다.
- 메모리 효율적이지만, 상태를 변경하면 모든 곳에서 영향을 받을 수 있다.
@Scope("singleton")
@Component
public class SingletonBean {}
3.2 프로토타입
- 요청할 때마다 새로운 인스턴스를 생성한다.
- 상태를 가질 수 있으며, 매번 새로운 객체가 필요할 때 사용한다.
- 프로토 타입의 경우에 빈은 컨테이너가 생성만 하고, 이후 관리는 개발자가 직접 해야 한다.
@Scope("prototype")
@Component
public class PrototypeBean {}
3.3 요청 스코프
- 웹 애플리케이션에서 사용되며, HTTP 요청이 들어올 때마다 새로운 빈이 생성된다.
- 요청이 끝나면 해당 빈은 소멸한다.
@Scope("request")
@Component
public class RequestBean {}
3.4 세션 스코프
- 사용자별 세션이 유지되는 동안 동일한 빈을 유지한다.
- 로그인한 사용자 정보를 유지하는데 유용하다.
@Scope("session")
@Component
public class SessionBean {}
3.5 애플리케이션 스코프
- 애플리케이션이 실행되는 동안 유지되는 빈이다.
- 주로 공통적인 설정 정보를 저장하는데 사용한다.
@Scope("application")
@Component
public class SessionBean {}
4. 스프링 빈 스코프 사용 시 주의점
- 싱글톤 빈은 상태를 공유하므로 멀티스레드 환경에서 동기화 문제가 발생할 수 있다.
- 프로토타입 빈을 사용할 경우 생성 후 수명을 직접 관리해야한다.
- 웹 스코프는 웹 애플리케이션 환경에서만 사용가능하다.
5. 정리
스프링 빈은 스프링 컨테이너가 관리하는 객체로, 기본적으로 싱글톤 스코프를 가진다. 그러나 필요에 따라 다양한 스코프를 설정할 수 있으며, 각 스코프는 특정 상황에서 유용하게 사용될 수 있다. 올바른 스코프를 선택하여 효율적인 애플리케이션을 개발해야 한다.