5장 자동구성) 자동 구성이 내부에서 컴포넌트 스캔을 사용하면 안되는 이유
145
작성한 질문수 1
자동 구성이 내부에서 컴포넌트 스캔을 사용하면 안되는 이유가 무엇인가요? 컴포넌트 스캔을 사용하면 패키지 구조에 의존적이게 돼서 그런걸까요?
답변 1
1
안녕하세요, 인프런 AI 인턴입니다. 김민지님.
자동 구성이 내부에서 컴포넌트 스캔을 사용하면 안되는 이유와 관련해 이미 강의와 질문 게시판에서 여러 번 다루어진 주제입니다. 기본적으로 컴포넌트 스캔을 내부에서 사용하는 것은 스프링의 명시적 구성 원칙에 어긋나기 때문입니다. 아래에 유사한 질문과 답변들이 있어 안내드립니다.
관련 질문과 답변
-
- 김영한 님의 답변에 따르면, 자동 구성 클래스 내부에서는 @ComponentScan을 사용하면 안된다고 설명하였습니다. 그 이유는 명시성과 자동 구성의 목적에 어긋나기 때문입니다. @ComponentScan을 사용하면 예상치 못한 빈 충돌이나 오버라이딩 문제가 발생할 수 있고, 스프링에서 빈을 등록하는 순서가 꼬일 수 있기 때문입니다. 대신, 조건부 로직(@ConditionalOnClass, @ConditionalOnMissingBean 등)을 사용하여 필요한 빈이 자동으로 등록되도록 해야 합니다.
- 김영한 님의 답변에 따르면, 자동 구성 클래스 내부에서는 @ComponentScan을 사용하면 안된다고 설명하였습니다. 그 이유는 명시성과 자동 구성의 목적에 어긋나기 때문입니다. @ComponentScan을 사용하면 예상치 못한 빈 충돌이나 오버라이딩 문제가 발생할 수 있고, 스프링에서 빈을 등록하는 순서가 꼬일 수 있기 때문입니다. 대신, 조건부 로직(@ConditionalOnClass, @ConditionalOnMissingBean 등)을 사용하여 필요한 빈이 자동으로 등록되도록 해야 합니다.
ComponentScan과 Configuration 어노테이션을 같이 사용하는 이유
- 해당 질문에서도 단순히 @ComponentScan과 @Configuration을 이용하는 것의 차별성에 대해 설명하였습니다. @Configuration이 속한 클래스는 프록시를 이용해 빈을 관리하는데, 이로 인해 설정이 좀 더 명확해지고 충돌을 방지할 수 있게 됩니다.
- 해당 질문에서도 단순히 @ComponentScan과 @Configuration을 이용하는 것의 차별성에 대해 설명하였습니다. @Configuration이 속한 클래스는 프록시를 이용해 빈을 관리하는데, 이로 인해 설정이 좀 더 명확해지고 충돌을 방지할 수 있게 됩니다.
-
- 이 질문 역시 컴포넌트 스캔에 대한 구체적인 예제와 함께 AutoAppConfig 클래스에 @ComponentScan 어노테이션을 사용해 자동 빈 등록에 대해 다루고 있습니다. 이로 인해 개발자가 직접 빈을 등록하는 수고를 덜어줄 수 있다고 설명하였습니다.
- 이 질문 역시 컴포넌트 스캔에 대한 구체적인 예제와 함께 AutoAppConfig 클래스에 @ComponentScan 어노테이션을 사용해 자동 빈 등록에 대해 다루고 있습니다. 이로 인해 개발자가 직접 빈을 등록하는 수고를 덜어줄 수 있다고 설명하였습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
보안이 엄격한 데이터
0
73
1
MyProperties 자체를 클라이언트 코드에서 사용
1
43
1
http://localhost:8080/actuator/prometheus
0
85
3
jar 추가에대한 질문드려도될까요?
0
64
1
build.gradle bom link 변경
0
65
2
@Counted 초기화
0
48
1
@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..
0
101
2
springboot에서 actuator없이 micrometer를 사용할수 있나요?
0
67
1
@Configuration 질문드립니다.
0
84
2
[공유] 터미널 말고 IDE 에서 jar 실행하기
0
101
1
localhost:8080/hello-servlet 404오류
0
123
2
내장톰캣2 서블릿 톰켓 실행이 안됩니다
1
154
2
최대 Tomcat 스레드 수를 확인하는 지표
0
160
1
mac m2에서 startup.sh 실행후 아무 반응이 없습니다.
0
94
2
내장 톰캣 실행 오류 관련 질문드립니다.
0
158
1
스프링 발전 과정들도 자세히 알아둬야하나요??
1
127
1
스프링부트 ioc 컨테이너 갯수
0
89
1
404 페이지
0
133
3
actuator 호출시 타임스탬프 질문
0
90
1
순수 라이브러리 사용하기 2 - memory-v1
0
125
1
외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.
0
105
1
서블릿 컨테이너 초기화1 강의 관련 질문입니다~
0
94
1
Thread Config Max 패널 설정 변경 질문
0
128
1
스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.
0
108
1





