
1. Spring Bean이란?
Spring Bean은 스프링 IoC(Inversion of Control) 컨테이너가 관리하는 객체입니다.
- 특징:
- 스프링 애플리케이션의 핵심 구성 요소.
- 보통 애플리케이션 설정 파일(예: XML, Java Config)이나 컴포넌트 스캔을 통해 생성 및 관리됨.
- 컨테이너가 객체의 생명주기와 의존성을 관리.
2. Spring IoC 컨테이너란?
IoC(Inversion of Control)는 객체 생성 및 관리의 제어권을 개발자가 아닌 프레임워크가 담당하도록 역전시키는 설계 패턴입니다.
- 스프링 IoC 컨테이너:
- Bean의 생성, 초기화, 파괴를 관리.
- 의존성 주입(DI)을 통해 객체 간의 관계를 설정.
스프링 빈이 왜 필요할까?
-
의존성 관리:
- 객체 간 결합도를 낮추고 유연한 설계를 가능하게 함.
- 객체의 생성을 개발자가 아닌 IoC 컨테이너가 담당함으로써 재사용성 및 유지보수성을 높임.
-
싱글톤 관리:
- 대부분의 빈을 싱글톤으로 관리하여 리소스를 효율적으로 사용.
-
라이프사이클 관리:
- 애플리케이션 시작 시 초기화, 종료 시 정리 등의 작업을 중앙에서 통제 가능.
-
객체의 명확한 정의:
- 설정 파일이나 애노테이션을 통해 객체를 명시적으로 정의할 수 있음.
스프링 IoC 컨테이너가 Bean을 관리하는 이유
-
객체 간 결합도 감소:
- DI를 통해 객체 간의 의존성을 낮추고, 쉽게 변경 가능한 설계를 지원.
-
효율적 메모리 관리:
- 싱글톤 스코프로 동일한 빈을 공유함으로써 메모리 낭비를 방지.
-
애플리케이션 설정 중앙화:
- 빈의 생성, 의존성 주입 등을 한 곳에서 설정하여 관리.
1. 빈과 의존성 주입 (Dependency Injection)
- 스프링 빈은 의존성 주입을 통해 객체 간 관계를 설정합니다.
- 의존성 주입 방식:
- 생성자 주입
- Setter 주입
- 필드 주입 (권장되지 않음)
장점:
- 객체 간 강한 결합도를 줄이고 유연한 확장 가능.
- 테스트하기 쉬운 코드 작성 가능.
2. 빈과 싱글턴 (Singleton)
3. 스프링 IoC 컨테이너는 Bean을 어떻게 관리할까?
- 생명주기:
- 스프링 컨테이너 초기화
- 설정 파일(XML, Java Config) 또는 컴포넌트 스캔을 통해 Bean 등록.
- Bean 생성
@Component, @Bean 애노테이션을 사용하여 빈 생성.
- 의존성 주입
- 생성자, Setter 등을 통해 필요한 의존성을 주입.
- 초기화 메서드 호출
@PostConstruct 또는 사용자 정의 메서드 호출.
- 빈 사용
- 소멸 메서드 호출
- 애플리케이션 종료 시
@PreDestroy 또는 사용자 정의 메서드 호출.
4. 빈 설정 시 주의점
-
빈 간의 의존성 관리:
- 순환 참조 문제가 발생하지 않도록 설계.
- 생성자 주입 사용 시 순환 참조 주의.
-
스코프:
- 기본 스코프는 싱글톤이나, 요청별 빈(
@RequestScope), 세션별 빈(@SessionScope)이 필요한 경우 명시적으로 설정.
-
무상태 설계 권장:
- 싱글톤 빈이 상태를 가지면 동시성 문제가 발생하므로 무상태로 설계.
-
테스트:
- Bean 설정 변경이 애플리케이션 전체에 영향을 미치므로 변경 후 충분히 테스트 필요.
스프링의 빈과 IoC 컨테이너는 객체 생성을 프레임워크가 관리하여 결합도를 낮추고, 객체의 재사용성을 높이며 애플리케이션을 보다 유연하고 유지보수하기 쉽게 만듭니다.