Spring Boot: Velocity 한글깨짐(Encoding) 문제
스프링부터SpringBoot를 이용한 프로젝트에서 TemplateViewEngine으로 Velocity를 선택했다.
@Bean
public ViewResolver viewResolver() {
VelocityViewResolver viewResolver = new VelocityViewResolver();
viewResolver.setPrefix("classpath:/templates");
viewResolver.setSuffix(".vm");
viewResolver.setOrder(Ordered.LOWEST_PRECEDENCE - 20);
return viewResolver;
}
이 설정만 해서는 Velocity가 인코딩 설정을 제대로 하지 못한다.
스프링부트 설정에 application.yml을 이용했다. YAML을 설정DSL로 채택했는데, 설정이 무척 간결해진다.
Velocity와 관련된 설정은
spring:
velocity:
properties:
input.encoding: UTF-8
output.encoding: UTF-8
다음과 같이 해주면, Velocity 스프링 설정은 끝.
혹은 별도로 Velocity에 관한 설정을 하는 방법은 다음과 같다.
1. velocity.properties 를 이용하거나
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="configLocation" value="classpath:/velocity.properties"/>
</bean>
resource.loader = file
file.resource.loader.description = Velocity File Resource Loader
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = .
file.resource.loader.cache = false
file.resource.loader.modificationCheckInterval = 2
input.encoding=UTF-8
output.encoding=UTF-8
2. 스프링 빈 설정을 하면 된다.
스프링 빈으로 설정하는 방법은
1. JavaConfig 빈 설정
@Bean
public VelocityConfigurer velocityConfigurer() {
VelocityConfigurer configurer = new VelocityConfigurer();
configurer.setResourceLoaderPath("classpath:/templates");
Properties properties = new Properties();
properties.setProperty("input.encoding", "UTF-8");
properties.setProperty("output.encoding", "UTF-8");
configurer.setVelocityProperties(properties);
return configurer;
}
2. XML 빈 설정
<bean id="velocityConfigurer" class="import org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="classpath:/~~"/>
<property name="velocityProperties">
<props>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
</props>
</property>
</bean>
두 가지 방법이 있다.
그냥 벨로시티를 사용하기 싫었는데...