쪼랩 웹마스터의 웹호스팅 이전 경험기 (feat. 과부하유발계정 차단)

0
608

며칠 전 갑자기 운영하고 있는 커뮤니티 사이트가 트래픽 과부하라는 이름으로 사이트가 차단되었다. 차단한 이후 차단했다는 연락도 받지 못한 것과 차단될 만큼의 트래픽이 나지 않는 사이트라는 점을 때문에 심히 기분이 상해 호스팅 상품을 바꿨다. CS 수준 때문에 마음은 상했으나 가성비가 좋은 곳이라 안정적으로 운영할 수 있는 정도의 상품으로 이전했다. 기존에 들어가던 비용보다 7~8배 정도 상품비용이 올라갈 것 같다.

오류가 있다면 원인을 찾아 해결하겠으나, 사이트 자체가 차단되었고 다시 차단을 풀 수 없다는 매뉴얼스러운 대답만 반복하기 때문에 그냥 옮겼다. 실갱이 벌여봐야 이길 수 없는 상황일 것이다. 약관 또는 사이트 어딘가에는 트래픽 과부하는 차단할 수 있다는 내용이 들어 있을테니까, 아쉬운 사람이 옮겨야 하는 상황이다. 옮기면서 실행한 내용을 복기하여 공유한다. 엯촋들이 보면 별거 아닐 수 있겠으나 나 같은 쪼랩 웹마스터에게는 유용한 정보가 될 수도 있을테니까.

커뮤니티 사이트는 그누보드5 기반의 아미나 빌더로 만들었다. 그누보드5와 아미나 사이트에서 관련된 자료를 찾아가면서 웹호스팅을 이전했다.

1. 웹호스팅 상품 선택

기존에는 아주 가성비 높은 곳이었다. 1년 넘게 잘 사용했으니 ROI는 높은 상황이고, 커뮤니티 사이트의 인기가 올라가면서 언젠가는 옮겨야 했을 것이다. 이번에는 조금은 안정적으로 운영하기 위해서 독립웹호스팅을 신청했다. 월3만원 정도의 상품으로 선택했다. 트래픽을 쉐어하는 경우 언제 또 차단될지 모르기 때문에 아예 차단되지 않을 상품으로 선택했다. 사전에 커뮤니티 대장님께 컨펌 받았다.

2. 웹호스팅 계정 활성화

상품까지 선택하면 그 다음은 당연하게도 회원가입과 계정 활성화 작업을 해야한다. 가입하고 계정 정보를 입력한다. 이 계정정보가 FTP나 DB 등과도 모두 연관이 있기 때문에 신중하게 선택하는 것이 좋다.

3. 결제

돈을 내야 사용하지. 1년 단위로 결제하면 설치비를 면제해 준다는 문구 때문에 1년 결제했다. 어차피 옮기면 몇 년은 또 사용할테니까. 내 카드로 일시불 결재했다. 커뮤니티에 신청해서 받으면 되니까.

4. 이전 웹호스팅 자료 백업

사이트가 차단은 되었지만 관리 메뉴는 차단되지 않았고, FTP도 살아 있는 상태다. 관리메뉴에서 DB와 소스를 백업받았다. 일반적인 경우 백업하면 해당 계정에 별도 backup 폴더 등에 자동으로 저장될 것이다. 이전 웹호스팅 업체에도 이런 경우라서 백업한 후 FTP로 접속해서 백업받은 2개의 파일을 다운로드 받았다.

5. 새로운 웹호스팅 FTP로 백업 자료 업로드

백업을 받았으니 설치를 해야지. 웹호스팅의 경우 콘솔 기능을 지원하지 않기 때문에 설치는 요청하면 된다. 새롭게 받은 FTP 계정에 백업받은 자료를 업로드한다. 그런 후에 설치요청하면 업체에서 설치해 준다.

설치된 소스를 보면 data 폴더가 있다. 이 폴더 권한을 777로 주었다. 권한 때문에 data를 읽을 수 없다면 각종 이미지 리소스, dbconfig 파일 등을 사용할 수 없기 때문에 권한을 주었다. 보안상 위험할 수도 있다고 하는데, 일단 사이트가 열리는 것이 중요하니까. 털리면 다시 검색해서 권한 조정을 해야겠지.

