Thymeleaf 란?
Thymeleaf(타임리프)는 modern server-side Java Template Engine 이다.
시간이 없어서 쉽게 말하자면 Spring 에서의 컨트롤러와 그에 대응하는 View Page(.html, .jsp) 을 이어주는 역할을 한다.
Spring Boot 에서 Thymeleaf 연동
Spring Boot 에서는 어노테이션, Java Code 기반으로 손쉽게 Thymeleaf 를 연동할 수 있다.
- ContextConfig.java
package com.nexon.quicksample.core.config;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
@Configuration
public class ContextConfig implements WebMvcConfigurer {
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(thymeleafTemplateResolver());
return templateEngine;
}
@Bean
public ClassLoaderTemplateResolver thymeleafTemplateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/"); // 모든 뷰 페이지는 /resources/templates/ 내부에서 검색한다.
templateResolver.setSuffix(".html"); // 모든 뷰 페이지는 .html 이다.
templateResolver.setTemplateMode("HTML"); // HTML 형식으로 읽는다.
templateResolver.setCacheable(false); // 캐싱하지 않는다.
return templateResolver;
}
}
Spring 에서 Thymeleaf 가 정상적으로 연동될 수 있도록 기본적인 옵션을 설정하고, 이를 Bean 으로 등록하여 모든 컴포넌트에서 불러올 수 있도록 한다.
테스트
간단한 비즈니스 로직과 함께 Thymeleaf 를 연동하여, Thymeleaf 의 실행 여부를 확인하자.
- HomeController.java
package com.nexon.quicksample.home;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/")
public class HomeController {
@RequestMapping("/thymeleaf")
public String thymeleaf() {
System.out.println("HomeController:thymeleaf");
return "thymeleaf"; // /resources/templates/"thymeleaf.html" 을 뷰 페이지로 반환한다.
}
}
- /resources/templates/thymeleaf.html
<html>
<head>
<title>Thymeleaf Page</title>
</head>
<body>
Thymeleaf 가 연동된 html 페이지 입니다.
</body>
</html>
이후 Controller 에서 설정한 URL 로 접근하여 thymeleaf.html 페이지로 연결이 되는지 확인한다.