스프링에서의 POST/GET 한글처리

springmvc.egloos.com/513986

스프링을 사용하면서 얻을 수 있는 가장 큰 이점 중 하나는 매번 개발자들이 골칫거리였던 한글처리가 매우 용이하고 간편하다게 변했다는 점이다. 물론 한글 뿐만이 아니라 UTF-8에서 지원하는 모든 국제어 사용이 자유로우며 POST/GET방식 양쪽 다 처리가 능수능란하게 처리가 가능하다. 이게 정녕 스프링을 이용해서 얻는 이점인지, 아니면 필자가 몰랐던 한글 처리 방법인지는 잘 모르겠지만 최소한 스프링을 모르기 전 서블릿과 JSP로 무식하게 MVC 코드를 짰던 순간과 비교하면 정말 행복에 겨워 눈물이 날 지경이다.

먼저 EUC-KR로 문서를 인코딩할 바에야 UTF-8로 문서를 인코딩하는 것이 나으므로 이클립스에서 모든 문서가 UTF-8로 생성될 수 있도록 설정을 바꿔주도록 하자.

Window > Preferences > General > Workspace 
하단 좌측 Text file encoding = Other: UTF-8 
변경

이 설정을 하면 현재까지 작성했던 모든 문서가 UTF-8로 인코딩되며 앞으로 작성될 문서들도 UTF-8로 인코딩되어 작성되게 된다. 만약 이 설명을 하기 전에 한글로 작성한 파일이 있다면 미리 백업해두길 바란다. UTF-8로 인코딩이 변경되면 기존에 있던 한글이 깨져서 나올 수도 있다.

첫번째로 POST방식의 한글 처리를 해결해보도록 하자. 사실 필자의 부끄러운 과거에는 GET방식의 한글 처리법을 할 줄 몰라 대부분의 데이터 전송을 POST로만 전송했던 과거가 있었다. GET에 비해 POST 방식은 ContentType만 설정해도 간단히 인코딩할 수 있었기 때문에 필자는 보안을 핑계 삼아 꾸역꾸역 데이터를 POST으로만 보냈었는데 지금 생각해보면 참 바보같은 짓이었다. 덕분에 사용자들은 즐겨찾기의 즐거움과 네비게이터의 활용을 만끽하지 못했고 말이다 :(


POST에서 한글처리

스프링에서 POST 전송방식의 UTF-8 인코딩은 정말 간단하다. web.xml에 스프링이 제공하는 CharacterEncodingFilter를 걸어주면 끝이다.

<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value> 
</init-param> 
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

CharacterEncodingFilter는 Http상에서 주고받는 데이터의 헤더값을 UTF-8로 인코딩 해줌으로서 다국어 지원을 보장해준다. 매핑할 때 위와 같이 모든 URL에 인코딩 될 수 있도록 적용해주었는지 다시 한번 확인해보자. 제대로 확인하였다면 이제 우리는 앞으로 헤더값으로 주고받는 데이터들에 대해서는 한글의 사용을 보장받을 수 있게 되었다.


GET에서 한글처리

GET에서 한글 처리는 POST와는 조금 다르다. 왜냐하면 POST에서는 헤더값으로 통해 데이터를 주고받기 때문에 서블릿에서 어느 정도 컨트롤이 가능하지만 GET은 URL에 직접 데이터를 추가하여 전송하는 방식이기 서블릿의 영역 밖에 존재한다. 그러므로 GET을 통해 한글을 데이터를 받고자 할 때는 서버에서 직접 URL을 UTF-8로 인코딩할 수 있게끔 설정해 주어야 한다.

이클립스에서 제공하는 실행도구를 이용해 톰캣을 기동시키고 있다면 다음과 같은 위치에서 Server.xml을 찾을 수 있다.

만약 실행도구로 톰캣을 실행시키지 않는다면 직접 [CATALINA_HOME]\conf 경로로 찾아가 Server.xml 파일을 열어주도록 하자. 우리가 Server.xml에서 추가해줘야 할 부분은 다음과 같다.

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

위의 두 요소에서 굵은 글씨 부분을 추가해주면 된다. 위에는 8080포트에서 들어오는 URI요청을 인코딩해주고 아래는 8009포트에서 보내지는 요청을 인코딩해준다. 보통 8080 포트를 많이 사용하므로 위에만 추가해줘도 되지만 만약을 대비하여 아래의 커넥터에도 인코딩 속성을 추가해주도록 하자.

이제 모든 설정이 끝났다. 정말 쉽고 간단하지 않은가? 과거 서블릿에서 HttpServletRequest와 HttpServletResponse에 일일이 인코딩 설정을 달아주고 유니코드 메서드까지 만들어가며 힘겹게 GET을 인코딩하던 시절은 이제 머나먼 옛날 일이다.

출처 : http://springmvc.egloos.com/viewer/513986

+ Recent posts