스프링 빈은 스프링 IoC 컨테이너에 의해 관리되는 객체를 말한다.
즉, 스프링 애플리케이션이 실행되면, 필요한 객체를 생성하고 그 생명 주기를 관리하며, 애플리케이션에서 필요할 때 이러한 객체들을 주입해주는 역할을 한다.
1. 스프링 빈의 생성과 관리
스프링 애플리케이션에서는 빈을 미리 등록해 두고 필요한 곳에 주입하여 사용한다.
이 Bean들은 스프링 IoC 컨테이너가 관리하며, 애플리케이션 시작 시점에 필요한 번들을 생성하여 저장한다. (인스턴스 생성을 new 를 사용해서 개발자가 직접 하는 게 아니라 IoC임)
주입 시점에 싱글톤 패턴이 적용된 객체를 반환하여, 애플리케이션에서 여러 번 인스턴스를 생성하는 대신 하나의 객체를 공유한다.
2. 스프링 빈의 등록 방법
빈 등록 방식에는 여러가지가 있다.
- 컴포넌트 스캔
- 클래스에 @Component, @Service, @Repository, @Controller와 같은 어노테이션을 붙여 스프링이 자동으로 빈으로 등록하게 하는 방법이다.
- JavaConfig 설정
- @Configuration 클래스 내에서 @Bean 어노테이션을 사용하여 메서드 단위로 등록할 수 있다.
- XML 설정 (쓰는 걸 본적이 없음)
- 스프링 XML 설정 파일에서 <bean> 태그로 빈을 등록하는 방식이다.
3. 스프링 빈의 생명 주기
스프링 컨테이너에 등록된 빈은 다음과 같은 생명 주기를 가진다.
- 생성
- 빈이 처음 생성될 때 스프링 컨테이너가 객체를 인스턴스화한다.
- 의존성 주입
- 생성된 객체에 필요한 의존성을 자동으로 주입해준다.
- 초기화
- 빈 생성 후, 초기화 작업이 필요한 경우 @PostConstruct 어노테이션이나 InitailizingBean 인터페이스의 afterPropertiesSet() 메서드를 사용하여 초기화 작업을 수행한다.
- 소멸
- 빈이 더 이상 사용되지 않을 때 @PreDestory 어노테이션이나 DisposableBean 인터페이스의 destroy() 메서드를 통해 자원 정리 작업을 수행한다.
4. 빈 스코프
스프링에서는 빈의 스코프를 지정하여 빈이 관리되는 범위를 정의할 수 있다.
주요 스코프는 다음과 같다.
- Singleton
- 애플리케이션 내에서 하나의 인스턴스만 생성되어 공유된다.
- Prototype
- 빈을 요청할 때마다 새로운 인스턴스가 생성된다.
- Request, Session, Application
- 웹 애플리케이션에서 사용되는 스코프이며 각각 요청, 세션, 애플리케이션 범위에서 빈이 관리된다.
@Scope(”protoype”)의 방식으로 수동으로 빈 스코프를 정해줄 수 있다.
빈의 주요 용도
스프링 빈은 애플리케이션에서 중요한 역할을 하는 비즈니스 로직이나 데이터 접근 객체 등을 담고 있으며, 이를 통해 애플리케이션의 의존성 주입, 테스트 용이성, 유연한 구성 관리가 가능해진다.
스프링 빈은 애플리케이션의 주요 객체를 효과적으로 관리하여 재사용성과 유연성을 높이며, 각 객체의 생명 주기를 관리하여 효율적인 리소스 사용과 높은 확장성을 제공한다.