문제상황
- 새로운 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를 통해 빈등록을 해줄수도 있다.