간단한 스프링 어플리케이션을 작성하다가 생긴 문제점에 대해 공유하고자 합니다. Static 파일이 아닌 templates 파일에 대해서 컨트롤러에서 아래 예시처럼 경로 앞에 "/"가 포함되는지 여부에 따라 jar에서는 뷰를 찾지 못하는 404 에러가 발생했습니다.
@GetMapping("/users/list")
public String userList(Model model) {
model.addAttribute("user", joinService.lookupAllUser());
return "user/list"; // IDE + Jar에서 문제 없이 작동
}
}
@GetMapping("/users/list")
public String userList(Model model) {
model.addAttribute("user", joinService.lookupAllUser());
return "/user/list"; // IDE에서 작동되나 Jar에서 404 Error 발생
}
}
결론만 말하면 슬래시가 앞에 있는 경우에는 Jar 빌드 파일에서는 경로를 찾지 못합니다. Classpath가 mustache template engine을 사용한 경우 default가 classpath:/templates/로 되어있습니다. 이 경우 위 예시의 아래처럼 뷰를 반환하면
/test/test
classpath:/templates//test/test.html
slash가 중복되어 Mapping이 일어나지 않아 404 에러가 발생하는 것입니다. 다만 IDE에서 빌드 시 컴파일러가 이러한 경로의 오류를 잘 수정해준다고 이해할 수 있을 것 같습니다.
'Spring' 카테고리의 다른 글
Reflection과 Custom Annotation 활용기 2 - @ExceptionHandler 구현하기 (0) | 2023.04.14 |
---|---|
Reflection과 Custom Annotation 활용기 1 - @RequestMapping 구현하기 (0) | 2023.04.12 |
AJAX와 Jquery로 비동기 댓글달기 (0) | 2023.04.04 |
Mock을 이용한 Sliced Test - @WebMvcTest, @JdbcTest (0) | 2023.03.28 |
AOP와 @Transactional 알아보기 (1) | 2023.03.24 |