행복한 아빠

Tomcat 한글 Encoding 문제 본문

문제발생시

Tomcat 한글 Encoding 문제

행복한아빠 2008. 3. 24. 19:41

사용자 삽입 이미지

예전부터 느끼지만 상용 WAS에 비해 Tomcat를 사용할 때마다 한글처리에 대해 신경쓸 것이 많았다.
지금은 그래도 많이 좋아졌지만 이번에도 한글문제가 발생해 이리 저리 또 찾아봐야 했다.

현상

어떤 때는 한글 처리가 되고 어떤 때는 한글 처리가 안되어 분석해 보니 POST 방식으로 전달하는 한글은 잘 처리되지만 GET 방식으로 전달하는 한글은 처리를 못하였다.

그럼 모두 POST로 한글을 전송? 음.. 이건 말도 안된다. RESTful하지도 않고 근본적인 해결방법이 아니다.


해결방법

tomcat 문서를 살펴보면 HTTP body의 입력 스트림은 기본으로 UTF-8을 이용하여 디코딩한다. 반면 URL은 ISO-8859-1으로 디코딩한다.
브라우저에서 Form 데이터는 기본설정으로 UTF-8 인코딩하므로 Form으로 전송되는 POST는 문제가 없었던 것이다. 그럼 tomcat의 설정에서 URL 인코딩 방법을 변경하기만 하면 문제는 해결된다.

conf/server.xml 에 다음과 같은 부분에 아래와 같이 URIEncoding을 UTF-8로 설정한다.
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8"/>

아파치와 연결하기 위해 mod_jk를 사용할 경우 mod_jk 설정부분에도 위와 동일하게 적용한다.
<Connector port="8009" protocol="AJP/1.3" URIEncoding="UTF-8"/>


전제조건

물론 URL상의 모든 문자들은 UTF-8로 인코딩되어 있어야 하고 이는 WWW 컨소시엄의 권장사항이다.
다음과 같은 문자를 인코딩하려면 아래와 같이 하고 (JSP의 경우)

<a href="show.xhtml?p=<%=java.net.URLEncoder("넥스트리소프트", "UTF-8")%>">넥스트리</a>

아래와 같이 렌더링 될 것이다.

<a href="show.xhtml?p=%EB%84%A5%EC%8A%A4%ED%8A%B8%EB%A6%AC">넥스트리</a>

물론 대부분의 웹 프레임워크들의 장치를 이용하면 이러한 인코딩은 알아서 해 주겠지만...




5 Comments
댓글쓰기 폼