Cafe24 UTF-8 서버 이전기

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

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

주의 : 본 내용은 리눅스 시스템에 친숙한 분들께 참고용으로 쓴 것입니다. 본 내용에는 오류가 있을 수 있으며, 이에 관련한 피해에 대해서는 각자 본인 책임하에 진행해야 합니다. 또한, UTF-8 이전 작업은 까다로우므로 자신이 없는 분은 가급적 주위 분들의 도움을 구하시는 것을 추천합니다.

  1. MySQL을 백업합니다.
  2. $ mysqldump -c -ufoobar -p foobar > foobar.sql

  3. ~/www 디렉토리를 백업합니다.
  4. $ cd ~
    $ tar -cvzf foobar.tar.gz ~/www

  5. 모두 PC로 다운로드 받아둡니다.
  6. http://hosting.cafe24.com 에 가서 이전을 신청합니다.
  7. 이전 완료 메일이 도착하면 새 UTF-8 서버로 접속해서 코드를 확인합니다.
  8. $ set | grep LANG

  9. 문서 편집기를 이용해서 foobar.sql 파일내에 있는 테이블의 인코딩을 EUC-KR 에서 UTF-8 로 바꿉니다.
  10. MySQL 덤프를 업로드 합니다.
  11. foobar.sql 파일의 인코딩을 변환합니다.
  12. /usr/bin/iconv -c -f euc-kr -t utf-8 foobar.sql > foobar_utf8.sql

  13. MySQL 덤프를 넣습니다.
  14. $ mysql -ufoobar -p foobar < foobar.sql

  15. PC에 있는 foobar.tar.gz 을 풉니다.
  16. FileZilla 와 같이 강제로 UTF-8 을 사용할 수 있는 FTP 프로그램을 사용해서 푼 파일들을 서버로 업로드 합니다. convmv 를 사용하면 서버에서 할 수도 있을 것 같지만 cafe24 에는 해당 프로그램 안 보입니다.
  17. 우선 웹에 접속해서 페이지가 열리는지 확인합니다.
  18. 이제 각 서비스를 수정합니다. 제가 사용하는 phpBB2와 JSBoard만 설명드리는 것을 양해 부탁드립니다.
  19. 아래와 같은 내용으로 utf8php.sh 라는 스크립트를 하나 만듭니다. "*.php" 부분을 "*.tpl" 과 "*.template" 로 변경해서 각각 utf8tpl.sh, utf8template.sh 로 스크립트를 만릅니다.
    #!/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

  20. 각각 실행 권한을 주세요.
  21. $ chmod 755 utf8*.sh

  22. phpBB2 디렉토리로 이동한 후에 utf8php.sh 와 utf8tpl.sh 스크립트를 실행합니다.
  23. JSBoard 디렉토리로 이동한 후에 utf8php.sh 와 utf8template.sh 스크립트를 실행합니다.
  24. phpBB2의 ./language/lang_korean/lang_main.php 파일의 41 번째줄을 아래와 같이 편집합니다. 편집 위치는 버전에 따라 약간 변합니다.
  25. $lang['ENCODING'] = 'utf-8';

  26. Attachment Mod 를 사용하신다면 ./download.php 파일의 187 번째줄을 아래와 같이 편집합니다.
  27. header('Content-Disposition: inline; filename="' . urlencode($real_filename) . '"');

  28. phpBB2가 정상적으로 보이는지 확인합니다.
  29. JSBoard의 ./act.php 파일의 568, 573 번째줄을 아래와 같이 편집합니다. 편집 위치는 버전에 따라 약간 변합니다.
  30. header("Content-Disposition: attachment; filename=".urlencode($dn['name']));

  31. JSBoard의 ./include/LANG/ko.php 파일의 4 번째줄을 아래와 같이 편집합니다.
  32. $langs['charset'] = "UTF-8";

  33. JSBoard의 ./include/check.php 파일의 264~269 줄을 주석처리합니다.
  34. /*
    # file 이름에서 특수문자가 있으면 에러 출력
    # 한글 영역과 한자 영역은 허락 함
    if ( preg_replace ("/[\w\d._\-]|[\xB0-\xC8\xCA-\xFD][\xA1-\xFE]/",'', urldecode ($f)) ) {
    print_error($langs['act_de'],250,150,1);
    exit;
    }
    */

  35. JSBoard의 ./include/check.php 파일의 242 줄에 아래 코드를 추가합니다.
  36. $list['bofile'] = urlencode($list['bofile']);

  37. JSBoard의 ./include/parse.php 파일의 327~328 번째줄을 아래와 같이 편집합니다.
  38. $s = mb_substr($s,0,$l, "UTF-8");
    // $s = preg_replace("/(([\x80-\xFE].)*)[\x80-\xFE]?$/","\\1",$s);