[해결] 워드프레스 웹호스팅 수작업 이전하기

이 글은 동일한 호스팅서비스 안에서, A 계정으로 운영하고 있는 워드프레스 블로그를 B 계정으로 옮기는 방법을 다룬다. 타인의 지식, 경험, 시간, 노력을 이용하기 위해 지불하는 비용은 대부분 정당하며, 그 결과 또한 대부분 원하는 것에 가까울 가능성이 높다. 이 글은 그 정당함과 안전성을 부정하는 게 아니라, 최소한의 비용으로 블로그를 유지관리해야할 때 필요한 정보를 정리해 두기 위해 쓴 것임을 밝혀 둔다.

피처 이미지
한가운데 놓여 있는 입체감이 있는 워드프레스 로고와, 그 오른쪽 테두리를 부드럽게 감싸고 있는 사람의 오른손.

미리 준비하고 확인할 사항

사용하는 워드프레스 웹호스팅 서비스가 PHP 업그레이드를 지원하는지 먼저 알아본다. 대부분은 안 지원하지만, 드물게 지원하기도 한다. 그러면 PHP 버전을 바꾸기 위해 웹호스팅 서버 계정을 바꿀 필요는 없다.

워드프레스가 설치된 웹서버A에서 DB 덤프파일과 웹서버 파일 백업을 지원하는지 확인한다. 지원하지 않는다면 웹서버A의 DB와 파일 백업을 확보할 다른 방법을 먼저 알아봐야 한다. 이 글에서는 그 방법을 다루지 않는다.

웹서버A의 DB와 파일을 옮겨 워드프레스 블로그를 이전할 웹서버B를 준비한다. 웹서버A와 웹서버B의 IP주소, FTP접속주소, 계정명과 패스워드, DB계정명(DBuser)과 DB명(DBname)과 DB패스워드를 확인한다.

웹서버A 워드프레스를 웹서버B로 옮기기

아래 열거된 작업을 모두 수행하면 된다. 반드시 모든 순서를 똑같이 따라할 필요는 없지만, 대체로 먼저 나온 작업이 완료돼야 나머지를 진행할 수 있다.

1. 웹서버A의 파일 및 DB 백업 생성. 내 경우 웹호스팅 서비스의 관리자 콘솔에서 백업 기능을 지원하고 있음. 이 기능을 사용해 생성된 파일 백업 압축파일과 DB 백업 덤프파일이 각각 하나씩 웹서버A 저장공간에 만들어짐.

2. 웹서버A의 파일 및 DB 백업 내려받기. 웹서버A 저장공간에 만들어진 파일 백업 압축파일과 DB 백업 덤프파일을 PC에 내려받는 작업. FTP 클라이언트 프로그램을 사용해 웹서버A의 백업 생성 경로에 접근해 가져옴.

3. 내려받은 웹서버A의 파일 백업 압축 해제. 관리자 콘솔 기능으로 만들어진 파일 백업 압축파일은 웹서버 계정 최상위 경로부터 압축을 수행한 형태로 제공됨. 이 계정의 웹서버 파일 경로인 ‘public_html’ 폴더를 꺼냄.

4. 압축 해제된 웹서버A ‘public_html’ 폴더를 웹서버B에 업로드. FTP 클라이언트 프로그램을 사용해 웹서버B에 접속. 웹서버A와 동일한 파일과 폴더 구성이 웹서버B의 public_html 폴더에 생성되도록 함.

5. 웹서버B에 업로드한 public_html 폴더, 그 안에 생성된 하위 폴더와 파일의 접근권한을 재설정. 웹서버A와 동일하게 맞춤. FTP 클라이언트 프로그램을 사용해 각 폴더에 ‘775’ 권한을, 각 파일에 ‘644’ 권한을 줌. 내 경우 사용중인 FTP 클라이언트 ‘파일질라’가 하위경로 폴더와 파일에 각각 접근권한을 일괄 지정할 수 있는 기능을 지원해 편리했음.

6. 내려받은 웹서버A의 DB 백업 덤프파일을 웹서버B에 업로드. 내 경우 웹호스팅 서비스 관리자 콘솔에서 웹인터페이스스로 DB 데이터를 관리할 수 있는 phpMyAdmin 기능을 지원하고 있음. DB 최상위 경로에 덤프파일을 업로드해 웹서버A와 동일한 테이블과 레코드 구성이 웹서버B의 DB에 생성되도록 함.

7. 웹서버B의 워드프레스 환경설정 파일(/public_html/wp/wp-config.php)을 찾아, 웹서버B 구성에 맞게 내용 수정. 파일 내용 중 define(‘DB_NAME’, ‘○○○○’); 행과 define(‘DB_USER’, ‘○○○○’); 행과 define(‘DB_PASSWORD’, ‘○○○○’); 행을 찾아 웹서버B의 DB명, DB계정명, DB패스워드를 입력함.

8. 방금 수정한 웹서버B의 워드프레스 환경설정 파일(wp-config.php)에 ‘666’ 권한을 줌.

9. 워드프레스 블로그 도메인의 DNS 레코드를 수정. 도메인의 A레코드에 등록된 웹서버A의 IP주소를 웹서버B의 IP주소로 변경함. 내 경우 웹호스팅 서비스 관리자 콘솔에서 DNS 관리 기능을 통해 기존 도메인의 DNS 레코드를 수정할 수 있었음.