6. 도메인 네임서버 변경

도메인을 관리하는 곳에 가서 네임서버 정보를 변경해야 한다. 네임버서는 도메인과 서버를 연결하는 주소라고 보면 된다. 사용자가 도메인에 접속했을 때 어느 서버 주소로 보내라는 정보를 입력하는 것이다. 정보를 변경하면 즉시 적용되지 않는다. 네트워크 중간 중간에 있는 캐시 정보들이 있기 때문에 전체적으로 변경되려면 시간이 필요하다. 최대 48시간까지도 소요된다고 알려져 있다.

7. 웹호스팅 계정과 도메인 연결

웹호스팅 계정에 도메인을 연결하는 관리 메뉴가 있을 것이다. 여기에 관련 정보를 입력해야 도메인이 웹호스팅에 정보를 보낼 때 어떤 계정에 연결할 수 있을지 파악할 수 있다. 폴더 경로까지도 명시할 수 있다. 예를 들어, www.buzzclass.kr 도메인이 연결되는 파일 경로가 ‘public_html/main/’ 이렇다고 해보자. 버클 사이트가 설치되어 있는 폴더가 main 폴더이다. 도메인 연결옵션에 /main/ 폴더 경로를 입력하지 않으면 버클의 초기 접속 경로가 www.buzzclass.kr/main/ 이렇게 되는 것이고, /main/을 입력하면 그냥 www.buzzlcass.kr로 접속되는 것이다. 깔끔한 주소를 원하면 폴더까지 지정하는 것이 좋다.

8. ssl 설치 및 적용

그 전에 사용하던 웹호스팅에는 무료로 사용할 수 있는 ssl 인증서인 https://letsencrypt.org/ 옵션이 있었다. 이번 호스팅에도 설치한 후 연동하는 옵션이 있어서 신청했다. 이 인증서는 일정기간 동안만 유효하도록 되어 있는데 연장 가능하다. 일반적으로 자동으로 연장되어 서비스에 문제 없도록 설정해 주는 것 같다. 설치비용은 www이 있는 도메인과 없는 도메인 2개를 신청해서 각각 설치해야 하기 때문에 2개 분량의 비용을 내야했다.

9. 그누보드의 dbconfig 수정

웹호스팅 계정이 중요하다고 이야기했었다. 왜냐하면 계정명이 DB 호스트명으로 기본 설정이 되기 때문이다. 이 중요한 것을 잊고 나는 그 전 사이트와 다른 새로운 계정명으로 회원가입을 해버린 것이다. 예를 들어, 이전에는 buzzclasslive 이렇게 되어 있었는데, 새로운 웹호스팅에는 buzzclass라고 한 것이다. 아차차, 이렇게 되니 사이트 소스가 DB와 통신하는데 문제가 생긴 것이다. 이전에는 buzzclasslive라는 DB를 찾아서 통신했는데, 지금은 그 DB 호스트가 없으니 먹통이 되버린 것이지.

그누보드5에는 dbdconfig 파일이 data 폴더 속에 들어가 있다.

data/dbconfig.php 이경로에 들어가서 소스 에티더로 dbconfig.php 파일을 연 후에 새로운 웹호스팅에 신청한 DB 관련 정보를 넣어야 한다. 계정 아이디를 webhosting_id라고 가정하고, DB 패스워드를 webhosting_db_pw라고 가정하면 다음과 같은 내용으로 수정하면 된다. 웹호스팅 신청할 때 DB패스워드는 따로 지정하도록 되어 있다. 웹호스팅 계정 패스워드와는 다른 패스워드를 사용해야만 한다.

<?php
if (!defined(‘_GNUBOARD_’)) exit;
define(‘G5_MYSQL_HOST’, ‘localhost’);
define(‘G5_MYSQL_USER’, ‘webhosting_id’);
define(‘G5_MYSQL_PASSWORD’, ‘webhosting_db_pw’);
define(‘G5_MYSQL_DB’, ‘webhosting_id’);
define(‘G5_MYSQL_SET_MODE’, true);

define(‘G5_TABLE_PREFIX’, ‘g5_’);

10. .htaccess 파일 수정

