XpressEngine, PHP5.5 + MySQL에서 PHP7.0 + MariaDB로 갈아탄 후기

Posted by 적분 ∫2tdt=t²+c
2015.12.21 00:31 프로그래밍

그동안은 살아있는 라틴어를 비롯해 여러 자매 사이트를 cafe24에서 PHP 호스팅 받아서 물려놓았었습니다. 처음엔 카페24 웹 호스팅으로도 충분히 돌아가는 가벼운 사이트였기 때문에 아무런 문제가 없었습니다. 그런데 사이트에 이 기능/저 기능 얹다보니 조금 조금 무거워지더니, MorPHP까지 올리니 사전 열람하는데 너무 느려진거죠. 웹 호스팅에서 할수있는 최적화란 최적화는 다 해보았는데도 별 진전이 없었습니다. 그래서 아예 가상 서버 호스팅은 어떨까 싶어서 여기저기 뒤져보다가 linode에서 월$10짜리 플랜을 구매해버리고 말았습니다. 그래서 갑작스럽게 서버 이전을 하게 되었죠.



기존에 사용하던 카페24 호스팅 사양


요녀석을 쓰고 있었습니다. 하드나 트래픽 용량은 모자라지 않았는데, DB가 1기가 넘게 있어서 얘 때문에 좀 고생이 많았죠. 카페24 웹 호스팅 DB용량은 '서버내 무제한'입니다. 이게 무제한은 무제한인데, 정작 DB로 무거운 처리를 하다보면 임시공간이 부족하다는 이유로 실패하고 맙니다. 이제 가상 서버 호스팅으로 옮겼으니, 예전에 못하던 프로젝트도 다시 이어갈 수 있게됐습니다!



왼쪽이 갈아탄 Linode 가상 서버 호스팅 사양.

이걸 지르게 되는 바람에... (이런 사양이 10달라밖에 안한다고해서 지를수 밖에 없었습니다. 물론 카페24에서 돌리던 PHP호스팅이랑 JSP호스팅 합친 비용보다 이거 비용이 몇 배나 더 비싸긴하지만) 


OS설치는 우분투로 했습니다. 옛날에 몇번 깔아본적이 있어서 친근해서 그냥 골랐죠.


서버세팅을 처음 해보는거라 걱정 많이 했는데, 이런식으로 웹용 SSH 클라이언트도 제공해줘서 뭐 따로 깔지 않고도 바로 작업을 시작할 수 있었습니다.


NGINX + PHP7 + MariaDB 설치는 아래 포스트를 보고 따라하니깐 그냥 됐습니다.


http://blog.lael.be/post/2600


설명대로 쭉 해서 PHP7 설치하고 nginx설치하고 MariaDB까지 최신버전으로 설치했습니다. 설치가 잘 됐는지 확인해보려고 phpMyAdmin을 깔았는데, 이상하게 안되는 겁니다.

mysqli 확장모듈을 불러올 수 없습니다.


다 잘했는데 왜 안되는가 싶어서 여기저기 찾아보느라 시간이 좀 걸렸습니다.

결론은 PHP7만 깐다고 자동으로 mysqli 확장기능이 설치되는게 아니라서 또 설치를 해줘야하는거였습니다.


~# apt search php7.0

위 구문처럼 apt를 이용해서 php7.0 관련 확장기능을 검색할 수 있습니다. 찾아보니 php7.0-mysql 녀석이 있더라구요.


~# apt-get install php7.0-mysql

이렇게 해서 php7.0용 mysql모듈을 설치해주니 본격적으로 PHP7 + MariaDB가 돌아가기 시작했습니다.


야호!


그리고 예전 호스팅에 있던 DB랑 데이터를 백업받아서 옮겨줬습니다.

DB는 phpMyAdmin을 이용하면 쉽게 이동 가능합니다.


phpMyAdmin으로 접속하고 난뒤 새 데이터베이스를 하나 만들어주고



