Spring에서 Bean 이해하기: Spring 애플리케이션의 핵심
Source: Dev.to
Spring Bean이란?
Spring Bean은 Spring IoC(Inversion of Control) 컨테이너에 의해 생성·설정·관리되는 객체입니다. 쉽게 말하면:
- Spring이 객체를 생성해 줍니다
- Spring이 의존성을 관리합니다
- Spring이 라이프사이클을 제어합니다
Bean은 Spring 애플리케이션의 핵심 구성 요소이며, 전체 애플리케이션은 본질적으로 서로 연결된 Bean들의 집합입니다.
Spring에서 Bean은 어떻게 정의하나요?
스테레오타입 어노테이션 사용
주요 스테레오타입 어노테이션:
@Component– 일반 컴포넌트@Service– 비즈니스 로직 계층@Repository– 데이터 접근 계층@Controller– 웹 컨트롤러 계층
이 어노테이션들은 Spring에게 *“이 클래스는 IoC 컨테이너가 관리해야 한다”*는 뜻을 전달합니다.
설정 클래스를 이용한 명시적 Bean 선언
- 클래스에
@Configuration어노테이션을 붙입니다. - 클래스 내부 메서드에서 프로그래밍 방식으로 Bean을 정의합니다. 예:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
이 방식은 특히 커스터마이징이 필요할 때 Bean 생성 및 설정을 더 세밀하게 제어할 수 있게 해 줍니다.
Spring Bean 라이프사이클
Bean 라이프사이클 단계
- Bean 생성 – 인스턴스가 생성됩니다.
- 의존성 주입 – 의존성이 주입됩니다.
- Bean 초기화 – 초기화 콜백이 호출됩니다.
- Bean 사용 – 애플리케이션에서 Bean을 사용할 수 있게 됩니다.
- Bean 소멸 – 제거되기 전에 소멸 콜백이 실행됩니다.
Bean 라이프사이클 훅
@PostConstruct– 의존성 주입이 완료된 후 호출되는 메서드.@PreDestroy– Bean이 컨테이너에서 제거되기 전에 호출되는 메서드.
Spring Bean의 스코프
일반적인 Bean 스코프
singleton(기본) – Spring 컨테이너당 하나의 공유 인스턴스.prototype– Bean이 요청될 때마다 새로운 인스턴스가 생성됩니다.request– HTTP 요청당 하나의 인스턴스(웹 컨텍스트).websocket– WebSocket 세션당 하나의 인스턴스.
스코프를 이해하는 것은 메모리 사용량, 성능, 애플리케이션 동작에 직접적인 영향을 미치기 때문에 중요합니다.
Bean이 중요한 이유
- 의존성 주입 – 느슨한 결합을 촉진합니다.
- 클린 아키텍처 – 관심사를 명확히 분리합니다.
- 테스트 가능·유지 보수성 – Bean은 테스트 시 쉽게 모킹하거나 교체할 수 있습니다.
Bean 개념이 명확해지면 다른 Spring 기능들을 이해하기가 훨씬 쉬워집니다.