BLOG main image
분류 전체보기 (313)
교육 (13)
NEIS (6)
Edufine (0)
Programmer (5)
Android Programming (1)
Internet W3 (18)
JAVA Programming (9)
JSP/Servlet (1)
Framework (7)
Spring For Beginner (4)
eGovFrame (10)
MEAN Stack (2)
NodeJS (5)
SublimeText (30)
SublimeText_Tips (18)
Eclipse (16)
JavaScript (8)
jQuery (12)
jQuery_tips (1)
Ajax (3)
DWR(Direct Web Remote) (4)
JSON(JS Object Notation) (4)
Oracle (2)
MySQL (28)
OS (16)
Download (3)
Life (10)
Favorit Site (1)
Books (2)
Healthy (1)
Stocks (1)
HTML5/CSS (1)
Python (4)
Security (7)
CISSP (0)
Ruby On Rails (5)
일기장 (0)
영어 교과서(중2) (3)
알고리즘 (0)
Go Lang (3)
VB 2010 (12)
C# (1)
정보보안기사(네트워크보안) (0)
업무 활용 엑셀 (11)
틈틈이 활용팁 (14)
하루 하루 살아가며 ……. (2)
기술 (1)
파이썬 & 데이터분석 (1)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2015. 7. 22. 13:07

설치 환경

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&amp;characterEncoding=utf8 [ xml ]




위의 사항들에 대해 확인을 해 보았다면, 서버는 문제없이 잘 동작할 것입니다.

그럼 이상으로, 글을 마치겠습니다.


출처 : http://prioriq.tistory.com/5

반응형