꾸준한 개발일기

@Configuration이란? 본문

Programing/스프링

@Configuration이란?

꾸개일 2025. 3. 21. 08:00
반응형

🔍 @Configuration이란?

@Configuration스프링의 설정 파일을 정의할 때 사용하는 애노테이션
즉, 이 클래스를 스프링 컨테이너에서 설정 정보를 담고 있는 클래스로 인식하게 해 준다


📌 @Configuration을 사용해야 하는 이유

1️⃣ 스프링 빈(Bean) 등록을 위한 설정 클래스

  • @Bean 애노테이션을 사용해 스프링 컨테이너에 빈을 등록하는 클래스임을 명시한다.
  • @Configuration이 붙은 클래스는 스프링이 자동으로 관리하는 설정 클래스가 된다.

2️⃣ 싱글톤을 보장하기 위해 사용됨 (CGLIB 프록시 사용)

스프링 컨테이너는 기본적으로 싱글톤 패턴을 적용하여 같은 객체를 공유한다
@Configuration을 사용하면, 싱글톤이 보장되도록 내부적으로 CGLIB 프록시를 적용한다.

 

💡 @Configuration이 없는 경우 싱글톤이 깨지는 문제

@Configuration
public class AppConfig {
    @Bean
    public MemberRepository memberRepository() {
        System.out.println("call AppConfig.memberRepository");
        return new MemoryMemberRepository();
    }
}

 

💡 내부적으로 @Configuration을 적용하면 다음과 같이 동작함

@Bean
public MemberRepository memberRepository() {
    if (이미 등록된 빈이 있다면) {
        return 기존의 빈을 반환;
    }
    return new MemoryMemberRepository();
}

즉, 스프링이 중복 생성되는 것을 방지하고 싱글톤을 유지하도록 보장한다.

반면 @Configuration이 없으면, @Bean 메서드가 호출될 때마다 새로운 객체가 생성되어 싱글톤이 깨지는 문제가 발생할 수 있다.


결론: @Configuration을 반드시 사용해야 하는 이유

1️⃣ 설정 클래스로 인식되어 스프링 빈 등록이 가능해짐
2️⃣ 내부적으로 CGLIB 프록시를 사용하여 싱글톤을 보장
3️⃣ @Bean 메서드가 여러 번 호출되어도 동일한 객체를 반환

 

반응형
Comments