본문 바로가기
공부/백엔드

[Spring] @Configuration, @Bean 이란?

by 아찌방 2025. 6. 29.

 

@Configuarion

 

스프링 설정 클래스임을 나타내는 어노테이션

이 클래스는 스프링 컨테이너가 관리할 Bean 정의들을 담고 있는 클래스임을 알려주는 겁니다.

 

 

  • 내부적으로 @Component를 포함하고 있어 컴포넌트 스캔 대상이 됩니다.
  • 클래스 내의 @Bean 메서드들을 호출해서 반환된 객체들을 스프링 컨테이너에 등록합니다.
  • 스프링은 이 클래스를 프록시 방식으로 처리해, 싱글톤을 보장합니다.

예를 들어, 아래 코드는 싱글톤을 깨지 않고 MemberService와 MemberRepository를 공유합니다.

@Configuration
public class AppConfig {
    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

 

💡 @Configuration이 없다면 @Bean 메서드가 호출될 때마다 새로운 객체가 생성될 수 있습니다. (싱글톤이 깨질 수 있음)

 

 


@Bean

@Bean은 메서드에 붙여서 해당 메서드의 반환 객체를 스프링 빈으로 등록하도록 하는 노테이션입니다.

 

  • 일반적으로 @Configuration 클래스 안에서 사용됩니다.
  • XML 설정 대신 자바 코드로 빈을 등록할 수 있게 해줍니다.
  • 메서드 이름이 빈의 이름으로 사용됩니다 (예: memberService → "memberService"라는 이름의 빈 등록)

 

 


@Configuration과 @Bean의 관계

  • @Bean은 객체 하나하나의 등록 단위
  • @Configuration은 이러한 등록들을 묶는 설정 클래스 단위

즉, @Configuration은 여러 개의 @Bean을 담는 컨테이너 역할,
@Bean은 그 컨테이너 안에서 실제로 생성하고 등록할 객체 정의 역할을 합니다.

728x90