본문 바로가기
IT 공부/자바와 웹 애플리케이션

[스프링] 한글 깨짐 문제의 원리와 해결

by exdus3156 2024. 1. 8.

쿼리 스트링이나 POST의 body 파라미터로 한글 데이터를 전달하면 자바 애플리케이션 내부에서 한글이 깨져버린다. 

 

[자바] - 한글이 깨지는 문제의 원리

1. 문자열과 인코딩 문자열을 다루기 위해서는 인코딩(encoding)에 예민해야 한다. 컴퓨터는 0과 1로 이루어진 비트를 기반으로 정보를 처리한다. 따라서 컴퓨터로 유용한 일을 하기 위해서는 0과 1

linocraft.tistory.com

한글이 깨지는 원리는 위 링크에 포스팅했다. 다만 이것은 인코딩과 관련된 일반적인 문제의 원리를 다루므로 구체적으로 스프링에서 한글이 깨지는 근거는 아래의 링크에서 찾을 수 있다.

 

 

[서블릿] - ServletRequest의 Character Encoding을 utf-8로 설정해야 하는 이유

1. 서블릿 Request 인코딩 문제 @WebFilter(urlPatterns = { "/*" }) public class UTF8Filter extends HttpFilter { @Override protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException

linocraft.tistory.com

핵심 원인은 서블릿 스펙이 ISO-8859-1로 인코딩했던 HTTP의 과거 스펙에 여전히 의존하기 있기 때문에 발생한다. 스프링에서 한글이 깨지는 원리가 이것이다.

만약 스프링 없이 단독으로 서블릿 컨테이너를 사용하는 경우, 위 링크에 있는 필터 코드를 직접 사용하면 된다. 그러나 스프링을 사용하려면 스프링이 제공하는 필터를 가져와 등록하면 아주 쉽게 해결이 된다.

<web.xml> 파일에 위 코드를 등록하면 된다.

UTF-8 인코딩 필터를 appServlet(Dispatcher Servlet)에 연결짓는 코드다.

예전에 톰캣만 활용할 때는 어노테이션으로 사용하는 것으로 충분했다. 하지만 스프링은 필터를 개발자에게 사용 선택권을 주기 위해 어노테이션이 아니라 위와 같이 xml 파일에 직접 등록해 사용하도록 만들었다.