환경
- 스프링 부트 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"; // 뷰 템플릿의 경로를 반환하되, 맨 앞에 슬래시를 사용하지 말 것
}
}
컨트롤러에서 반환 값으로 뷰 템플릿 경로를 리턴할 때, 맨 앞에 슬래시를 제거한다!
'Cloud > AWS' 카테고리의 다른 글
[AWS + SpringBoot] 시간대 설정하기 (0) | 2024.09.20 |
---|---|
[AWS] Mac 에서 터미널로 EC2 접속 (0) | 2024.09.04 |
[AWS, JPA, MySQL] Table doesn't exist (0) | 2024.06.30 |
[AWS EC2] 프리티어 인스턴스 사용시 Gradle build 시 무한 로딩 오류 (0) | 2024.06.30 |