1. 빈(Bean)
정의 및 역할
- 정의: 스프링 빈은 스프링 IoC 컨테이너에 의해 관리되는 객체입니다.
- 역할: 빈은 애플리케이션의 비즈니스 로직, 데이터 액세스, 웹 요청 처리 등을 담당합니다.
생명주기
- 생성: 스프링 컨테이너는 설정 정보를 바탕으로 빈 인스턴스를 생성합니다.
- 사용: 빈은 애플리케이션에 필요한 기능을 수행합니다.
- 소멸: 애플리케이션 종료 시 빈 인스턴스는 스프링 컨테이너에 의해 소멸됩니다.
스코프
1. 싱글톤(Singleton) 스코프
- 정의: 기본 스코프로 스프링 IoC 컨테이너당 빈의 단 하나의 인스턴스만을 생성합니다.
- 사용 시기: 애플리케이션 전반에 걸쳐 공유되는 상태가 없는 서비스, 유틸리티 클래스 등에 적합합니다.
- 주의점:
- 스레드 안전성: 싱글톤 빈은 여러 스레드에 의해 동시에 접근될 수 있으므로 스레드 안전하게 설계되어야 합니다.
- 상태 관리: 상태를 갖는 필드가 있다면 동시성 문제를 유발할 수 있으므로, 가능한 상태를 갖지 않는 것이 좋습니다.
2. 프로토타입(Prototype) 스코프
- 정의: 빈을 요청할 때마다 새로운 인스턴스를 생성합니다.
- 사용 시기: 각 요청이나 트랜잭션마다 별도의 인스턴스가 필요한 경우에 적합합니다.
- 주의점:
- 수명 관리: 프로토타입 빈의 전체 수명 주기는 스프링 컨테이너가 관리하지 않습니다. 생성 후의 관리 책임은 빈을 요청한 클라이언트에 있습니다.
3. 웹 관련 스코프 (Request, Session, GlobalSession)
- Request
- 정의: HTTP 요청마다 별도의 빈 인스턴스를 생성합니다.
- 사용 시기: 사용자 요청마다 별도의 상태를 유지해야 할 때 사용합니다.
- Session
- 정의: HTTP 세션마다 별도의 빈 인스턴스를 생성합니다.
- 사용 시기: 사용자 세션에 따라 상태를 유지해야 할 때 사용합니다.
- Application
- 정의: 웹 애플리케이션의 생명주기에 따라 단 하나의 빈 인스턴스만을 생성합니다.
- 사용 시기: 애플리케이션 전반에서 공유되는 데이터, 예를 들어 웹 애플리케이션 설정이나 공통 데이터를 저장하는 데 사용됩니다.
2. 빈 팩토리(Bean Factory)
빈 팩토리의 역할과 기능
- 역할: 빈 팩토리는 스프링의 IoC 컨테이너의 가장 기본적인 형태로, 빈의 생성과 관리를 담당합니다.
- 기능: 빈의 정의를 해석하고, 빈의 생성, 초기화, 의존성 주입, 라이프사이클 관리 등을 수행합니다.
빈 팩토리와 기본적인 IoC 컨테이너 작동 원리
- IoC 원리: IoC(Inversion of Control, 제어의 역전)는 객체의 생성과 의존성 관리를 개발자에서 컨테이너로 옮깁니다. 이를 통해 코드의 결합도를 낮추고 유연성 및 확장성을 향상시킵니다.
- 작동 방식: 빈 팩토리는 설정 메타데이터(예: XML 파일, 어노테이션)를 기반으로 빈의 정의를 해석하고, 해당 정의에 따라 빈 인스턴스를 생성하고 관리합니다.
3. 어플리케이션 컨텍스트(Application Context)
- 확장: 어플리케이션 컨텍스트는 빈 팩토리의 모든 기능을 포함하면서 애플리케이션 전반의 통합 기능을 제공합니다.
- 추가적인 기능: 이벤트 발행, 리소스 로딩, 국제화, 웹 애플리케이션 컨텍스트 등 추가적인 엔터프라이즈 수준의 기능을 제공합니다.
추가적인 기능과 이점
- 통합 기능: AOP 지원, 메시지 소스를 통한 국제화, 이벤트 발행 및 리스닝, 웹 환경에서의 특화된 기능 등을 제공합니다.
- 이점: 개발자는 빈의 기본적인 생명주기 관리뿐만 아니라, 애플리케이션 전반에 걸친 다양한 서비스를 어플리케이션 컨텍스트를 통해 이용할 수 있습니다.
'스프링' 카테고리의 다른 글
| 토비의 스프링 | 8장 스프링이란 무엇인가 (0) | 2024.01.10 |
|---|---|
| 스프링 핵심 AOP! (1) | 2024.01.03 |
| DataAccessException이란? (0) | 2023.12.29 |
| 빈(Bean)을 등록하는 여러가지 방법! (0) | 2023.12.20 |