스프링부트만 믿고 개발에 정진해왔다. 그러다가 시연해야할 떄가 되어 젠킨스를 통해서 개발서버에 빌드-배포된 war 파일을 실행하여 테스트하려고 하니 Thymeleaf template engine에서 template file 을 찾지못하는 문제가 발생했다.
이 문제가 왜 생기는지를 고민하고 검색해봐도 별다른 내용을 찾을 수가 없었다.
스프링부트 튜토리얼을 살펴보다가, 컨트롤러 영역에서 조금 다른 차이점을 찾아냈다.
@Controller
public class TestController {
@RequestMapping("/test")
public String test() {
return "test";
}
}
문제가 발생하는 화면의 컨트롤러에서는
@Controller
public class TestController {
@RequestMapping("/test")
public String test() {
return "/test";
}
}
와 같은 형태로 정의가 되어 있는 것이다.
차이를 발견했는가???
저 문제를 찾지 못해서 헤매였다. 1시간여를…. 흙… Orz…
해결방법
return "/test";
을 return "test";
으로 정의하면 된다.
bootRepackage로 빌드된 애플리케이션 배포본은 경로에 민감하게 반응하는 것으로 보인다.
저 ‘/‘ 때문에 ‘/test’ 에 대한 접근이 아니라 ‘//test’로 처리하기 때문에 나타나는 문제가 아닐까 추측해본다.