​​ Spring Bean의 개념과 생명주기 – 객체는 누가 만들고 누가 관리할까
본문 바로가기
개발

Spring Bean의 개념과 생명주기 – 객체는 누가 만들고 누가 관리할까

by 컴밥 2025. 4. 28.

 

스프링(Spring) 개발을 시작하면 가장 먼저 듣게 되는 단어 중 하나가 Bean(빈)입니다. 그런데 "Bean이 뭘까?", "누가 만들고, 누가 관리하는 걸까?" 하는 궁금증이 생기기 마련입니다. 이번 글에서는 Spring Bean의 개념과 생명주기를 알기 쉽게 정리해보겠습니다.

 

Spring Bean이란 무엇인가?

Spring Bean이란 Spring IoC(제어의 역전) 컨테이너에 의해 생성되고, 관리되는 객체를 말합니다. 쉽게 말하면, 일반적으로 우리가 new 키워드로 직접 생성하는 객체를 스프링이 대신 만들어 관리해주는 것입니다.

Spring은 이런 방식으로 객체들을 관리하면서 개발자가 객체 생성, 의존성 주입, 소멸 과정을 일일이 신경 쓰지 않고 비즈니스 로직에만 집중할 수 있도록 도와줍니다.

Spring Bean은 보통 아래와 같은 방법으로 등록할 수 있습니다.

  • @Component, @Service, @Repository, @Controller 어노테이션을 클래스에 붙이고
  • @Configuration 클래스 안에서 @Bean 어노테이션으로 직접 등록하거나
  • XML 파일을 통해 수동으로 설정할 수도 있습니다. (요즘은 거의 사용하지 않습니다)
  •  

Spring Bean 생명주기란 무엇인가?

Spring Bean은 단순히 "만들어지는" 것으로 끝나지 않습니다. 생명주기(Lifecycle)가 존재합니다.
Bean은 생성되고, 초기화되고, 사용되다가 결국 소멸됩니다. 이 과정은 Spring이 자동으로 관리합니다.

Bean 생명주기의 흐름은 다음과 같습니다.

  1. 객체 생성 (Instantiation)
    스프링 컨테이너가 빈 객체를 생성합니다. (new 키워드를 직접 쓰지 않아도 됩니다.)
  2. 의존성 주입 (Dependency Injection)
    필요한 의존성(다른 객체)을 빈에 주입합니다. (@Autowired 등이 사용됩니다.)
  3. 초기화 (Initialization)
    빈이 사용할 준비를 합니다.
    초기화 로직을 작성하고 싶다면 @PostConstruct 어노테이션을 사용하거나, InitializingBean 인터페이스를 구현할 수 있습니다.
  4. 사용 (Usage)
    빈은 애플리케이션 내에서 본격적으로 사용됩니다.
  5. 소멸 (Destruction)
    애플리케이션 종료 시 빈이 정리됩니다.
    소멸 직전에 필요한 로직은 @PreDestroy 어노테이션을 사용하거나, DisposableBean 인터페이스를 구현하여 작성할 수 있습니다.

 

Bean 생명주기 관련 어노테이션

Spring에서는 생명주기를 다루기 위해 다음과 같은 어노테이션을 제공합니다.

  • @PostConstruct
    객체가 생성되고, 의존성 주입이 끝난 뒤 호출됩니다. 초기화 작업에 사용합니다.
  • @PreDestroy
    컨테이너가 종료되기 직전에 호출됩니다. 자원 반납이나 정리 작업에 사용합니다.

예시 코드를 간단히 살펴보겠습니다.

@Component
public class SampleBean {

    @PostConstruct
    public void init() {
        System.out.println("Bean이 초기화되었습니다.");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("Bean이 소멸됩니다.");
    }
}

이렇게 작성하면 SampleBean은 스프링이 알아서 생성하고 초기화하며, 애플리케이션이 종료될 때 자동으로 정리해줍니다.

 

 

Spring Bean Scope – 꼭 알아야 할 추가 개념

Bean은 기본적으로 싱글톤(Singleton) 스코프입니다. 즉, 컨테이너당 하나의 인스턴스만 생성됩니다. 하지만 필요에 따라 스코프를 바꿀 수 있습니다.

  • singleton (기본값): 하나만 생성
  • prototype: 요청할 때마다 새로 생성
  • request: 웹 요청마다 생성 (웹 애플리케이션에서 사용)
  • session: 세션마다 하나 생성

스코프 설정은 @Scope 어노테이션을 이용해 지정할 수 있습니다.

@Component
@Scope("prototype")
public class PrototypeBean {
}

이렇게 하면 PrototypeBean은 요청할 때마다 새로운 인스턴스를 제공합니다.

정리

Spring Bean은 단순한 객체가 아닙니다. Spring이 직접 생성하고, 필요한 의존성을 주입하고, 생명주기를 관리하는 특별한 객체입니다. 이를 통해 개발자는 객체 관리를 신경 쓰지 않고 핵심 로직 개발에 집중할 수 있습니다.

  • Bean은 누가 만들까? → Spring이 만든다.
  • Bean은 누가 관리할까? → Spring이 관리한다.
  • 우리는 필요한 설정만 하면 된다.

Spring Bean의 개념과 생명주기를 잘 이해하고 나면, 스프링의 진짜 매력을 느끼게 될 것입니다. 

spring