워드프레스가 4.2 버전으로 업그레이드 되면서 데이터베이스 캐릭터셋(DB_CHARSET)을 utf8mb4까지 지원하게 됐습니다. 기존의 utf8는 제한된 유니코드 캐릭터를 저장할 수 있는데 반해 utf8mb4는 어떤 유니코드라도 저장할 수 있습니다. 따라서 한자 문화권의 글자는 무제한 저장이 가능합니다. 그런데 국내의 웹호스팅에서는 최소한의 사양으로 서버를 운영하기 때문에 이러한 혜택을 누릴 수가 없습니다. 워드프레스가 기껏 만들어놓은 기능이 무용지물이 된 것이죠. 왜냐 하면 이 기능은 데이터베이스 언어인 MySQL 5.5.3 버전 이상에서만 가능하기 때문입니다. 많은 웹호스팅은 5.0 아니면 5.1 버전으로 돼있습니다. 5.0은 10년전의 버전입니다. 아직도 이런 구형을 사용하고 있는 곳이 많은 것입니다.
문제는 워드프레스를 웹호스팅에 설치해 사용하면 좋겠으나 로컬호스트에서 설치해 사이트를 만들고 웹호스팅에 업로드 할 때 발생합니다. 로컬호스트에서는 WAMP나 MAMP 또는 국내에서 개발된 오토셋을 사용하는데 이들의 MySQL 버전은 상당히 높아서 오토셋 9버전의 경우 5.6.20입니다. 따라서 워드프레스를 설치하면 utf8mb4로 설치가 됩니다. 이 데이터베이스를 낮은 사양의 웹호스팅에 가져오기 하면 에러가 발생합니다. 호환이 안되는 것이죠. 그래서 워드프레스를 설치할 때 별도의 조치를 취해야 합니다. 방법은 두 가지입니다.
우선 국내의 웹호스팅 업체의 MySQL 버전 지원 현황에 대해 알아보겠습니다. 어제와 오늘에 걸쳐서 전화로 직접 문의하고 가장 높은 버전을 지원하는 곳에서 실제 호스팅을 신청해 테스트를 해봤습니다. 일부 대형 호스팅 업체 2곳(카페24, 가비아)을 문의했는데 웹호스팅의 경우 최고 높은 사양이 5.5.17입니다. 권장 사양보다 약간 높습니다. 한 곳은 그나마 더 높은 가격의 서비스를 이용해야 가능하고 낮은 가격의 호스팅은 5.1 버전입니다. 알아본 곳 중에 5.6 버전이 가능한 곳은 2곳이 있습니다. 엘지 U+와 아이비호스팅입니다. 더 있겠지만 모두를 알아볼 수는 없기에 가장 저렴한 한 곳만 소개하겠습니다.
아이비호스팅
http://www.ivyro.net/html/webht/web/
웹호스팅 메뉴를 클릭하면 가격이 나옵니다. 반값 호스팅이라는 캐치프레이즈에 걸맞게 정말 저렴합니다. 게다가 하드가 SSD입니다. 알고보니 스마일서브라는 서버 호스팅 업체의 관련회사입니다.
바로 아래에 서버 환경이 나옵니다. 지원하는 php와 mysql 버전이 상당히 높습니다. 서비스 신청할 때 선택할 수 있습니다. 테스트를 위해 로컬호스트(MySQL 5.6.2)에서 워드프레스 4.2.2 버전을 설치하고 프리미엄 테마로 데모 데이터 가져오기를 마친 후 몇 가지 설정한 후에 데이터베이스를 업로드 했습니다. 무리 없이 가져오기가 됐습니다. FTP로 파일을 업로드 한 후 데이터베이스 URL을 변경하고 사이트에 접속하니 깔끔하게 나옵니다.
http://wpdesign.ivyro.net/
이러한 문제가 국내에만 있는 것이 아니라 워드프레스 포럼에 찾아봤더니 역시 해외도 문제가 되더군요. 아래의 링크는 이러한 문제와 관련한 토론 내용입니다.
필자도 여러 가지 방법을 연구해본 끝에 포럼에 게시글을 올렸습니다.
주된 답변 내용은 워드프레스는 로컬호스트에서 개발하더라도 실제 사이트의 환경과 같게 해야 한다는 것입니다. 하지만 현실은 그렇지 못하니 안타까운 것입니다. 워드프레스닷오그 사이트에서 워드프레스 사용 시 권장 사양에 대해 다음과 같은 글이 있습니다.
PHP는 최소 사양이 5.2.4이고 권장 사양이 5.4 이상입니다. MySQL의 경우 최소가 5.0 권장이 5.5 이상입니다. 이 사양에 맞추려면 국내의 웹호스팅 업체는 위 몇 군데 빼고 모두 업그레이드 해야 하는 상황입니다. 워드프레스 최신 버전을 사용하기 위해서는 반드시 필요한 것입니다. 이와 같이 사양이 높아진 것은 그럴 수 밖에 없습니다. 보안이나 최신 기술을 적용하기 위해서 필요한 것이죠. 그만큼 이전 버전의 환경에서는 보안이 취약해질 수 밖에 없고 이런 버전도 워드프레스는 지원하지만 그래도 취약할 수 밖에 없습니다. 위 내용으로 보면 호스팅 업체에 연락해서 업그레이드를 요청하라고 하지만 국내의 업체는 상당히 보수적입니다.
위 포럼에 제가 글을 올린 내용을 토대로 해결 방법을 알아봤지만 완벽한 것은 아닙니다. 아래의 글은 참고 사항이니 워드프레스를 최신 버전을 사용하고자 한다면 사양을 지원하는 업체를 찾아서 반드시 전화로 확인하고 선택해야 합니다. 그렇다고 제가 이들 업체를 광고하는 것은 아닙니다. 사양이 떨어지는 업체는 업그레이드를 해야한다는 것을 말하고자 하는 것입니다.
1. 4.1 버전을 먼저 설치하고 4.2 버전으로 업그레이드 하는 방법
4.1 버전으로 설치하면 utf8로 설치되기 때문에 데이터베이스가 utf8로 적용됩니다. 이후에 4.2 버전으로 업그레이드 해도 데이터베이스는 그대로 utf8이 됩니다. 제가 그동안 4.1 버전 상태에서 사용하다가 업그레이드를 한 상태에서 웹호스팅이나 서버에 업로드 해왔기 때문에 이러한 문제점을 발견하지 못했습니다. 오늘 독자분의 문의를 통해 알게 된 것이죠. 지금까지 4.2 버전을 사용하다가 웹호스팅에 업로드 해본적이 없었다는 것입니다.
2. 4.2 버전의 코드를 수정해 설치하는 방법
워드프레스 4.2 버전은 설치하는 과정에서 데이터베이스의 버전을 확인하고 5.5.3 버전 이상이면 utf8mb4로 데이터베이스를 구성합니다. 이 이하의 버전이면 utf8로 설치가 됩니다. 따라서 코드에서 버전 번호를 바꿔주면 utf8로 설치가 됩니다.
워드프레스를 설치하기 전에 워드프레스 설치 폴더에서 wp-includes 폴더에 들어가면 하단 부분에 wp-db.php 파일이 있습니다. 이 파일을 편집기에 열고 3052와 3069 번째 줄에 5.5.3 이라는 워드프레스 버전이 나옵니다. 이것을 아직 버전이 없는 번호 예를 들면 6.5.3으로 변경하고 저장합니다. 설치가 완료된 후에는 원래의 버전 번호로 돌려놓으면 됩니다. 잠시 워드프레스를 속이는 것이죠.
설치한 후에 wp-config.php 파일을 열어보면 DB_CHARSET이 utf8로 돼있습니다.
phpMyAdmin으로 보면 데이터 정렬방식도 utf8로 돼있습니다.
반면에 코드를 수정하지 않고 설치하면 모두 utf8mb4로 설치됩니다.
그러면 기존에 워드프레스 4.2 버전으로 설치하고 사이트를 만들었을 경우는 어떻게 하느냐가 문제입니다. 두가지 방법을 사용해봤는데 둘다 문제는 없어 보이지만 한 가지는 데이터정렬방식이 변경이 안됩니다.
1. 데이터베이스를 직접 수정
데이터베이스를 내보내기 하고 sql 파일을 편집기에 열어서 utf8mb4를 utf8로 치환하고 저장합니다.
웹호스팅 데이터베이스에 가져오기 하고 Search-Replace-DB-master로 URL을 변경해줬습니다. 사이트도 아무 이상 없이 잘 돌아갑니다. 데이터 정렬방식인 Collation을 보면 utf8로 돼있습니다. 이전의 로컬호스트의 데이터베이스와 비교하면 다음과 같습니다.
행과 레코드 수는 같습니다. 종류에서 InnoDB와 MyISAm의 차이가 있는데 스토리지 엔진 차이입니다. 요즘은 InnoDB를 많이 사용한다고 합니다. 이 엔진의 차이로 크기 부분에서 많은 차이가 납니다. 웹호스팅의 데이터베이스를 내보내기 해서 다시 로컬호스트에 사이트를 만들고 데이터베이스를 가져오기 해봤습니다.
사이트도 제대로 돌아갑니다. 데이터베이스는 MyISAM으로 돼있고 용량은 약간 달라졌습니다. 데이터정렬방식의 차이로 인한 것 같습니다.
2. 내보내기에서 호환성 수정
두 번째 방법으로 내보내기 할 때 퀵이 아닌 커스텀에 체크합니다.
형식 특정 옵션에서 빨간 박스의 선택상자에서 MYSQL40을 선택하고 하단에서 실행버튼을 클릭해 sql을 저장합니다.
웹호스팅에서 가져오기 하고 보니 데이터 정렬방식이 euckr_korean_ci로 돼있습니다. 워드프레스는 이 방식으로는 작동이 되지 않습니다.
하지만 초기 화면에서 보면 utf8로 돼있습니다.
문제가 될 수 있는 가장 큰 것 중에 하나는 워드프레스 4.2가 utf8mb4을 지원하는 상황에서 어떤 글자가 이 캐릭터셋으로 저장이 됐다고 했을 때 데이터베이스 환경은 utf8이므로 글자가 제대로 나오지 않을 수 있다는 것입니다.