inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

토비의 스프링 부트 - 이해와 원리

@Component 스캔

@ComponentScan과 @Configuration

해결된 질문

697

박정용

작성한 질문수 1

4

 안녕하세요! 좋은 강의 너무 감사하고 잘 듣고 있습니다.

이번 수업을 듣던 중에 @ComponentScan 애노테이션과 @Configuration 애노테이션을 함께 사용하는 이유가 궁금해서 찾아봤습니다.

찾아본 결과는 다음과 같습니다.

@Configuration 애노테이션이 없는 경우 Spring에서 구성정보를 제공하지 않는다는 것을 의미하기 때문에 @ComponentScan이 스캔할 패키지 내에서 Bean으로 등록할 클래스를 찾지 않는다.

저는 @ComponentScan이 해당 애노테이션이 달린 패키지부터 하위 패키지까지 @Component 애노테이션이 달린 모든 클래스들을 빈으로 등록해주는 역할을 한다고 생각했는데, 위가 아니라 @ComponentScan@Component 애노테이션이 달린 모든 클래스들을 찾고 @Configuration이 해당 클래스들을 빈으로 등록해주기 때문에 같이 사용한다로 이해해도 될까요?

spring spring-boot

답변 1

8

토비

@Configuration이 붙은 클래스는 스프링의 빈으로 등록되면서 각종 자바코드 구성정보(@Bean 메소드)와 부가 애노테이션을 스프링 컨테이너가 인식할 수 있게 만들어줍니다.

@ComponentScan은 그런 부가 애노테이션 중의 하나로 @Component 애노테이션이 붙은 클래스를 자동으로 빈으로 등록해주는 기능을 제공합니다.

@Configuration은 @ComponentScan의 기능을 완성해주거나 도와주는 것이 목적이 아닙니다. 따라서 이해하신 내용은 맞지 않습니다. 단지 @ComponentScan은 @Configuration이 붙은 클래스에 사용해야 스프링 컨테이너가 인식할 수 있다고 생각하시면 됩니다.

이게 조금 헷갈릴 수 있는 건, @Configuration도 결국 @Component가 붙은 애노테이션인데, @ComponentScan이 먼저 동작하지 않으면 최초 @Configuration 클래스는 어떻게 빈으로 등록되는가? 이게 순서가 헷갈릴 수 있겠죠. @ComponentScan이 불은 @Configuration 클래스도 @ComponentScan이 동작해서 빈으로 등록이 되는데, @Configuration 클래스가 빈으로 등록이 안 되면 @ComponentScan을 스프링이 인식을 못합니다. 결국 영원히 인식되지 않는 코드가 될 것처럼 보이죠. 이건 강의 앞부분에 나온 것처럼 메인 @Configuration 클래스를 한번 스프링에 직접 register 해주는 작업을 하기 때문에 가능한 것입니다. 최초 @Configuration 클래스는 @ComponentScan의 도움 없이도 빈으로 일단 등록이 되고, 등록된 빈에 @ComponentScan이 붙어있으니 나머지 클래스들은 @ComponentScan에 의해서 등록이 되는 것이죠. 그 나머지 클래스 중에 또 @Configuration이 붙은 클래스도 있을 수 있습니다.

 

0

박정용

정성스러운 답변 너무 감사합니다!

0

Seunghoon Choi

궁금했던 내용인데 감사합니다.

스프링 컨테이너를 구성하기 위한 @Configuration@ComponentScan 유무에 상관없이 최초 1회는 필수라는 뜻이네요.

11강에서 cmd에서 spring shell에 $ init 하면 Fail 메세지

0

77

2

TestRestTemplate 을 통해 테스트 실행시 웹 요청 정보가 콘솔에 표시되지 않습니다.

0

86

1

섹션7. 자동구성 정보파일분리 강의 질문(@MyAutoConfiguration 붙힌 이유)

0

202

2

WebApplicationContext를 DispatcherServlet에 this로 넘기는 것

0

279

2

인프라 빈 구성 정보의 분리에서 EnableMyAutoConfiguration 질문드립니다.

0

211

2

질문드립니다.

0

234

2

spring boot 3.3.7로 학습중입니다.

0

372

2

Serverproperties 객체 생성 후 @Impor 어노테이션 사용 이유 용도

0

162

2

spring start io 에서 이제더이상 2.x버전은 지원하지 않는 것 같습니다.

1

299

2

Springboot 3.2 이상에서 파라미터 추론관련

0

920

4

binding error

0

223

3

Arrays.copyOf 메서드의 타입 세이프

1

156

2

MyOnClassCondition에 있는 matches method의 Invoke 횟수

1

234

3

인용구의 출처가 궁금합니다.

0

260

1

프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용

0

236

2

SimpleCacheConfiguration과 빈 등록

0

169

2

MyAutoConfigImportSelector 에서 생성자로 ClassLoader를 주입받을 수 있는 점

0

244

1

IntelliJ project jenerator spring initailizr

0

150

1

강의 자료 레퍼지토리에 업로드

0

216

1

강의자료

0

388

1

Hikari 라이브러리가 없으면 오류가 나는거 아닌가요

0

315

2

Tomcat 포트 프로퍼티 미설정시 랜덤 포트 설정 문의

0

477

5

@Import 로 Bean을 등록해야하는 기준이 뭔지 궁금합니다.

0

344

2

application.properties파일내 프로퍼티 이름

0

214

1