가져오기 메뉴를 선택하고 백업받은 DB 덤프파일을 올려주면 됩니다. 덤프 파일이 용량이 큰데 zip으로 압축 안되어있다면, 압축해서 올리는게 더 낫습니다. (물론 압축푸는데 시간이 걸리긴합니다.)


여기서 난관이 하나 있었는데, 처음 PHP를 설치하고 나면, 업로드 용량 제한이 낮게 걸려 있어서 큰 DB 덤프를 올리기 어렵다는 것입니다. php.ini를 수정해서 그 값을 올려줘야합니다.


post_max_size = 50M

upload_max_filesize = 5M

이 두값을 php.ini (경로는 /etc/php/7.0/fpm)에서 찾아서 수정해줘야합니다. 근데 어떻게..? 리눅스에 친숙한 사람들이라면 vi, nano등을 자유자재로 쓰겠지만, 전 아니라서 SFTP로 접속해서 해당 파일을 다운받은 뒤 수정해서 다시 올렸습니다. Filezilla로도 SFTP 접속할 수 있어서 아주 편리했습니다.


백업 받은 데이터를 이동하는 것도 어렵지 않았습니다. 카페24에서는 백업 파일을 .tar.gz로 압축해서 줍니다. 이걸 SFTP를 이용해 서버로 올리고 서버에서 압축을 풀어주면 이동 끝.

tar.gz 압축해제는 다음 명령을 이용하면 된답니다.

~# tar -zxvf backupfile.tar.gz

이 명령을 실행하면 압축 푼 파일이 같은 디렉토리에 들어갑니다. 아무 생각 없이 다른곳에 압축풀어놓고 일일히 다 옮기는 멍청한 짓을 하지 마시길 바랍니다.


XpressEngine 재설정하기

이론상 데이터랑 DB를 통째로 옮겼으니, 설정만 잘 맞춰주면 그대로 돌아가야합니다. 가장 중요한게 FTP설정이랑 DB설정인데, 이 녀석을 반드시 바꿔줘야 XE가 잘 작동하겠죠. 이 설정 파일들은 xe디렉토리의 /files/config 폴더 안에 있습니다. db.confing.php와 ftp.config.php입니다. 역시나 SFTP를 이용해서 편하게 편집했습니다. 손봐야할 것은

db_type: 만약 mysql로 되어 있으면 mysqli로 고쳐야합니다.

db_hostname : 대게 127.0.0.1, db_userid : 새 계정ID, db_password : 새 계정 비번, db_database : 새로 만든 DB이름

요 4개입니다.


그리고 캐시파일을 다 날려주고 새로 만들어야 합니다. 일일히 지우려면 번거로우니 cd 명령어로 xe디렉토리로 들어가서

~# rm -r -f files/cache

위 명령어로 한방에 날려주면 금방 끝납니다.


처음 데이터를 옮겨놓으면 파일권한이 다 700으로 잡혀서 XE가 원활히 작동 안합니다. 777로 만들어줘야하죠.

~# chmod -R 777 xe

여기서 xe는 xe가 설치된 디렉토리를 가리킵니다. 위 명령어로 xe가 깔린 디렉토리 권한을 다 777로 맞춰줬습니다. 여기까지 하니 XE는 잘 작동합니다.


PHP5에서 7로 이전하기

문제는 php5에서 쓰이던 코드들이 7에서 안 돌아갈 가능성이 높다는 겁니다. php의 p자도 모르고 개발을 했을때 mysql_ 함수들을 남발했었는데, 그때 싸놓은 똥을 오늘 다 치우느라 고생했습니다. php5 시절부터 mysql_함수는 deprecated되어 조만간 사라질거라고 계속 그러더니 php7에서는 mysql_이 아예 빠졌습니다. mysql API를 쓴 코드를 다 수정해야했습니다.

