스프링에서 한글이 깨지는 경우는 3가지이다.
브라우저에서 입력시 제대로된 인코딩으로 입력을 받았는가?
컨트롤러에서 핸들링시 제대로된 인코딩으로 핸들링 했는가?
데이터베이스에 들어갈때 제대로된 인코딩으로 들어갔는가?
먼저 브라우저에서 입력시 제대로 인코딩되어 입력이 됫는지 확인하려면 브라우저의 디버그 모드를 이용하면 된다
위와 같이 폼데이터에서 잘 보이면 브라우저 입력시 깨진것이 아니다.
만약 브라우저에서 봤을때 깨져있다면 문서 인코딩 타입을 확인해야한다
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
두번째로 컨드롤러에서 문제가 생긴 경우이다.
이경우 로그로 확인을 할 수 있다.jdbc 바인드 데이터 로깅을 log4j로 로깅을 해놨다면 sql문에 아래와 같이 이미 깨진채로 DML이 일어날 것이다.
컨트롤러에서 인코딩 문제가 생겼을시는 인코딩을 위한 필터를 추가해주면 된다.
<!-- utf-8 filter -->
<filter>
<filter-name>encoding</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>encoding</filter-name>
<servlet-name>appServlet</servlet-name>
</filter-mapping>
마지막으로 데이터베이스에서 인코딩이 안맞는 경우이다. 위 두개가 문제가 없으면 디비에서 인코딩이 안맞는경우다. 디비 인코딩을 맞춰주면 된다.