Oracle 에서 MySQL 로 그리고 US7ASCII Encoding

이번에 프로젝트를 진행하면서 서버 환경 때문에 고생을 하고 있습니다. 저희가 납품한 서버가 아닌 고객 사에서 제공해준 서버에 설치를 했습니다. 기존에 저희 프로그램은 Mysql을 사용하고 있었습니다. 설치되는 서버는 Oracle입니다. 설치할 프로그램에서 고급 쿼리를 사용하는 것이 아니기 때문에 쿼리 걱정은 전혀 하지 않았습니다. 그런데 서버를 올리면서 이것저것 오류가 많이 발생 되었습니다. 칼럼명으로 사용할 수 없는 단어들이 쿼리 많이 포함 되어 있어서 고생을 했습니다. ‘NAME’ 이라는 칼럼명이 거의 모든 테이블에 포함 되어 있었는데 이것을 전부 수정을 해야 했습니다. 테이블 생성은 XXXXNAME 으로 하고 쿼리는 XXXXNAME as NAME 이런식으로 변경을 했습니다. 서문이 좀 길었네요…

서버에 프로젝트를 올리는데 까지 성공을 했습니다. 그런데 한글이 전부 깨져서 오는 문제가 발생 되었습니다. 옆에서 같은 오라클 데이터베이스를 사용하시는 분께 여쭤봤더니 US7ASCII라는 인코딩을 사용한다고 합니다.. 허걱.. 처음입니다. 요런 야릇한 인코딩은 기존에 알고 있는 인코딩이라야 EUC-KR, UTF8 요정도.. 그래서 구글신에게 도움을 요청 했습니다. 처음에는 지원해주는 jdbc드라이버를 찾아보려고 했습니다. Mysql에서는 드라이버를 로딩 할때 인코딩 타입을 지정해줄수 있어서 오라클도 될줄 알고 해봤지만… 좌절~~

결국 지원해주는 드라이버를 찾지 못하고 코딩으로 변환을 하는 방식을 취했습니다.  아래는 제가 사용한 소스 입니다.

/**
 * KSC5601 인코딩된 문자열을 입력받아 KSC5601 타입으로 인코딩을 변환한다.
 * @param value KSC5601로 로 인코딩된 문자열
 * @return String ISO_8859_1로 인코딩된 문자열 
 */
public static String encodeUS7ASCII(String value) {
    if(value == null) {
        return "";
    }
    String str = "";
    try {
        str = new String(value.getBytes("KSC5601") ,"8859_1");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } 
    return str;
}

/**
 * ISO_8859_1로 인코딩된 문자열을 입력받아 KSC5601 타입으로 인코딩을 변환한다.
 * @param value ISO_8859_1 로 인코딩된 문자열
 * @return String KSC5601로 인코딩된 문자열 
 */
public static String decodeUS7ASCII(String value) {
    if(value== null) {
        return "";
    }
    String str = "";
    try {
        str = new String(value.getBytes("8859_1"), "KSC5601");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return str;
}

이렇게 하니 일이 아주 많이 줄었습니다. 여전히 힘든 작업이지만 그래도 끝은 보이니 할만 합니다.

한가지 팁으로 자바에서는 로그를 할때 log4j 를 많이 사용하는데 이번에도 저희서버가 아니어서 그런지 로그를 찍었는데 한글이 전부 깨져서 출력이 되는 경우가 발생 되었습니다. 구글신께 도움을 받았더니 log4j.properties 의 파일에도 인코딩 타입을 설정 할 수 있었습니다.

log4j.appender.Debugin.encoding=UTF-8

log4j.properties나 log4j.xml 에 파일에 인코딩 옵션에 값을 넣어주면 정상적으로 출력이 됩니다.

역시 배울 것이 아주 많은 직업인 것 같습니다.. 그래도 해결되고 난 후의 그 뿌듯함이란…~~~~

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중