개발공부/Spring Boot

[SpringBoot] Controller를 찾지 못하는 상황

환타몬 2023. 2. 16. 09:58

개발 환경

IntelliJ 2022.3.1

java 11

SpringBoot

jsp

gradle

+ 전자정부프레임워크

 

문제 상황

보통의 상황의 경우, perperties에서 경로 설정을 완료하고 jsp템플릿을 사용할 수 있도록 gradle에 dependency를 추가해준다면 컨트롤러를 타고 정상적인 출력이 가능할 것이다. 

나의 경우 /home을 타면 webapp/WEB-INF/views/test.jsp를 타도록 경로를 설정했다.

 

여기서 src/main/webapp/WEB-INF 까지는 기본경로라 변경해서는 안된다. 

 

아래는 나의 경로와 Controller 상황이다.

 

- application.properties

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

이런 상황에서 /home 경로를 타게 된다면 아래와 같은 페이지를 반환하고, Test start라는 로그를 띄우지 않는데, 이는 즉 Controller를 타지 않는다는 상황인 것 같다.

 

해결

 

Contoller가 위치한 경로는 메인클래스의 하위에 존재해야 했다 .. 그래서 메인클래스의 하위에 넣어줬더니 정상적으로 실행되는 모습이다. 

 

 

 

왜 이런 상황이 발생했는가 .. 를 알아보게 되었다. 나는 아래 블로그의 도움을 받았다.

 

https://cceeun.tistory.com/183 

 

Spring에서는 xml설정파일에서 <context:component-scan> 을 설정해주지 않는다면 컨테이너가 컨트롤러를 빈으로 등록하지 않는다고 한다.

 

SpringBoot는 이 작업을 자동으로 해주고 있는데, 문제는 시작점 즉 root의 문제라고 한다. 

 

@SpringBootApplication Annotation이 붙은 곳이 시작점이다.

@Configuration, @EnableAutoConfiguration, @ComponentScan 이 세가지의 어노테이션이 하나로 합쳐진 것이다.

 

각각의 어노테이션들은

 

 

@Configuration : 해당 클래스가 설정 파일임을 알려주는 용도

@EnableAutoConfiguration : 스프링의 다양한 설정이 자동으로 구성되고 완료됨

@ComponentScan : 자동으로 컴포넌트 클래스를 검색하여 컴포넌트와 bean 클래스를 Spring Appliocation Context에 등록함.

 

여기서 ComponentScan 의 역할이 수행되지 않기 때문에 Bean으로 등록되지 않는다고 한다.

 

오늘도 유익한 것을 배워간다.