Miconblog.com

아시죠? 제 홈페이지는 IE6에서 엉망인거,.. 도와주십쇼.. 크로스브라우징 하기 귀찮아요

SAVE THE DEVELOPERS <!> Upgrade IE 6 Now!
개발자 하나 살리는 셈치고, IE6 쓰시면 업그레이드 해주삼~

한눈에 보기

그림일기

홈페이지를 개편중이다. ..

그림넣을 자리여기에 그림을 넣고 싶다.

타블렛을 지르면, 그림일기 쓸꺼임...

By 붗꽃남자 | March 8th, 2008

마이미투

친구 할래?

하루종일 홈페이지 개편.. 배고프다

By 미투데이

최신 팟캐스트

안생겨요

어쩌다 한번씩 녹음하면 올릴께.. 이미 올린것도 있는데..링크 걸어놔야지..

최신 명록이

불꽃남자

명록이 좀 남기자~!!

블로그 명록이에 쓰여진 최신 방명록 가져오기..

By [쓴사람적기] | [날짜적기]

Personal Web pages.

최근에 발행한 RSS

Spring Framework 에서 UTF-8 한글 설정

By Sohn | June 6, 2009

인코딩 문제로 오늘 또 하루종일 씨름했다.

사실 그닥 어려운게 아닌데.. 처음 설정을 잘못해놓으면,.
고생하기 쉽상이다.

웹개발에서 인코딩과 관련해서 신경써야할 부분

아래와 같은 3가지라고 보면 되겠다.
1. 클라이언트 (javascript)
2. 서버 (apache or tomcat 설정)
3. DB

1. DB 캐릭터셋 설정하기

그중에서 가장 실수하기 쉬운 것중에 하나는 DB 설정.
mysql 을 설치하고, 꼭 아래와 같은 명령어로 현재 mysql 의 설정 상태를 확인해야한다.
mysql> \s
mysql 을 설치할대, 기본 캐릭터셋이 latin1 으로 설정되어 있기때문에
신경써서 설치하지 않으면, 원하는 utf8 설정이 안된다.
설정이 제대로 안되어 있다면, 설치 폴더로 가서 my.ini 파일을 열어
인코딩 관련 부분을 모두 수정해줘야한다.

여기서 그렇게 했는데도 불구하고, \s 명령어를 이용해, mysql 설정상태를 확인 했을때,
DB character set 이 latin1 로 나오는 경우가 있는데..
이런 경우는, create database로 db를 생성할 당시의 캐릭터 셋이 latin1이 었기 때문에
뒤늦게 수정해봐야 수정되지 않는다. 결국엔 db를 날리고 다시 생성해야한다.

이런 경우 때문에 초기 설치시에 주의해서 원하는 캐릭터셋으로 설정을 해야한다.

2. 스프링 프레임웍에서 설정하기
두번째로 서버 설정을 확인해야하는데.. tomcat에서 server.xml 을 열어서 8080포트와 8009번 포트의
커넥터에 URIEncoding="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>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

그리고 xxxx-servlet.xml 파일을 열어서, viewResolver를 아래와 같이 또 수정해준다.

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/view/"/>

<property name="suffix" value=".jsp" />

<property name="contentType" value="text/html; charset=UTF-8"/>

</bean>

이렇게 해주면, 기본적으로 클라이언트딴에서 특별한 인코딩을 수행하지 않아도 UTF8로 인식을 한다.
때문에 응답할때도 특별한 디코딩을 해주지 않아도 된다.


3. 서버 설정없이 클라이언트에서 무조건 UTF-8로 넘겨주기

위와 같이 서버딴에서 특별한 설정을 해주지 않았다면,
다소 귀찮은 작업을 해줘야하는데..
그것은 클라이언트에서 서버로 정보를 날릴때, 무조건 인코딩을 해서 넘겨야 한다는 것이다.

인코딩하는 방법은 간단하다.
아래와 같이 자바스크립트를 이용해, 넘기고자 하는 정보를 encodeURIComponent()
함수를 이용해 인코딩 해주면, 넘기는 정보를 UTF-8로 인코딩해서 넘기게 된다.

4. 인코딩 파헤치기

보통은 클라이언트에서 서버로 요청 파라메터 정보를 넘기게 되면,
아래와 같은 3가지 인코딩 방식으로 넘기게 된다. 아래 1번을 제외한 나머지 방법은
브라우저가 설정된 인코딩 방식을 따르게 된다. 1번방법은 자바스크립트에서 강제로 인코딩한다.
예를 들어 "한글"이란 문자열을 넘기면,
1. encodeURIComponent() 로 인코딩 할때, "%25ED%2595%259C%25EA%25B8%2580"
2. UTF8 인코딩을 할때,  "%ED%95%9C%EA%B8%80"
3. EUC-KR로 넘길 때, "%C7%D1%B1%DB"

위 3가지 타입을 UTF8로 설정된 서블릿에서 각각 request.getParameter() 로 넘겨받은 정보를 읽어오게 되면,
UTF8로 디코딩 되어 각각  
1. "%ED%95%9C%EA%B8%80"
2. "한글"
3. "???"
로 읽혀오게 된다.
여기서 문제는 3번이 문제가 된다. 3번은 실제로 "한글"이란 정보를 EUC-KR로 인코딩해서 넘기게 되는데..
서블릿에서 UTF-8로 디코딩을 하게 되어 알수없는 값이 되어버린다.

그리고 서버에서 이것을 다시 UTF8 캐릭터셋으로 설정된 DB에 그대로 저장하면,. 각각
1. "%ED%95%9C%EA%B8%80"

Copyright Ⓒ2007-2008 Some Rights Reserved, Developed & Designed by Rhyme, Design Layout From webstandards

This site is valid XHTML 1.0 Strict, CSS | Get published posts via RSS