1. 다시 백업에 대해서 고민하다.

지난 해 6월 나야나 램섬웨어를 계기로 백업에 많은 신경을 써왔는데요. 그럼에도 불구하고 아직도 많이 부족하다는 생각을 지울 수 없었습니다.

▽ 당시 업계를 충격에 빠뜨린 인터넷 나야나 램섬웨어 감염 경로,
이미지 소스 – 미래부

인터넷 나야나 램섬웨어 감염 경로_미래부

백업에 신경은 쓴다고 하지만 Vultr에서 제공하는 Snapshot, 부정기적으로 PC로 다운 받는 것과 같은 매뉴얼 작업이라 꼭 필요한 시기에 도움이 된다는 확신이 없었죠..

올 들어와 워드프레스 최적화와 가상서버 운영 방법에 대해서 조금 체계적으로 정리하면서 백업에 대해서도 제대로 체계를 세우고, 자동 백업이 제대로 작동하도록 하고(예전에는 자동 백업을 설정했지만 제대로 작동이 되지는 않았습니다.) 추가 백업을 보완했습니다.

프로그래밍 실력이 달리기 때문에 기존에 알려진 방법 및 고수분들께서 한두마디 조언해주신 것을 토대로 나름 체계적인 백업 계획을 세웠고, 기존에 알았던 방식이 제대로 작동하도록 세밀하게 작동 조건들을 적용했습니다.

그 결과 백업 시스템이 나름 톱니바퀴처럼 착착 작동되어, 이제는 어느 정도 안심할 수 있는 수준이 되었습니다. 아래는 이 백업 시스템(?)에 대해서 간략히 설명해 보도록 하겠습니다.

2. 안심이 되는 가상 서버 백업 시스템 구축

백업시스템이라고까지는 할 수 없을지 모르지만 개인 사이트 운영자 입장에서는 엄청 뿌뜻한 내용으로 감히 시스템이라는 단어를 사용해 봅니다.

아래 플로우 차트는 이번에 구성한 백업 체계도입니다. 데이타베이스의 경우 최대 7번 백업이 되도록 여러 단계에 걸쳐 백업이 진행되도록 했습니다.

▽ 서버 및 워드프레스 백업 시스템 플로우 차트 by Happist

서버 및 워드프레스 백업 시스템 플로우 차트 Flow Chart

① Vultr에서 제공하는 Auto back up 서비스 : 서비스 플랜 비용의 20% 비용 청구(10$ 플랜이면 2$ 소요)

② Vultr Manual Snapshot : 무료

  • 1일 ~ 2일에 한번 Manual Back up
  • 서버 작업 전 Snapshot back up 진행

③ Crontab 활용 Auto Back-up 및 서버 저장(/backup)

  • Database : 매시간 Backup

④ Dropbox Uploader + Crontab

  • Database : 3시간 마다
  • Data : 12시간마다
  • Full Back up : 1주일마다

⑤ Dropbox → Google DriveⅠ

  • Database : 3시간 마다
  • Data : 12시간마다

⑥ Dropbox → Google DriveⅡ

  • Database : 3시간 마다
  • Data : 12시간마다

⑦ PC Manual Back up

  • 부정기적
  • Full Back up

위에서 소개한 7가지 백업 솔류션에 대해서 간략히 살펴 보도록 하겠습니다.

3. 서버 내에서 백업

위의 백업 시스템은 크게 가상 서버 내에서 이루어지는 백업과 가상 서버 외로 백업하는 둑지 종류로 나누오 질 수 있습니다.
이를 각각 나누어 서버내에서 이루어지는 백업에 대한 설명을 하고 이어서 서버 외로 백업하는 방법에 대해서 설명하겠습니다.

3.1. 서버 업체의 정기 백업 서비스 이용(유료)

웹호스팅업체는 기본적으로 자체 백업을 해줍니다. 그러나 점차 백업은 사용자의 소관이라는 인식이 늘어나면서 웹호스팅이라도 본인 스스로 백업을 챙겨야 하는 시대입니다.
예전 스마일서브를 사용하던 시기에 백업데이타로 전일치로 돌려달라고 했더니 자기는 1주일전치만 보관한다며 백업을 사용자 소관이라고 (냉냉하게)이야기하더군요. 그럴바에는 왜 웹 호스팅을 이용하는지?? 그런 의문을 품었습니다. 차라리 서버를 운영하고 말겠다는 생각을 했습니다.

