@ComponentScan 과 그 범위

HyunJunSon·2024년 4월 30일
0

문제상황

  • 새로운 Springboot project를 생성해, 테스트용으로 TestController를 @RestController로 간단히 생성후, 요청 했는데 404 에러가 발생.
  • 404 에러의 경우 URL 맵핑이 안되고 있다는 말인데, Controller는 분명히 존재...
  • 이 문제로 한참을 고민하다 찾아낸 원인은, @SpringBootApplication 의 ComponentScan의 범위가 문제였다.

해결책

  • @SpringBootApplication 내부에는 @ComponentScan이 존재해서 당연히 @RestController 내부의 @Component를 인식해 빈등록을 시도한다.
    • 문제는 이 스캔의 범위가 SpringBootAplication 가 포함된 패키지 내부로 한정된다는 것이다.
  • 즉 위 문제상황에서 패키지 외부에 Controller class를 생성했기 때문에, Controller의 빈 등록 자체가 되지 않았고, 따라서, 요청을 보내면 Controller가 존재하지 않기 때문에 존재하지 않는 URL 에러(404)가 발생한 것이었다.

얻은 Tip

  • 클래스를 만들때, 항상 componentScan의 범위를 의식하자.
@CompoentScan(
	basePackages = "basic.server",
)
  • component scan의 범위는 변경할수 있다.
  • 기본 디폴트는 @ComponentScan이 붙은 설정정보 클래스( 여기서는 @SpringBootApplication)의 하위로 설정되어 있다.
  • 설정범위 밖의 Component는 @Import를 통해 빈등록을 해줄수도 있다.
profile
즐겁게 공부하고 사람들에게 도움을 주는 개발자가 되고 싶습니다.

0개의 댓글