DeveloPiano

Spring의 Bean, Container, Component, Configuration 개념 정리 본문

Develop/Spring

Spring의 Bean, Container, Component, Configuration 개념 정리

DevPi 2025. 4. 18. 17:26
반응형

 

Spring 프레임워크를 처음 접하면 자주 듣게 되는 용어들이 있습니다. 바로 Bean, Container, Component, Configuration과 같은 단어들이죠. 이들은 스프링의 핵심 개념으로, 서로 밀접한 관계를 가지고 있어 처음에는 다소 헷갈릴 수 있습니다.

이 글에서는 각각의 개념이 무엇인지, 그리고 이들이 어떻게 서로 연결되어 있는지를 예제와 함께 이해하기 쉽게 정리해보겠습니다.


Bean이란?

스프링에서 **Bean(빈)**은 Spring IoC 컨테이너가 관리하는 객체를 의미합니다. 개발자가 직접 생성하는 객체가 아닌, 스프링이 대신 생성하고 주입까지 관리해주는 객체라고 생각하면 됩니다.

예를 들어, 어떤 서비스 클래스를 Bean으로 등록하면 스프링이 해당 객체를 생성해 관리합니다.

@Component
class MyService {
    fun hello() = "Hello from service"
}

위의 MyService 클래스는 @Component 어노테이션 덕분에 스프링 컨테이너에 의해 Bean으로 등록됩니다.


Container란?

**Container(컨테이너)**는 스프링 프레임워크의 핵심 기능 중 하나인 **IoC(Inversion of Control, 제어의 역전)**를 담당하는 컴포넌트입니다.

정확히 말하면, 컨테이너는 Bean 객체를 생성하고, 생명주기를 관리하며, 필요할 때 주입해주는 관리자 역할을 합니다. 흔히 말하는 ApplicationContext가 바로 이 IoC 컨테이너의 대표적인 구현체입니다.

val context = AnnotationConfigApplicationContext(AppConfig::class.java)
val service = context.getBean(MyService::class.java)
println(service.hello())

이처럼 컨테이너는 Bean을 생성하고 보관하며, 필요한 곳에 전달해주는 역할을 수행합니다.


Component란?

@Component는 클래스가 스프링의 Bean으로 등록되어야 한다는 것을 나타내는 어노테이션입니다. 이 어노테이션이 붙은 클래스는 컴포넌트 스캔(Component Scan)의 대상이 되어 자동으로 Bean으로 등록됩니다.

또한, @Component를 확장한 어노테이션들도 있습니다:

  • @Service: 비즈니스 로직을 담당하는 클래스에 사용
  • @Repository: 데이터 접근 계층(DAO)에 사용
  • @Controller: 웹 계층에서 요청을 처리하는 클래스에 사용

이 어노테이션들은 모두 @Component의 특성을 가지며, 역할에 따라 더 의미 있는 이름을 부여하는 방식입니다.


Configuration이란?

@Configuration은 Java/Kotlin 코드로 직접 Bean 설정을 정의할 수 있도록 해주는 클래스임을 나타내는 어노테이션입니다.

이 어노테이션이 붙은 클래스 내부에 @Bean 어노테이션을 사용하면, 메서드에서 반환한 객체가 Spring Bean으로 등록됩니다.

@Configuration
class AppConfig {
    @Bean
    fun myService(): MyService {
        return MyService()
    }
}

이 방식은 주로 XML 설정 대신 명시적으로 Java/Kotlin 코드에서 Bean을 등록하고자 할 때 사용됩니다.


이들 간의 관계는?

이제 각 개념이 어떤 역할을 하는지 알았다면, 이들이 어떻게 연결되어 있는지도 중요합니다.

  • @Component를 사용하면 클래스가 자동으로 Bean으로 등록
  • @Configuration 클래스 안에서 @Bean 메서드를 통해 수동으로 등록할 수도 있음
  • 등록된 Bean들은 모두 **Spring Container(ApplicationContext)**에서 관리됨
  • 애플리케이션 실행 시, 컨테이너는 이 Bean들을 생성하고 주입함

즉, @Component는 자동 등록 방식이고, @Configuration + @Bean은 수동 등록 방식입니다. 이 둘은 함께 사용할 수도 있고, 상황에 따라 적절한 방식을 선택하면 됩니다.


마무리 정리

개념역할

Bean 스프링이 관리하는 객체
Container Bean을 생성하고 관리하는 관리자 (ApplicationContext)
@Component 클래스를 Bean으로 자동 등록하는 어노테이션
@Configuration Bean 설정 클래스를 정의하는 어노테이션
@Bean 메서드의 반환 객체를 Bean으로 수동 등록함

Spring의 핵심은 바로 "객체를 직접 생성하지 않고, 스프링이 대신 관리하게 하는 구조"입니다. 이 구조를 가능하게 하는 것이 바로 위에서 설명한 Bean, Container, Component, Configuration입니다.

이제 스프링의 기본적인 구성 요소들을 이해했으니, 실제 프로젝트에서 보다 유연하게 구조를 설계하고 개발할 수 있을 것입니다.

반응형