아무튼 가상서버 운영시에는 전부 사용자의 책임이므로 스스로 백업 전체를 챙겨야 합니다. 이런 가상서버에서도 비록 유료이지만 백업 서비스를 이용하는 방법이 있습니다.

Vultr는 매일 백업 서비스는 플랜 가격의 20%를 받습니다. 5$ 플랜는 1$을. 10$ 플랜이라면 2$을 받습니다.

linode를 보니 스탠다드 플랜의 1GB 백업 공간을 제공하는 서비스의 경우 월 2$, 2GB는 2.5$, 4GB는 5$식으로 비용을 받고 있습니다.

3.2. Snapshot 서비스 이용(Vultr 무료)

스냅샷(Snapshot) 백업이란 가상 서버나 리얼 서버의 설치 및 작동 상태 그대로 마치 사진을 찍어 놓듯이 그대로 저장하는 것을 말합니다. 이렇게 찍어 둔 또는 떠놓은 스냅샷(Snapshot) 백업은 필요한 경우 스냅샷 저장 그 순 간 그대로 되돌릴 수 있으므로 문제가 발생 시 간편하게 스냅샷(Snapshot) 저잘 순가능로 되돌아 갈 수 있습니다.

가상 서버 업체 대부분 스냅샷(Snapshot) 기능을 제공하고 있는데요. 대부분 유료로 서비스하지만 Vultr는 11개까지 스냅샷(Snapshot) 백업을 무료로 제공하고 있어 유용합니다.
이 Snapshot을 자동으로 만들 수 있으면 금상첨화이지만 유감스럽게 그런 기능은 없습니다. 아마 자동 스냅샷(Snapshot) 기능이 있다면 업체가 제공하는 백업 서비스가 무력화 될 것 같습니다.
아쉽지만 주요 작업 전에 수작업으로 Snapshot을 만들고 작업을 시작하면 비전문가에게는 큰 도움이 됩니다.
서버 작업은 민감한 부분을 건들일 가능성이 높습니다. 그러다가 가끔 시스템이 죽는 경우가 생기고 전혀 원인을 알 수 없는 경우가 많습니다. 이럴때는 바로 Snapshot으로 복구하면 90%이상은 해결이 됩니다.

제가 vultr을 계속 사용하는 이유중의 하나가 바로 이 Snapshot을 무료로 사용할 수 있어서 입니다. 이게 없었다면 초심자로써 서버 운영이 엄청 힘들었고 과감하게 이런 저런 시도를 해볼 수 없었고 이렇게 성장할 수 도 없었을 것입니다.

▽ Vultr에서 제공하는 스냅샷(Snapshot) 백업 List

Vultr 설치_Snapshot 2018-01-19 at 20.06.09

3. 3. 서버 내 데이타베이스 및 데이타의 정기 백업

서버 내에 백업데이타를 두는 것이 도움이 될 확율이 반반쯤 되는 것 같습니다. 많은 경우 여러가지 이유로 시스템에 접속이 안되는 경우도 생기는데 이때 서버 안의 내용은 전혀 도움이 안됩니다. 접근할 수 없거든요.

그렇지만 그외 nginx는 멀쩡하게 작동하는데 사이트 자체가 작동하지 않는 경우 등등은 도움이 되는데요. 이때는 가능하면 가장 최근 작업분까지가 포함되 있으면 거의 완벽한 복구가 될 수 있습니다.
그렇기에 서버내에서는 트래픽, 용량 걱정없이 최대한 짧은 기간동안 백업 사이클이 돌 수 있도록 만드는게 필요합니다.

제가 사용하는 Vultr 10# 플랜은 SSD 용량을 40G를 주는데요. 30%도 사용하지 못하고 있습니다. 이렇게 남아 도는 SSD 용량을 백업 데이타 공간으로 활용하는 것은 지극히 타당하겠죠.

데이타베이스가 계속 데이타를 쌓아가기 때문에 백업 디렉토리를 만들고 여기에 매시간 데이타베이스 전체를 백업토록 했습니다.

아래는 서버 내에서 1시간 단위로 백업이 이루어지도록 backup 디렉토리를 만들고 매시간 백업이 되도록 크론탭 설정내용입니다.

