만약 URL에 한글 데이터를 보내게 되면 다음과 같이 URL 쿼리 스트링에 한글 값 그대로 전송 되는거 같이 보인다. (GET방식이라고 가정)
하지만 위의 주소창을 복사해서 그대로 메모장에 붙여넣기를 하게 되면
와 같이 바뀌게 된다.
이렇게 한글 데이터를 URL로 전송할때는 브라우저에 의해 URL 인코딩 과정을 거치게 된다.
URL인코딩 : non 아스키 값들을 아스키 코드로 변경 (변환규칙 : utf-8)
한글 그대로 전달하면 되는걸 굳이 URL 인코딩을 하는 이유는 뭘까 라는 생각이 들 수 있다. 그 이유는 간단한다.
URL 요청을 하면 서버 입장에서는 요청한 서버가 어떤 OS를 쓰고 어떤 인코딩 방식을 쓰는지 모르니깐 URL의 모든 글자를 아스키 코드 값으로 통일한 것이다.
이렇게 인코딩 과정을 거친 데이터를 서버에서 받을때는 디코딩 과정을 거쳐야 한다. 그래서 코드 부분에 request.setCharacterEncoding("UTF-8"); 과 같은 것을 작성해줘야 한다. 하지만 매번 작성하기 번거로우니 web.xml 파일에 한글 변환 필터를 넣어준다.
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>