Spring에서 Bean 이해하기: Spring 애플리케이션의 핵심

발행: (2025년 12월 29일 오후 11:31 GMT+9)
4 min read
원문: Dev.to

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 라이프사이클 단계

  1. Bean 생성 – 인스턴스가 생성됩니다.
  2. 의존성 주입 – 의존성이 주입됩니다.
  3. Bean 초기화 – 초기화 콜백이 호출됩니다.
  4. Bean 사용 – 애플리케이션에서 Bean을 사용할 수 있게 됩니다.
  5. Bean 소멸 – 제거되기 전에 소멸 콜백이 실행됩니다.

Bean 라이프사이클 훅

  • @PostConstruct – 의존성 주입이 완료된 후 호출되는 메서드.
  • @PreDestroy – Bean이 컨테이너에서 제거되기 전에 호출되는 메서드.

Spring Bean의 스코프

일반적인 Bean 스코프

  • singleton (기본) – Spring 컨테이너당 하나의 공유 인스턴스.
  • prototype – Bean이 요청될 때마다 새로운 인스턴스가 생성됩니다.
  • request – HTTP 요청당 하나의 인스턴스(웹 컨텍스트).
  • websocket – WebSocket 세션당 하나의 인스턴스.

스코프를 이해하는 것은 메모리 사용량, 성능, 애플리케이션 동작에 직접적인 영향을 미치기 때문에 중요합니다.

Bean이 중요한 이유

  • 의존성 주입 – 느슨한 결합을 촉진합니다.
  • 클린 아키텍처 – 관심사를 명확히 분리합니다.
  • 테스트 가능·유지 보수성 – Bean은 테스트 시 쉽게 모킹하거나 교체할 수 있습니다.

Bean 개념이 명확해지면 다른 Spring 기능들을 이해하기가 훨씬 쉬워집니다.

Back to Blog

관련 글

더 보기 »

Spring Cloud Gateway: 기본 예제

Spring Cloud Gateway: Basic Example에 대한 표지 이미지 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fd...