이번에 회사의 Spring Legacy (= spring boot 사용 안하는 환경) 프로젝트에 있는
jsp 기반의 Template Engine 을 쓰는 코드를 모두 Thymeleaf 로 변경하려고 계획 중입니다.
이를 위해서 사전에 어떻게 Thymeleaf
를 레거시 프로젝트에 적용할 수 있는지 조사했고,
그 방법을 깃허브에 올려서 공유합니다.
github repository :
https://github.com/CodingToastBread/spring-6-legacy-web.git
주의할 점은 java 21
, tomcat 10.1.x
, spring-web 6
을 사용한다는 겁니다.
일하는 곳에서 이렇게 업그레이드 해서 저도 똑같이 맞췄습니다.
핵심적으로 봐야할 곳은
spring-web-legacy/src/main/webapp/WEB-INF/servlet-context.xml
경로에 있는 아래 설정들입니다.
<!--thymeleaf -->
<!-- https://www.thymeleaf.org/doc/tutorials/3.1/thymeleafspring.html
- 2 The SpringStandard Dialect 목차 참고 -->
<bean id="templateResolver"
class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/templates/" />
<property name="suffix" value=".html" />
</bean>
<bean id="templateEngine"
class="org.thymeleaf.spring6.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean>
<bean class="org.thymeleaf.spring6.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<property name="contentType" value="text/html"/>
<property name="characterEncoding" value="UTF-8" />
</bean>
Java 설정으로는 아래와 같습니다.
@Configuration
public class WebConfiguration extends WebMvcConfigurationSupport {
/* ...생략... */
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setPrefix("/WEB-INF/templates/");
resolver.setSuffix(".html");
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine(SpringResourceTemplateResolver templateResolver) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
@Bean
public ThymeleafViewResolver thymeleafViewResolver(SpringTemplateEngine templateEngine) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine);
resolver.setContentType(MediaType.TEXT_HTML_VALUE);
resolver.setCharacterEncoding(StandardCharsets.UTF_8.toString());
return resolver;
}
}
그리고 이를 위한 maven dependecy 는 아래 2개를 꼭 넣어줘야 합니다.
<!-- Web > Template Engine -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring6</artifactId>
</dependency>
테스트해보고 싶으신 분들은 WEB-INF/templates
경로에 html 생성하고,
그에 맞는 Controller 를 생성하여 조작해보시면 되겠습니다.