환경
- 스프링 부트 3.2.5
-OS : Ubuntu 24.04 LTS (GNU/Linux 6.8.0-1008-aws x86_64) (프리티어)
문제 상황
로컬 환경에서 타임리프를 사용한 스프링 부트 프로젝트를 실행할 때는 아무 이상 없이 html 템플릿 파일을 잘 찾아서 아무 문제를 느끼지 못했지만, 실제로 AWS를 통해서 배포할 때 문제가 발생했다.
바로 Error resolving template 오류였다.
이 오류를 해결하기 위해서 GPT와 몇 시간 동안 대화를 하고, 구글링에도 많은 시간을 쏟았다.
결국 원인을 찾았지만, 그 원인은 조금 허무했다.
원인
Thymeleaf에서 "Error resolving template" 오류가 발생하는 경우, 이는 일반적으로 템플릿을 찾거나 로드할 수 없음을 의미한다.
하지만 원인은 타임리프에 있는 것이 아니라, 컨트롤러에 있었다.
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "/index";
}
}
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "index";
}
}
첫 번째 컨트롤러와 두 번째 컨트롤러의 차이가 보이는가?
뷰를 리턴할 때, 맨 앞에 슬래시(/) 유무이다.
왜 그런 것인지는 모르지만, 리눅스 환경에서 뷰 템플릿 파일을 리턴할 때 맨 앞에 슬래시를 사용하면 안된다.
해결 방법
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home/index"; // 뷰 템플릿의 경로를 반환하되, 맨 앞에 슬래시를 사용하지 말 것
}
}
컨트롤러에서 반환 값으로 뷰 템플릿 경로를 리턴할 때, 맨 앞에 슬래시를 제거한다!
'Java Category > 기타' 카테고리의 다른 글
[IntelliJ 오류] Web server failed to start. Port 8080 was already in use. (0) | 2024.03.02 |
---|---|
[IntelliJ] 자주 사용하는 단축키 정리 (1) | 2024.01.24 |
IntelliJ에서 Database(MySQL, Oracle) 연결하기 (0) | 2024.01.09 |
IntelliJ Address localhost 1099 already in use 오류 해결 (0) | 2024.01.08 |
이클립스(Eclipse) 디버그 모드 (1) | 2023.11.18 |
댓글