10. 웹서버A에서 웹서버B로 블로그 도메인의 연결 정보를 변경. 내 경우 웹호스팅 서비스 관리자 콘솔의 웹서버 관리 메뉴에서 웹서버A 도메인 정보를 열고 기존 블로그 도메인 정보를 삭제한 다음, 웹서버B 도메인 정보를 열고 기존 블로그 도메인 정보를 추가함.

11. 웹서버B에 연결된 블로그 도메인에 SSL인증서 사용을 신청. 내 경우 웹호스팅 서비스 관리자 콘솔의 웹서버 관리 메뉴에서 웹서버B 도메인 정보를 열고 새로 연결된 도메인에 대한 SSL을 신청함. 이 때 서버의 IP주소가 신청이 거부된다면, DNS 레코드로 수정한 웹서버B의 IP주소가 아직 덜 갱신된 것.

12. 이전 작업이 완료됐는지 확인. 윈도에서는 명령줄 인터페이스를 사용하면 됨. nslookup 명령을 입력하고, 이 프로그램에 기존 도메인을 입력하면, 현재 연결된 웹서버의 IP주소가 무엇인지 보여 줌. 이 값이 앞서 DNS 레코드를 수정해 새로 입력한 웹서버B의 IP주소로 나온다면 제대로 진행한 것.

13. 이 모든 작업 후 웹서버B에 기존 도메인이 연결된 블로그가 이전과 똑같이 뜬다면 성공.

몰랐다가 알게 된 것

1. DB 덤프 파일을 복구하는 방법은 간단하다. 비어 있는 웹서버의 DB 관리환경에 들어가서 덤프 파일을 업로드하기만하면 된다. 주의할 점은 최상위 관리환경이 아니라, 반드시 이미 특정 DB명으로 생성된 DB의 관리영역으로 들어가 업로드해야 한다는 것. 덤프 파일은 생성된 DB에 테이블과 레코드를 쏟아붓는 역할을 하는데, DB를 지정하지 않으면 테이블과 레코드를 쏟아부을 곳이 어디인지 알 수 없기 때문.

2. DB 정보를 제외한 워드프레스 이전 방법은 간단하다. 새 웹서버에 초기상태의 워드프레스를 재설치할 필요는 없다. 웹서버의 전체 워드프레스 경로를 내려받아, 다른 웹서버에 그대로 올리면 된다. 그리고 모든 워드프레스 경로 내의 파일과 폴더에 대한 접근권한을 기존 워드프레스와 일치시킨다. 다만 DB명, DB계정명, DB패스워드 등 웹서버에 따라 바뀔 수 있는 주요 환경설정값을 반영해 워드프레스 환경설정 파일을 수정해 줘야 한다.

3. 도메인과 기존 웹서버의 연결을 해제하고, 새 웹서버와 재연결을 해내는 것이 까다롭다. DNS 레코드를 수정해야 하는 것과 별개로, 웹호스팅 관리영역에서 웹서버에 도메인 정보를 연결하는 작업을 반드시 해 줘야 한다. 그리고 이게 제대로 처리됐는지 확인하는 과정에서 집에서 쓰는 인터넷공유기의 ‘DNS 릴레이’ 기능이 발목을 잡을 수 있다. DNS 기능이 마비되거나 잘못된 DNS를 참조해, 글로벌 DNS는 제대로 바뀌었는데 정작 공유기 때문에 확인이 안 될 수 있다.

수작업 이전을 하는 이유

워드프레스는 웹프로그래밍 언어 PHP로 제작된 소프트웨어다. 그래서 웹호스팅 서버가 PHP로 제작된 소프트웨어를 구동하려면 서버에 PHP 런타임 패키지를 설치해야 한다. 그런데 워드프레스 블로그를 몇년 운영하다 보면, 최초 사용했던 웹서버에 설치된 PHP 런타임 버전은 낡은 것이 돼 버린다. 현재 워드프레스 웹호스팅용 권장사항은 PHP 7.4 버전이다. 이 글을 쓰기 전 3년 넘게 써 온 웹호스팅 서버에는 PHP 7.0 버전이 설치돼 있고, 직접 업그레이드할 수 없다. 운영 중인 워드프레스 블로그를, 최신 PHP 버전이 설치된 새 웹호스팅서버로 옮기는 것이 유일한 선택지다.

사실 이런 상황에서 전문가에게 비용을 지불하면 안전하고 빠르게 이전이 가능하다. 그런데 왜 손수 품을 들여 이전을 하냐면, 블로그 총소유비용을 최소화해야 하기 때문이다. 속 편한 이전을 위해 한 차례 이전 비용을 지불한다면 앞으로도 이 비용은 계속 발생할 수밖에 없다. 소프트웨어는 계속 바뀌기 때문이다. 개인 블로그를 시한부로 운영하지 않는 한 워드프레스의 버전이 올라감에 따라 PHP 버전, 이밖에 다른 구성요소의 개선도 요구될 수 있다. 결국 이에 대응하려면 할 줄 모르는 것을 모르는 채로 놔 두면서 돈으로 때우는 것보단 내게 필요한 지식과 경험을 확보하는 것이 낫다.

201101 씀.