์ค์น ํ๊ฒฝ
Server ์ธ์ด: JAVA / JSP (Java v1.7), Spring Framework
WAS1: Tomcat v7.0
DBMS: MySQL v5.1.41->v5.6.23, MySQL Workbench v5.2.38
MySQL์ ์ค์นํ ๊ฒ์ ํจ์ฌ ์ด์ ์ด๊ณ , ํ๊ธ์กฐ์ฐจ ์ฌ์ฉํ์ง ์๋ ์์ ํ๋ก์ ํธ๋ง ์งํํ๋ ํ์ (.. )
๊ทธ๋ฐ๋ฐ ์์ ํ๊ฒฝ์์ ์ฝ๋ฉ์ ํ๋ ๋์ค, ํ๊ธ์ด ์ ๋๋ก ํ์๋์ง ์๋ ๋๊ด์ ๋ถ๋ซํ์ต๋๋ค.
์์์ ์ ์ํ ๊ฒ๊ณผ ๊ฐ์ ํ๊ฒฝ์์ ํ๊ธ์ I/O๊ฐ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด, ํฌ๊ฒ ๋ค ๊ฐ์ง ์ธก๋ฉด์ ๋ํ ์ค์ ์ ํด ์ฃผ์ด์ผ ํฉ๋๋ค.
๊ทธ ๋ค ๊ฐ์ง๋ ์น ์๋น์ค์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์๊ฐ ๋๊ธฐ๋ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฒ ์ธ์ด, ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ,
ํด๋ผ์ด์ธํธ ์ธ์ด์ด๋ฉฐ, ์ด๊ฒ๋ค์ ๋ํ์ฌ ์ฌ์ฉํ๊ณ ์ ํ๋ encoding ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋๋ก ์ค์ ์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋จผ์ MySQL ์ฝ์์์ show variables like 'c%'; ๋ฅผ ์คํ์์ผ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ต๋๋ค. ( default ์ผ ๊ฒฝ์ฐ )
ํน์, status ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ํ์ฌ์ ๋ฌธ์ ์ ์ ํ์ธํ ์๋ ์์ต๋๋ค.
์ด ๋ช ๋ น์ด๋ ํ์ฌ DB์ ๋ฌธ์ ์ 2๊ณผ ์ฝ๋ ์ด์ 3์ ์ค์ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ,
MySQL์ ๊ธฐ๋ณธ ์ค์ ์ latin1, latin1_swedish_ci ์ํ์ ๋๋ค.
ํ๊ธ์ ์ฌ์ฉํ๊ธฐ ์ํด์, ๋ฌธ์ ์ ๊ณผ ์ฝ๋ ์ด์ ์ ์ค์ ์ ๋ฐ๊พธ์ด ์ค๋๋ค.
๋จผ์ , MySQL์ด ์ค์น๋ ๋๋ ํ ๋ฆฌ์ ์๋ my-medium.ini ํ์ผ์ ๋ณต์ฌํ์ฌ my.ini ํ์ผ์ ์์ฑํฉ๋๋ค.
๊ทธ ํ, my.ini ํ์ผ์ ์๋ ์ฌํญ์ ์ถ๊ฐ ๋๋ ์์ ํด ์ค๋๋ค.
[mysql] default-character-set=utf8 [mysqld] character-set-client-handshake = FALSE init_connect = "SET collation_connection = utf8_general_ci" init_connect = "SET NAMES utf8" character-set-server = utf8 collation-server = utf8_general_ci [client] default-character-set = utf8 [mysqldump] default-character-set = utf8 |
์์ ๊ฐ์ด ํ์ผ์ ์์ ํ๋ค๋ฉด, ์ ์ดํ - ๊ด๋ฆฌ๋๊ตฌ - ์๋น์ค - MySQL์์ DB๋ฅผ ์ฌ๊ธฐ๋ ์ํต๋๋ค.
๊ทธ ํ MySQL์ฝ์๋ก ๋ค์ด๊ฐ์ show variables like 'c%'; ๋ฅผ ๋ค์ ์คํ์์ผ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ต๋๋ค.
๋ชจ๋ ๋ฌธ์์ ๊ณผ ์ฝ๋ ์ด์ ์ค์ ์ utf-8์ด ์ ์ฉ๋ ๋ชจ์ต์ ๋ณผ ์ ์์ต๋๋ค.
ํ์ง๋ง windows์์ MySQL ๋ฌธ์ ์ ๊ณผ ์ฝ๋ ์ด์ ์ utf-8๋ก ์ค์ ํ๋๋ผ๋ ์ฝ์ ์ฐฝ์ผ๋ก ๋ด์ฉ์ ํ์ธํ๋ฉด ๊ทธ๋๋ ํ๊ธ์ด ๊นจ์ ธ
๋ณด์ ๋๋ค. ๊ทธ ์ด์ ๋ MySQL ์ฝ์์ ๋ฌธ์ ์ ์ค์ ์ด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด MS949๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋
1. cmd์คํ ํ ๊ธ๊ผด์->๋์คํฐ ๊ธ๊ผด ์ด์ธ์ ๋ค๋ฅธ ๊ฑธ๋ก ์ค์ ํฉ๋๋ค.
2. cmd์ฐฝ์์ chcp5 65001 ์ ์ ๋ ฅํ๋ฉด ์ฐฝ์ ๋ฌธ์ ์ ์ด utf-8๋ก ๋ฐ๋๋๋ค.
์ ๋ MySQL Workbench๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก, ๋ฐ๋ก ์ค์ ์ ํด์ฃผ์ง ์๊ณ ์ฌ์ฉํ ๋ก ํ๊ฒ ์ต๋๋ค.
MySQL Workbench์์๋ ๋ณ๋ค๋๋ก ๋ฌธ์ ์ ์ ์ง์ ํ์ง ์์๋ ํ๊ธ์ ์ ๋ ฅ ์กฐํ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
2. ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ
Connector ์ ๋ณด์ URIEncoding="UTF-8"๋ฅผ ์ถ๊ฐํด ์ค๋๋ค.
<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" connectionTimeout="20000" URIEncoding="UTF-8" /> |
์ด ์ธํ ์ ์นํ์ด์ง์ URL์์ ๋ฌธ์์ด์ ์ฝ์ด์ฌ ๋ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ URL์ ์ธ์ฝ๋ฉ ํ์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค.
Internet Explorer์์๋ ๋๋ถ๋ถ "URL์ ํญ์ UTF-8๋ก ๋ณด๋"์ด ์ผ์ ธ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ UTF-8๋ก ๋ณด๋ ๋๋ค. ์ด๋ฅผ ์๋ฒ์์ ์ฝ์ด๋ค์ผ๋ UTF-8์ด ์ธํ ๋์ด ์์ด์ผ ํ๋ ๊ฒ์ ๋๋ค.
3. ์๋ฒ ์ธ์ด
Eclipse ๊ณ์ด์ ์๋ํฐ์์ Encoding ์ธํ ํด ์ค๋๋ค
4. ํด๋ผ์ด์ธํธ ์ธ์ด
1) ํ์ด์ง ์ค์
*.html, *.htm, *.jsp ํ์ผ์ UTF-8 ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค.
๋ชจ๋ HTML, JSP์๋ ์๋์ ๊ฐ์ METAํ๊ทธ๋ฅผ ๋ฃ๋ ๊ฒ์ด ์ข์ต๋๋ค.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
JSP์์๋ ํ์ด์ง ์๋จ์ page ์ง์์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ฃ์ต๋๋ค.
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
2) ๋ฐ์ดํฐ ์ ์ก ์ ์ค์
POST๋ฐฉ์์ผ๋ก ์ ์ก๋ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ ๋ผ์ธ์ ์ถ๊ฐํ๋ฉด ํด๊ฒฐ์ด ๋ฉ๋๋ค.
request.setCharacterEncoding("UTF-8");
GET๋ฐฉ์์ผ๋ก ์ ์ก๋ ๋ฐ์ดํฐ๋ URL์ ํตํด ์ ์ก๋๊ธฐ ๋๋ฌธ์ ์์ ๋ฐฉ์์ผ๋ก ์ธ ์ ์์ต๋๋ค.
URL์์์ ๋ฐ์ดํฐ๋ฅผ Latin-1(8859_1) ์ธ์ฝ๋ฉ์ผ๋ก ์๋ฒ์์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฅผ ํฐ์บฃ์ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค.
๋ฐ๋ผ์ ๋ถ๋ฌ์จ ๋ฐ์ดํฐ๋ฅผ ์๋์ ๊ฐ์ด ์ฒ๋ฆฌํด ์ฃผ์ด์ผ ํฉ๋๋ค.
request.setCharacterEncoding("UTF-8");
String data = new String(request.getParameter("data").getBytes("8859_1"),"UTF-8");
ํ๊ธ ์ด๋ฆ์ ํ์ผ์ ์ ์กํ ๋๋ Latin-1(8859_1)๋ก ์ธํ ๋ ํฐ์บฃ ์๋ฒ์์๋ URL์ ๋ฌด์กฐ๊ฑด ์์ด๋ก ์ฒ๋ฆฌํ๋ฏ๋ก
ํ๊ธ ํ์ผ์ ์ ๋๋ก ์ฝ์ด๋ค์ผ ์ ์์ต๋๋ค. ํ์ผ์ ์์ด๋ก ๋ฐ๊พธ์ด ์ ์ฅํ๊ฑฐ๋, ํ๊ธ ํ์ผ์ ์์ด๋ก ๋ฐ๊พธ๋ ์ฒ๋ฆฌ๋ฅผ
ํด ์ฃผ์ด์ผ ํฉ๋๋ค.
3) DB์ ๋ํ ์ฃผ์
jdbc:mysql://localhost:3306/DB๋ช ?useUnicode=true&characterEncoding=utf8 [ Java ๋๋ JSP ]
jdbc:mysql://localhost:3306/DB๋ช ?useUnicode=true&characterEncoding=utf8 [ xml ]
์์ ์ฌํญ๋ค์ ๋ํด ํ์ธ์ ํด ๋ณด์๋ค๋ฉด, ์๋ฒ๋ ๋ฌธ์ ์์ด ์ ๋์ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ผ ์ด์์ผ๋ก, ๊ธ์ ๋ง์น๊ฒ ์ต๋๋ค.