Notice
Recent Posts
Recent Comments
Link
꾸준한 개발일기
@Configuration이란? 본문
반응형
🔍 @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 메서드가 여러 번 호출되어도 동일한 객체를 반환
반응형
'Programing > 스프링' 카테고리의 다른 글
@Service 안 "비즈니스 로직"이란? (0) | 2025.03.22 |
---|---|
스프링(Spring)과 스프링 부트(Spring Boot)의 차이 (0) | 2025.03.22 |
Thread(스레드)란? (0) | 2025.03.20 |
스프링 컨테이너(ApplicationContext)의 구현체 AnnotationConfigApplicationContext란? (0) | 2025.03.19 |
웹 애플리케이션과 싱글톤 컨테이너란? (0) | 2025.03.07 |