3.3.1 백업 디텍토리 및 백업 스크립트 만들기

# mkdir /backup         # backup 디렉토리 만들기
# chmod +x  /backup  # 퍼미션 조정

이어서 백업 스크립트를 만듭니다.

# cd
# nano dbbackup-server.sh   # nano 편집기로 dbbackup.sh를 편집

백업 스크립트 내용은 아래와 같이 만듭니다.

#!/bin/bash
mysqldump --opt --single-transaction -u root -p[password] [database name] > /backup/"[database name]$(date +%Y%m%d%H%M%S).sql
find /backup/ -type f -mtime +48 | sort | xargs rm -f

그리고 백업 스크립트에 실행 권한을 줍니다.

# chmod +x dbbackup-server.sh

3.3.2. 크론탭 설정

크론탭에서 매시간 작업토록 설정

# crontab -e
55 * * * * /root/dbbackup-server.sh 1>/dev/null 2>/dev/null

4. 서버 외부로 백업하고 다중 안전 백업 시스템 구축하기

서버내에서 백업을 받아 놓는 것도 필요하지만 백업본을 외부에 정기적으로 백업하는게 필요합니다. 서버 자체가 날라가는 경우를 대비해야 하기 때문이죠.

그리고 종종 서버 자체 접속이 안되는 경우도 생깁니다. (어디 설정을 잘못 만졌기 때문이겠지만) 어느 순간 SFTP나 SSH 접속이 불가한 경우 생깁니다. 전문가라면 다른 바법을 찾을 수 있겠지만 이 경우는 Snapshot 또는 업체 백업본으로 되 살리던지 아니면 서버 세팅을 새로하는 불쌍사가 생기기도 하죠.
저는 이런 경우를 두번인가 만났습니다. Vultr에서도 SSH연결등은 자기들도 할 수 없는 거라해서 눈물을 머금고 조금 오래전에 떠논 Snapshot으로 복구하고 한적이 한번 있고, 한번은 Snapshot도 안먹혀서 서버를 새로 설치한 경우도 있습니다.

흔하지는 않지만 외부 백업이 필요한 경우가 있으니 보험 차원에서 백업 시스템을 갖추는 게 필요합니다.
서버 외부에 백업 받는 방법은 많이 있습니다. 외부 백업 서비스 업체도 있고, 워드프레스 사용자라면 백업 플러그인들의 도움을 받을 수 있습니다. 이들 중에는 클라우드로 올려 저장해주는 기능도 있으며 (비록 유료이지만) Dropbox, 구글 클라우드 등 여러 군데로 동시에 백업을 해주는 플러그인도 있습니다.

예를 들어 현재 100만명 이상이 설치했다는 UpdraftPlus WordPress Backup Plugin이 대표적인 것이죠. 이플러그인의 무료 버젼은 구를 드라이브 등 클라우드 한 군데에 저장할 수 있지만 유료인 프리미엄 버젼은 여러 클라우드에 동시에 백업을 받을 수 있고 백업 시간도 매우 정교하게 설정할 수 있습니다.

여기에서는 별도의 비용을 들이지 않고 자동으로 정기적으로 백업을 할 수 있는 드롭박스(Dropbox)의 Uploader 기능을 활용해 서버에서 Dropbox로 백업을 받고, 이를 다시 구글 드라이브로 추가 백업을 하는 방법을 설명하겠습니다.

아래는 위 전체 백업 시스템에소도 소개했지만 서버 외부에서 백업이 이루어지는 Flow chart입니다.
서버 – Dropbox – 구글 드라이브 – 사용자 PC로 이어지는 백업 흐름을 정리한 것입니다.

서버 - Dropbox - 구글 드라이브 - 사용자 PC로 이어지는 백업 흐름도 작성 Happist

4.1. 서버 외부로 정기 백업 : 드롭박스(Dropbox)로 백업 받는 방법

먼저 서버에서 Dropbox로 백업하는 방법입니다. 이는 Dropbox에서 제공하는 Uploader 기능을 활용하는 것인데요. 클라우드 서비스중에서도 Dropbox는 서버와의 연동 등 서버 관련 기능들을 잘 구현해 놓았습니다.

4.1.1. Dropbox-Uploader 설치

서버에서 드롭박스로 파일을 올려주는 프로그램인 Dropbox-Uploader를 설치 합니다.

