설치 환경
Server 언어: JAVA / JSP (Java v1.7), Spring Framework
WAS[각주:1]: 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"
default-character-set = utf8[각주:4]
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창에서 chcp[각주:5] 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 ]
위의 사항들에 대해 확인을 해 보았다면, 서버는 문제없이 잘 동작할 것입니다.
그럼 이상으로, 글을 마치겠습니다.
'MySQL' 카테고리의 다른 글
MySQL 한글 깨짐 오류 해결 방법 #5 (0) | 2015.07.22 |
---|---|
MySQL 한글 깨짐 오류 해결 방법 #4 (0) | 2015.07.22 |
MySQL 한글 깨짐 오류 해결 방법 #2 (0) | 2015.07.22 |
MySQL 한글 깨짐 오류 해결 방법 #1 (0) | 2015.07.22 |
MySQL 계정 생성 및 권한설정 (0) | 2015.07.22 |