환경

- 스프링 부트 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"; // 뷰 템플릿의 경로를 반환하되, 맨 앞에 슬래시를 사용하지 말 것
    }
}

컨트롤러에서 반환 값으로 뷰 템플릿 경로를 리턴할 때, 맨 앞에 슬래시를 제거한다!

 

 

참고 : https://dev-jwblog.tistory.com/40