웹호스팅에 사용자가 접속했을 때 어떻게 사이트에서 동작하게 할 것인지 설정하는 기능이 있다. 웹호스팅의 루트 폴더인 public_html 속에 들어가면 .htaccess 파일이 있다. 루트 폴더명이 다르다면 그 루트 폴더에 들어가면 있을 것이다. 없으면 만들어 넣는다. 이곳에서 몇 가지 설정을 해야 내가 원하는 방식으로 사이트가 동작하더라.

일단, ssl 인증서를 적용했기 때문에 만드시 https를 사용하도록 설정해야만 했다. 그누보드의 config 파일에서도 https를 사용하도록 설정할 수 있다고 했는데, 나는 계속 실패해서 .htaccess 파일로 통제했다. 다음은 내가 사용한 .htaccess 파일의 예시이다.

나는 https로 무조건 주소가 바뀌도록 설정했다. http로 접속할 가능성을 원천 차단한 것이다. 사이트 주소가 무조건 https로 변경되는 옵션이 아래에 있다. 또한 www를 무조건 붙여서 도메인 주소가 나오도록 했다. 물론 www를 뗄 수도 있다. www를 떼고 싶으면 해당 옵션 앞에 있는 # 파일만 지우고, www 강제로 붙이는 곳에 # 를 넣으면 되겠다. 주석처리를 한다고 보면 된다.

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteRule ^ – [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ – [E=protossl:s]

# https 강제이동.
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# www 강제로 붙이기.
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# www 가 붙어있으면 떼기.
# RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
# RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

# 404 error
ErrorDocument 404 https://educolla.kr/error/index.html

</IfModule>

11. 엑박 뜨는 이미지 처리

위와 같이 하면 사이트는 정상적으로 동작할 것이다. 내 경우에는 그랬다. 그런데 사이트 중간 중간에 이미지가 엑박 뜨는 것들이 보였다. 소스를 보니 옮기면서 이미지의 절대경로가 바뀌어서 그런 것으로 추정된다. 그누보드의 경우 게시물 속에 이미지 절대경로가 모두 고정되어 들어가기 때문에 이전의 이미지 경로를 새로운 이미지 경로로 변경해야 한다. 게시물이 적을 때에는 수작업으로 phpmyadmin 들어가서 변경할 수 있겠지만, 게시물이 많기 때문에 다 찾을 수도 없어 검색했다. 어느 현자께서 소스를 짜 공유하셨더라. 아래와 같다.

<?php
include_once(‘./_common.php’);
// 도메인 변경 후 코드 처리 시작 – 한번 실행 후 완료
//변견 전 내용
$old=”http://abc/data”;
//변경 후 내용
$new=”https://xyz/data”;
$sql = sql_query(“select * from g5_board”);
while($data = sql_fetch_array($sql)){
echo”$data[bo_table]<br>”;
sql_query(“update g5_write_{$data[bo_table]} set wr_content=REPLACE(`wr_content`,’$old’,’$new’)”);
}
// // 도메인 변경 후 코드 처리 끝
?>

위의 소스를 특정한 php 파일로 저장한 후 웹주소창에 이 파일 경로를 타이핑하고 실행하면 된다. 게시물 실제 내용 속에 들어가 있던 이미지의 절대경로 위치를 한꺼번에 바꿀 수 있다. 편리하지만 잘못 실행하면 황당한 상황이 만들어 질 수 있으니 주의해야 한다. 그리고 이 파일의 경로를 노출하면 안된다. 누군가가 그 파일을 실행하면 나도 모르게 사이트가 홀라당 망가질 수도 있으니까.

자, 이렇게 하면 끝난다. 순서대로 죽 적어서 그렇지 중간 중간에 사이트가 동작하지 않는 것을 발견하고 이유를 추정한 후 검색하여 해결한 나름의 노하우(?)가 적용된 글이라고 볼 수 있다. 본업이 웹마스터가 아니다 보니 이런 문제가 발생했을 때 한꺼번에 후루룩 해결이 안되더라. 까먹으면 기억을 더듬고 검색하고 하면서 해결해야 하니 시간이 오래걸리더라. 나이 먹으니 더 쉽게 까먹게 되니 서글프다. 어차피 또 까먹겠지만 한번 더 기록하면 그나마 낫겠지하는 심정으로 복기해 본다. 사이트여, 죽거나 차단되지 말지어다. 매우 귀찮아지니까.