티스토리 뷰

반응형

[문제 상황]

Controller.java에 requestMapping 해둔 URL을 찾지 못함

 

 

[원인]

Component Scan을 통한 Bean 등록이 정상적으로 이뤄지지 않음

 

 


 

 

[조치 내용]

스프링 부트 어플리케이션 실행 시 Component Scan이 이뤄지는데, @ComponentScan 어노테이션을 이용해 scan 시작지점 및 Bean으로 등록하지 않을 클래스를 설정할 수 있다.

 

@ComponentScan 어노테이션을 이용해 별도로 지정하지 않는 경우,  해당 spring boot project의 시작지점인 Application.java 파일이 위치한 패키지가 기본 값으로 사용된다.

 

나의 경우 @ComponentScan 어노테이션으로 지정한 내용은 없었고, 패키지 구조가 잘 못 되어있어서 Component Scan이 정상적으로 이뤄질 수 있도록 패키지를 아래와 같이 변경했으며, URL 호출 시 정상 작동을 확인했다.

 

com
  +- myproject
      +-Application.java (annotated with @SpringBootApplication)
       |
      +-controller
           +-MainController.java
       |
      +-service
           +-MainService.java
       |
      +-mapper
           +-MainMapper.java

 

Component Scan은 다음 어노테이션이 붙어있는 클래스를 Bean으로 등록하기 때문에 아래 어노테이션을 용도에 맞게 제대로 명시해두었는지도 확인하면 좋다.

 

@Repository

@Component

@Service

@Controller

@RestController

@Configuration

 

추가로, @ComponentScan 어노테이션을 이용해 scan을 설정하는 내용은 프로젝트에 적용 및 상세내용 학습 후 정리할 계획이다.

 

 

 

[참고 사이트]

  : http://dveamer.github.io/backend/SpringBootAutoConfiguration.html

  : https://sodocumentation.net/spring-boot/topic/9354/package-scanning

 

 

반응형