cd /usr/bin
git clone https://github.com/andreafabrizi/Dropbox-Uploader/

4.1.2. Dropbox-Uploader 설정

이 다음에는 스크립트에 실행 권한을 부여하고 실행합니다. 처음 실행하면 여러분의 드롭박스 계정에 Dropbox-Uploader를 연결하는 작업을 실행하게 됩니다.

cd /usr/bin/Dropbox-Uploader
chmod +x dropbox_uploader.sh
./dropbox_uploader.sh

이러면 Access token을 입력하라고 하는데요.

Access Token을 받을 수 있는 https://www.dropbox.com/developers/apps로 이동해서

  • 첫번째 단계로 Create App을 선택
  • 둘번째 단계는 이어 나오는 화면에서 API로 ‘Dropbox API app’을 선택하고 Type은 Full Drop Box를 선택하고 적당한 이름(저는 MyUploader_happist라고 했음)을 넣습니다.
  • 세번째 단계는 새로운 App인 MyUploader_happist를 세팅하는 단계로 여기에서 Generated access token 버튼을 눌러서 토큰을 생성합니다. 그러면 아주 긴 토큰이 형성되는데요. 이 토튼을 복사해 터미널에 붙입니다.

4.1.3. 드롭박스 업로드 스크립트

이 단계는 드롭박스 업로더 할 업로드 스크립트를 만드는 단계입니다.

# cd
# nano dbbackup.sh   # nano 편집기로 dbbackup.sh를 편집

백업 스크립트 내용은 아래와 같이 만듭니다.

#!/bin/bash
mysqldump --opt --single-transaction -u root -p[password] [database name] > wpbackup.sql
tar -zcvf wpbackup.tgz wpbackup.sql*
#tar -zcvf 'date +%F%T'.tar wpbackup.*
rm *.sql*
/usr/bin/Dropbox-Uploader/dropbox_uploader.sh upload wpbackup.tgz /myDB/"wpbackup$(date +%y%m%d%H%M).tgz"

그리고 백업 스크립트에 실행 권한을 줍니다.

# chmod +x dbbackup.sh

4.1.4. 크론탭 설정

크론탭에서 매일 4시와 21시에 작업토록 설정

# crontab -e
0 4 * * * /root/dbbackup.sh 1>/dev/null 2>/dev/null
0 21 * * * /root/dbbackup.sh 1>/dev/null 2>/dev/null

드롭박스(Dropbox)에 파일을 올릴 수 있도록 설정하는 방법은 복잡하므로 아래 포스팅을 참조해 주시기 바랍니다.

랜섬웨어 대응, 매일 매일 자동으로 드롭박스(Dropbox)로 백업 받는 방법

4.2. IFTTT기능을 활용해 Dropbox에서 구글 드라이브로 3차 백업

위에서 서버에서 Dropbox로 백업하는 방법을 설명했지만 위험을 분산하기 위해서 추가로 구글 드라이브에 백업 추가토록 하겠습니다. 여러 프로젝트를 진행하면서 여러개의 구글 계정을 만들었고 각 계정당 15GB 용량을 주기때문에 이를 최대한 활용하고자 하였습니다.

그래서 Dropbox에서 2개의 구글 드라이브로 자동 백업토록 설정했습니다. 이처럼 Dropbox에서 자동으로 구글 드라이브로 파일을 보내는 방법은 크게 두가지 정도가 있습니다.

첫째는 IFTTT 기능을 이용하는 방법이고
둘째는 클라우드간 파일 전송 서비스를 이용하는 것입니다. 여기에는 zapier이나 multCloud같은 업체가 있습니다.

IFTTT를 활용하면 간편하긴 하지만 용량이 30MB로 제한됩니다. 그리고 동시에 2군데 구글 드라이브로 보낼 수도 없습니다. 반면 zapier는 용량도 100MB로 크고, 동시에 여러군데로 보낼 수 있으며 이 또한 무료 플랜으로 사용할 수 있습니다.

아래에서는 zapier를 활용하는 방법을 자세히 설명하겠습니다.

4.2.1. zapier 세팅

zapier에는 굉장히 많은 서비스가 있기 때문에 Dropbox와 Google Drive로 검색해 “Copy new Dropbox files to Google Drive”를 선택합니다.

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 선택_screencapture-zapier-apps-integrations-1516622360594

