오늘은 Spring Boot 버전 3.1.0과 3.3.4에서 정적 페이지를 컨트롤러를 통해 반환하는 방법의 차이를 발견하고 해결한 내용을 기록한다.
hello.html
파일을 static
폴더에 저장하고, 컨트롤러에서 이를 반환하도록 아래와 같은 코드를 작성했다.package com.sparta.springmvc.html;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HtmlController {
@GetMapping("/static-hello")
public String hello() {
return "hello.html"; // 이 문자열에 부합하는 페이지를 찾아서 반환한다.
}
}
http://localhost:8080/static-hello
경로로 접근하면 hello.html
이 화면에 출력됨.hello.html
을 찾지 못하고 500 에러를 발생시킨 것으로 판단된다.Thymeleaf 의존성 추가: 가장 간단한 해결책은 Thymeleaf 의존성을 다시 추가하는 것.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
이 경우, 컨트롤러에서 반환되는 뷰 파일을 src/main/resources/templates
폴더에 위치시키고 return "hello";
로 간단히 처리할 수 있다.
ViewResolver 직접 설정: Thymeleaf를 사용하지 않고도 컨트롤러를 통해 HTML 파일을 반환하려면, WebMvcConfigurer
를 구현하여 ViewResolver를 직접 설정하는 방법이 있다.
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/static/", ".html");
}
}
이렇게 하면 static
폴더에 있는 .html
파일을 컨트롤러에서 반환할 수 있다.
이를 통해 스프링 부트 버전별 동작 차이를 이해하고 해결할 수 있었으며, 의존성이나 설정의 중요성에 대해 다시 한번 깨닫게 되었다.