YONG-MIN

Spring3에서 한글깨짐 방지를 위한 인코딩 설정하기

개발언어/Java, Spring 2017. 5. 26. 09:54

Spring을 처음부터 구축하다보면 인코딩 기본값이 한글에 적합한 것이 아닌

이상한 것들이 설정되어 있다.

그래서 이 포스팅은 UTF-8로 인코딩값을 설정해 해결하는 방법을 다루겠습니다.


Overview

인코딩 설정을 설명하기 위해 개략적으로 아래의 구조를 생성하겠습니다.

TestController를 만들고, form.jsp, submit.jsp를 생성하겠습니다.

"/form" Request에 의해 Form 입력 페이지(form.jsp)가 호출되고,

submit 버튼에 의해 "/submit" Request가 발생하게 구성합니다.

그리고 최종적으로 TestController에서 이를 결과값 출력 페이지(submit.jsp)로 Response하는 구조입니다.



TestController 생성하기

저는 컨트롤러를 만들기위해 com.devks.test.controller 패키를 생성하고 그 안에 컨트롤러를 만들었습니다.


TestController는 단순합니다.

  - form(): '/form' Request에 form.jsp 페이지를 return해줍니다.

  - submit(...): '/submit' Request에 넘어온 값을 받아 Model에 담아 submit.jsp를 return합니다.

@RequestMapping("/form")
public String form(){
    return "form"
}

@RequestMapping("/submit")
public String submit(HttpServletRequest request, Model model){
    model.addAttribute("value", request.getParameter("value"));
    return "submit";
}


입력폼(form.jsp) 생성하기

이제 컨트롤러를 이용해 값을 입력하기 위한 간단한 View 페이지를 생성하겠습니다. (webapp > WEB-INF > view )

Input Form


출력폼(submit.jsp) 생성하기

마지막으로 form.jsp에서 입력된 값을 Controller에서 처리해 출력할 페이지(submit.jsp)를 생성하겠습니다.

    Result Value: ${value }


첫번째 테스트 하기

Tomcat을 가동하고 URL을 이용해서 Web root에서 '.../form' Request를 발생시켜 입력폼으로 이동합니다.

(ex. http://localhost:8080/devks/form)

그리고 아래와 같이 한글로 테스트 결과값을 입력하고 [submit]을 눌러 제출합니다.


그러면...

아무 설정도 하지 않은 보통의 경우 인코딩의 차이로 글자가 이렇게 깨집니다.

이제 문제상황을 만드는 준비가 끝났습니다. -_-;;; 

인코딩 설정하기

인코딩을 설정하는 방법은 크게 두가지입니다.

매번 Controller에서 아래 인코딩 소스를 추가해주는 방법이 하나.

request.setCharacterEncoding('utf-8');

web.xml 설정파일에 filter를 추가하여 Encoding을 설정하는 방법이 있습니다.

매번 소스를 추가하기는 매우 번거롭고 깔끔한 것이 최고이기 때문에 

필터를 이용해서 인코딩 설정을 수행하겠습니다.

WEB-INF에 있는 web.xml을 열고 <web-app>...</web-app> 사이에 아래 filter code를 추가하시면 끝납니다.

    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
    
        encodingFilter
        /*
    


그리고 확인해보면 한글이 제대로 나오는 것을 확인할 수 있습니다.