4.2.2. Copy new Dropbox files to Google Drive

처음으로 나오는 화면입니다.
여기서 어떻게 작동하는지, 무엇이 필요한지 설명하고있습니다. 그냥 Create this Zap버튼을 누릅니다.

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 기능 설정_screencapture-zapier-app-editor-template-168-1516622447259

4.2.3. Dropbox Trigger

Dropbox에서 어떤 조건에서 작동할 것인지를 선택하는데요.

딱 하나이 조건밖에 없습니다. New File in Folder

계속하기를 누릅니다.

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 기능 설정_Dropbox trigger 설정_screencapture-zapier-app-editor-31614783-nodes-31614783-action-1516622524727

4.2.4. Select Dropbox Account

여기서는 Dropbox 계정을 선택합니다.
Connect an Account 버튼을 눌러 Dropbox 계정을 선택할 수 있습니다.

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 기능 설정_Dropbox 계정 선택_screencapture-zapier-app-editor-31614783-nodes-31614783-auth-1516622635183

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 기능 설정_Dropbox 계정 선택_계정 확정

Dropbox 계정을 선택했으면 저장하고 계속하기 버튼(Save+Continue)을 누릅니다.

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 기능 설정_Dropbox 계정 선택_계정 확정+저장

4.2.5. Set up Dropbox File

이 단계는 작업할 Dropbox 폴더를 선택합니다. 이 폴더에 파일이 생성 또는 추가되면 자동으로 추가된 파일을 구글 드라이브로 보내게 됩니다.

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 기능 설정_Dropbox 계정 선택_계정 확정+저장_디렉토리 설정

4.2.6. Test Dropbox

제대로 Dropbox에서 작동하는지 테스트하는 단계입니다.

Fetch & Continue 버튼을 누릅니다. 그러면 테스트를 시작합니다.

Zapier 사용법_Test Dropbox

테스트 완료된 화면, 여기에서 Continue를 눌러 다음 단계로 이동합니다. 여기까지하면 Dropbox관련 설정은 모두 끝납니다.

Zapier 사용법_Dropbox에서 구글 드라이브로 복사 기능 설정_Dropbox 계정 선택_계정 확정+저장_디렉토리 설정+테스트

4.2.7. Google Drive Action

이제는 Google Drive에서 어떤 액션을 할지 정의하는 단계입니다.

여기도 딱 하나의 옵션밖에 없습니다.

Upload File
Copies an existing file from another service to Google Drive.

Zapier 사용법_구글 드라이브 설정 Upload Files

4.2.8. Select Google Drive Account

이제 파일을 보낼 구글 드라이브를 선택합니다. 그리고 필요하면 Test해 봅니다.

그리고 Save+Continue 버튼을 눌러 계속합니다.

Zapier 사용법_구글 드라이브 설정_구글 계정 확정 후 저장

4.2.9. Set up Google Drive Upload File

구글 드라이브의 어떤 폴더에 저장할지를 정하고, 테스트를 위해서 Dropbox에 파일이 있는지 확인합니다. 파일이 있어야 테스트를 할 수 있으니깐요.

Zapier 사용법_구글 드라이브 설정_업로드 파일 셋업 Set up Google Drive Upload File

다음 단계에는 Test를 진행하는 단계인데요.
왼쪽 아래에 있는 Skip Test를 눌러서 그냥 넘어갈 수 있습니다.

Zapier 사용법_구글 드라이브 설정_테스트 성공

테스트 완료 후 Finish를 누르면 Awesome! Your Zap is working.이라는 메세지가 나오면서 설정이 완료됩니다.

Zapier 사용법_구글 드라이브 설정_완료

만약 구글 드라이브가 여러개 있고 안전을 위해 동시에 백업받기를 원하면 Make another Zap 버튼을 눌러 앞에서 진행한 프로세스를 다시 밟아줍니다.

그러면 하나의 파일을 여러 구글드라이브로 동시에 보내줄 수 있습니다.

Dropbox에서 구글 드라이브 동기화로 자동 백업을 가능케하는 방법에 대해서는 아래 포스팅을 참조하시기 바랍니다.

IFTTT 이용, 드롭박스와 구글 드라이브 동기화 방법 – 자동으로 파일 보내기

10$ 제휴 프로모션으로 Vultr 가입하기

  • 1
    Share