Zeroboard 5와 Mediawiki 를 위해서 UTF-8 서버로 이전한지도 꽤 시간이 흘렀습니다. 정작 ZB5는 IE7 과 문제 때문에 못 쓰고, Mediawiki 는 다른 서버에 설치해버렸군요.

덕분에 기존에 제가 쓰던 서비스들을 UTF-8에서 동작하도록 모조리 수정해야했습니다. 이 장대한(?) 삽질기를 간략한 기록으로 정리하려고 합니다. 혹시 UTF-8로 이전하신 분들께 도움이 됐으면 합니다.

주의 : 본 내용은 리눅스 시스템에 친숙한 분들께 참고용으로 쓴 것입니다. 본 내용에는 오류가 있을 수 있으며, 이에 관련한 피해에 대해서는 각자 본인 책임하에 진행해야 합니다.

  1. MySQL을 백업합니다.

    1
    
    mysqldump -c -ufoobar -p foobar > foobar.sql
    
  2. ~/www 디렉토리를 백업합니다.

    1
    2
    
    cd ~
    tar -cvzf foobar.tar.gz ~/www
    
  3. 모두 PC로 다운로드 받아둡니다.

  4. Cafe24에 가서 이전을 신청합니다.

  5. 이전 완료 메일이 도착하면 새 UTF-8 서버로 접속해서 코드를 확인합니다.

    1
    
    set | grep LANG
    
  6. 문서 편집기를 이용해서 foobar.sql 파일내에 있는 테이블의 인코딩을 EUC-KR 에서 UTF-8 로 바꿉니다.

  7. MySQL 덤프를 업로드 합니다.

  8. foobar.sql 파일의 인코딩을 변환합니다.

    1
    
    /usr/bin/iconv -c -f euc-kr -t utf-8 foobar.sql > foobar_utf8.sql
    
  9. MySQL 덤프를 넣습니다.

    1
    
    mysql -ufoobar -p foobar < foobar.sql
    
  10. PC에 있는 foobar.tar.gz 을 풉니다.

  11. FileZilla 와 같이 강제로 UTF-8 을 사용할 수 있는 FTP 프로그램을 사용해서 푼 파일들을 서버로 업로드 합니다. convmv 를 사용하면 서버에서 할 수도 있을 것 같지만 Cafe24에는 해당 프로그램이 안 보입니다.

  12. 우선 웹에 접속해서 페이지가 열리는지 확인합니다.

  13. 이제 각 서비스를 수정합니다. 제가 사용하는 phpBB2와 JSBoard만 설명드리는 것을 양해 부탁드립니다. 아래와 같은 내용으로 utf8php.sh 라는 스크립트를 하나 만듭니다. *.php 부분을 *.tpl*.template 로 변경해서 각각 utf8tpl.sh, utf8template.sh로 스크립트를 만릅니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    #!/bin/sh
    for i in $( find . -name "*.php" ); do
      if [ -f $i ]
      then
        /usr/bin/iconv -f UHC -t utf-8 -o $i.tmp $i
        mv -f $i $i.bak
        mv -f $i.tmp $i
      fi
    done
    
  14. 각각 실행 권한을 주세요.

    1
    
    chmod 755 utf8*.sh
    
  15. phpBB2 디렉토리로 이동한 후에 utf8php.shutf8tpl.sh 스크립트를 실행합니다.

  16. JSBoard 디렉토리로 이동한 후에 utf8php.shutf8template.sh 스크립트를 실행합니다.

  17. phpBB2의 ./language/lang_korean/lang_main.php 파일의 41 번째줄을 아래와 같이 편집합니다. 편집 위치는 버전에 따라 약간 변합니다.

    1
    
    $lang['ENCODING'] = 'utf-8';
    
  18. Attachment Mod 를 사용하신다면 ./download.php 파일의 187 번째줄을 아래와 같이 편집합니다.

    1
    
    header('Content-Disposition: inline; filename="' . urlencode($real_filename) . '"');
    
  19. phpBB2가 정상적으로 보이는지 확인합니다.

  20. JSBoard의 ./act.php 파일의 568, 573 번째줄을 아래와 같이 편집합니다. 편집 위치는 버전에 따라 약간 변합니다.

    1
    
    header("Content-Disposition: attachment; filename=".urlencode($dn['name']));
    
  21. JSBoard의 ./include/LANG/ko.php 파일의 4 번째줄을 아래와 같이 편집합니다.

    1
    
    $langs['charset'] = "UTF-8";
    
  22. JSBoard의 ./include/check.php 파일의 264~269 줄을 주석처리합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    /*
    # file 이름에서 특수문자가 있으면 에러 출력
    # 한글 영역과 한자 영역은 허락 함
    
    if ( preg*replace ("/[\w\d.*\-]|[\xB0-\xC8\xCA-\xFD][\xa1-\xfe]/",'', urldecode ($f)) ) {
        print_error($langs['act_de'],250,150,1);
    exit;
    }
    */
    
  23. JSBoard의 ./include/check.php 파일의 242 줄에 아래 코드를 추가합니다.

    1
    
    $list['bofile'] = urlencode($list['bofile']);
    
  24. JSBoard의 ./include/parse.php 파일의 327~328 번째줄을 아래와 같이 편집합니다.

    1
    
    $s = mb_substr($s,0,$l, "UTF-8"); // $s = preg_replace("/(([\x80-\xFE].)*)[\x80-\xFE]?$/","\\1",$s);