그 외에도 사소하게 동작이 바뀐 함수들 때문에 코드를 좀 손 봐야했습니다. substr함수가 FALSE를 리턴하는 경우가 좀 바뀌었더라구요.


백업 설정하기

카페24는 자동으로 DB랑 데이터 백업을 매일 해주는데, 가상 서버 호스팅을 할 경우, 백업은 순수 사용자의 몫이 됩니다. 아래 페이지를 참고해서 자동 백업을 설정했습니다.

http://blog.lael.be/post/1449


이렇게 해서 이틀간의 서버 이동 삽질이 끝났습니다. 성능은 얼마나 향상되었을까요?


예전 서버랑 새 서버랑 여러번씩 로딩하면서 평균 시간을 측정해봤습니다.

 

 응답시간

 다운시간

 총 로드 시간

 카페24 웹 호스팅

 : PHP5, MySQL

 290ms

 50ms

 340ms

 Linode1024 가상 서버

 : PHP7, MariaDB

 160ms

 140ms

 300ms


서버 응답시간은 역시 PHP7, MariaDB가 압도적으로 향상됐습니다. 거의 2배 빨라졌네요. 그런데 해외 호스팅이다보니 페이지 다운로드 시간이 좀 걸립니다... 그래서 전반적인 체감 속도는 차이가 없네요...!



무거운 작업을 올릴수록 비싼 값을 할거라 위안을 삼으며 이렇게 삽질을 마무리합니다.

이 댓글을 비밀 댓글로
    • 김동민
    • 2016.08.24 13:17
    안녕하세요. php5+mysql 에서 php7+mariaDB 로 갈아타려고 찾아보다가 좋은 글 봐서 댓글 남깁니다. 몇가지 질문 드리고 싶어서요. 지금 제가 php 5.2라.. 7로 버전업을 하는게 거의 불가피 할 것 같은데 너무 초짜이다보니... windows 환경에서 하고 있는데 적당히 이 글 따라하면 될까요? 그리고 그 이부분이 제일 걸리는데 '문제는 php5에서 쓰이던 코드들이 7에서 안 돌아갈 가능성이 높다는 겁니다. php의 p자도 모르고 개발을 했을때 mysql_ 함수들을 남발했었는데, 그때 싸놓은 똥을 오늘 다 치우느라 고생했습니다.' 지금 mysql 함수 엄청 많이 쓰고 있는데 mysql 함수 안쓰고 DB접근하는 방법이 따로 있는건가요?? 말씀하신 대로라면 mysql 함수 쓰는 버릇부터 고쳐야 될 것 같은데 저는 이게 작성자분 말씀대로 똥인지도 모르고 좋다고 쓰고 있었네요. 코드가 수천줄 짜리가 너무 많은데 이걸 일일히 다 바꿀 생각 하니 막막하기도 하고..ㅋ 댓글 달아주시거나 괜찮으시면 kdm71@icomer.com 으로 답면 주실 수 있나요? 딱히 주변에 물어볼 만한 사람이 없어서 염치 무릎쓰고 댓글 올립니다ㅠㅜ
    • 윈도우의 경우는 리눅스처럼 커맨드를 이용해서 설치하는게 어려우니 직접 php7, mariadb를 설치하셔야될거구요

      php5에서는 mysql_계열 함수들이 지원되지만, php7부터는 mysql_계열은 지원안되고, mysqli_계열들만 지원됩니다. mysql 함수 전체가 사용불가능한건 아니에요.
      • 김동민
      • 2016.08.26 12:09
      일단 php7 mariaDB로 갈아타기는 했습니다. mysqli 함수도 못쓰는건가 하고 있다가 알아보니깐 가능하다고 해서 mysql 함수를 전부 mysqli로 바꾸는 중 입니다. mysql함수가 똥인거를 미리 알았더라면 이 짓은 안했을텐데.. 여튼 감사합니다 늦게라도 알아서 다행이네요.
    • 다행이네요. 업그레이드 잘 성공하시길 바랍니다!