Tag Archives: UTF-8

Spring Boot에서 UTF-8기반 한글 설정하기

spring_logo

기본적으로 스프링 부프 프로젝트를 시작해 보면 한글이 제대로 입/출력 되지 않는 문제에 봉착하게 됩니다. 단순하게 RestController만 사용하거나 HTML의 컨텐츠 헤더를 잘 조합하여 사용하면 한글을 문제 없이 사용할 수 있게 되지만 다음의 방법을 사용하여 프로젝트가 전체적으로 한글이 정상적으로 동작하도록 할 수 있습니다.

기존의 프로젝트에 responseBodyConverter와 characterEncodingFilter를 Bean으로 등록해 주시면 작업은 끝납니다.

package utf8;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.filter.CharacterEncodingFilter;

import javax.servlet.Filter;
import java.nio.charset.Charset;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public HttpMessageConverter<String> responseBodyConverter() {
        return new StringHttpMessageConverter(Charset.forName("UTF-8"));
    }

    @Bean
    public Filter characterEncodingFilter() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        return characterEncodingFilter;
    }
}

responseBodyConverter는 결과를 출력시에 강제로 UTF-8로 설정하는 역할을 하며 characterEncodingFilter는 POST 요청시에 한글이 깨지는 문제를 보완해줍니다.

참고 :

[Eclipse + Tomcat] UTF-8 한글 환경 적용하기.

톰캣 서버를 사용하는 경우 로컬에서 잘 작동하는 어플리케이션을 실제 서비스 하는 서버에 올렸더니 GET방식으로 받는 파라미터관련하여 한글을 제대로 인식하지 못하는 경우가 발생하였습니다.

심지어는 다음과 같은 코드가 들어가도 한글을 제대로 인식하지 못하더군요.

[code]request.setCharacterEncoding(“UTF-8”);[/code]
Spring Framework의 org.springframework.web.filter.CharacterEncodingFilter를 사용하여도 한글이 적용이 안되는 부분이 발생합니다.

보통의 경우 이 문제를 해결하기 위해 다음과 같은 방법을 사용합니다.
[code]String param = new String(request.getParameter(“param”).getBytes(“8859_1”), “UTF-8”);[/code]

하지만 위와같은 방법은 또다른 문제를 야기합니다. Ajax통신을 사용할 때 발생하더군요.
윈도우 운영체제기반의 개발환경, 리눅스 서버와 같이 서버 환경이 틀리면 로컬에서는 잘 작동하는데 서버에서는 안되고, 서버에서는 잘되는데 로컬에서는 안되는 문제가 발생합니다.

그럴때는 그냥 간단하게 개발 환경을 서버와 동일하게 해주시면 됩니다.
설치한 아파치의 server.xml의 설정의 Connector 설정에 URIEncoding=”UTF-8″ 설정이 들어가게 되면 이 모든 문제가 해결됩니다. 물론 서버에도 동일한 설정이 되어있다는 가정하게 말씀드리는 것입니다.^^;
1276041024.xml톰캣을 설치한 위치의 server.xml을 위의 파일로 변경하신 후에, 이클립스의 Server들을 모두 삭제하고 다시 추가해 주시면 바뀐 설정으로 적용되어 추가됩니다.

사용자 삽입 이미지
org.springframework.web.bind.ServletRequestUtils을 사용하면서 한글 문제가 아쉬웠는데 굳이 소스를 커스터마이징하거나 추가적인 코드 없이 자연스럽게 UTF-8환경의 한글을 작은 문제도 없이 사용가능합니다.