DAY 09: 백업 센티넬

LinuxBeginner
지금 연습하기

소개

당신은 유망한 기술 스타트업의 신임 시스템 관리자인 "백업 센티넬(Backup Sentinel)"입니다. 최근 발생한 경미한 전력 급증으로 서버에 오류가 생겨 중요하지 않은 로그 파일이 일시적으로 손상되었습니다. 이번에는 중요한 데이터 손실은 없었지만, 이는 심각한 경고였습니다.

CTO는 당신에게 중요한 임무를 맡겼습니다. 바로 오늘 당장 회사의 메인 애플리케이션 서버를 위한 강력한 백업 및 복구 전략을 구현하는 것입니다. 이제 사용자 데이터, 애플리케이션 설정, 그리고 중요한 로그의 무결성이 당신의 손에 달려 있습니다.

지금이 바로 당신의 능력을 보여줄 기회입니다. 백업 프로세스를 성공적으로 생성, 검증 및 자동화함으로써 회사의 가장 소중한 자산인 데이터를 보호할 뿐만 아니라, 디지털 인프라의 필수적인 수호자임을 증명하게 될 것입니다. 시스템은 가동 중이고 시간은 흐르고 있습니다. 이제 작업을 시작합시다.

중요 공지
이후의 챌린지는 Quick Start with Linux 과정의 범위를 벗어날 수 있습니다.
챌린지 도중 어려움을 겪는 경우:
  1. 해당 챌린지를 잠시 건너뛰고 Linux 학습 경로의 후속 가이드 실습을 계속 진행하세요.
  2. Labby와 상의하거나 솔루션을 확인하세요.

백업할 중요 데이터 식별

백업을 생성하기 전, 첫 번째 작업은 어떤 데이터가 중요한지 식별하는 것입니다. 전체 시스템 백업은 종종 비효율적입니다. 우리 애플리케이션 서버에서 가장 중요한 자산은 data, config, logs 디렉토리에 있습니다.

백업 프로세스를 깔끔하고 관리하기 쉽게 만들기 위해, 백업하려는 모든 디렉토리 목록을 담은 파일을 생성할 것입니다. 이 목록은 백업 스크립트의 매니페스트(manifest) 역할을 합니다.

작업

  • ~/project 디렉토리에 backup-list.txt라는 파일을 생성합니다.
  • 이 파일에는 백업할 세 개의 중요 디렉토리에 대한 상대 경로가 포함되어야 하며, 각 경로는 새 줄에 작성해야 합니다.

요구 사항

  • 파일 이름은 정확히 backup-list.txt여야 합니다.
  • 파일은 ~/project 디렉토리에 위치해야 합니다.
  • 파일에는 다음 세 가지 항목이 각각 한 줄씩 포함되어야 합니다:
    • data
    • config
    • logs

예시

backup-list.txt 파일을 생성한 후, 프로젝트 디렉토리에는 기존 디렉토리와 함께 새로운 매니페스트 파일이 포함되어야 합니다:

~/project/
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

cat backup-list.txt를 실행하면 세 개의 중요 디렉토리가 나열되어야 합니다:

data
config
logs

힌트

  • nano와 같은 텍스트 편집기를 사용하여 파일을 생성하고 편집할 수 있습니다.
  • 또는 echo 명령과 출력 리디렉션(>)을 사용하여 파일을 생성하고 >>를 사용하여 내용을 추가할 수 있습니다.

전체 시스템 백업 아카이브 생성

중요 디렉토리 목록이 준비되었으니, 이제 백업 아카이브를 생성할 차례입니다. 이 작업을 위한 표준 리눅스 도구는 tar(Tape Archive)입니다. 여러 파일과 디렉토리를 하나의 파일로 묶을 수 있습니다. 또한 gzip을 사용하여 공간을 절약하기 위해 아카이브를 압축할 것입니다.

작업

  • tar 명령을 사용하여 압축된 백업 아카이브를 생성합니다.
  • 아카이브 이름은 system-backup.tar.gz여야 합니다.
  • 아카이브는 ~/project/backups/ 디렉토리에 위치해야 합니다.
  • 아카이브의 내용은 이전 단계에서 생성한 backup-list.txt 파일에 의해 결정되어야 합니다.

요구 사항

  • 최종 아카이브는 ~/project/backups/system-backup.tar.gz에 위치해야 합니다.
  • tar 명령을 사용해야 합니다.
  • tar-T 옵션을 사용하여 backup-list.txt에서 파일/디렉토리 목록을 읽어야 합니다.
  • 아카이브는 gzip으로 압축되어야 합니다(tar에서 z 옵션 사용).

예시

백업 아카이브를 생성한 후, backups 디렉토리에는 새로운 압축 아카이브가 포함되어야 합니다:

~/project/backups/
└── system-backup.tar.gz

ls -lh ~/project/backups/를 실행하면 아카이브 파일과 그 크기를 확인할 수 있습니다:

-rw-rw-r-- 1 labex labex 1.2K Sep 11 15:08 system-backup.tar.gz

힌트

  • tar로 압축 아카이브를 생성하는 일반적인 옵션은 c(생성), z(gzip으로 압축), v(진행 상황을 보기 위한 상세 모드), f(파일명 지정)입니다.
  • -T 옵션은 tar에게 명령줄 대신 지정된 파일에서 아카이브할 파일 이름을 가져오도록 지시합니다.
  • 명령 구조는 tar -czvf [archive_name] -T [list_file]과 유사합니다.

백업 무결성 검증

백업이 손상되었거나 불완전하다면 쓸모가 없습니다. 모든 백업 전략에서 중요한 단계는 검증입니다. 생성한 아카이브에 의도한 모든 파일이 포함되어 있고 읽을 수 있는지 확인해야 합니다.

작업

  • tar 명령을 사용하여 system-backup.tar.gz 아카이브의 내용을 추출하지 않고 나열합니다.
  • 이 명령의 출력을 ~/project 디렉토리에 backup-contents.txt라는 새 파일로 리디렉션합니다.

요구 사항

  • ~/projectbackup-contents.txt라는 파일을 생성해야 합니다.
  • 이 파일에는 system-backup.tar.gz 내에 저장된 모든 파일과 디렉토리 목록이 포함되어야 합니다.
  • 파일을 추출하지 말고 나열만 하십시오.

예시

검증 파일을 생성한 후, 프로젝트 디렉토리에는 새로운 backup-contents.txt 파일이 포함되어야 합니다:

~/project/
├── backup-contents.txt
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

cat backup-contents.txt를 실행하면 아카이브 내 모든 파일의 상세 목록이 표시되어야 합니다:

drwxrwxr-x labex/labex       0 2025-09-11 15:08 data/
-rw-rw-r-- labex/labex      46 2025-09-11 15:08 data/transactions.csv
drwxrwxr-x labex/labex       0 2025-09-11 15:08 config/
-rw-rw-r-- labex/labex      72 2025-09-11 15:08 config/app.conf
drwxrwxr-x labex/labex       0 2025-09-11 15:08 logs/
-rw-rw-r-- labex/labex      49 2025-09-11 15:08 logs/app.log

힌트

  • tar 명령에는 아카이브의 내용을 나열(t)하는 옵션이 있습니다.
  • t 옵션을 z(gzip용), v(상세 목록용), f(파일 지정용)와 결합하십시오.
  • 출력 리디렉션 연산자 >를 사용하여 명령의 출력을 파일로 저장하십시오.

백업에서 파일 복원

재난이 닥쳤습니다! 한 주니어 개발자가 공간을 확보하려다 실수로 메인 애플리케이션 설정 파일인 app.conf를 삭제했습니다. 이제 애플리케이션이 중단되었습니다. 백업 센티넬인 당신이 백업에서 이 중요한 파일을 복원하여 상황을 해결해야 합니다.

작업

  1. 먼저 config/app.conf 파일을 삭제하여 사고를 시뮬레이션합니다.
  2. 그런 다음 tar 명령을 사용하여 system-backup.tar.gz 아카이브에서 config/app.conf 파일 복원합니다. 파일은 원래 위치로 복원되어야 합니다.

요구 사항

  • 작업을 완료한 후 ~/project/config/app.conf 파일이 존재해야 합니다.
  • 전체 아카이브가 아닌 단일 config/app.conf 파일만 추출해야 합니다.

예시

app.conf 파일을 복원한 후, config 디렉토리에는 복원된 파일이 포함되어야 합니다:

~/project/config/
├── app.conf
└── ...

ls -l ~/project/config/app.conf를 실행하면 복원된 파일이 보여야 합니다:

-rw-rw-r-- 1 labex labex 72 Sep 11 15:08 /home/labex/project/config/app.conf

파일 내용이 올바른지 확인하려면 예상되는 설정이 포함되어 있는지 확인하십시오:

## 데이터베이스 및 API 키 설정이 표시되어야 합니다
cat ~/project/config/app.conf

힌트

  • rm 명령은 파일을 삭제하는 데 사용됩니다.
  • tar 명령은 파일을 추출하기 위해 x 옵션을 사용합니다.
  • 특정 파일을 추출하려면 tar -x 명령 끝에 (아카이브에 나타나는 대로) 해당 경로를 추가하면 됩니다.
  • 아카이브 내 파일의 전체 경로는 config/app.conf입니다.

자동화된 백업 작업 예약

당신은 위기를 해결했지만, 영웅의 일은 끝이 없습니다. 수동 백업에 의존하는 것은 위험합니다. 마지막 단계는 사람의 개입 없이 정기적으로 백업이 생성되도록 프로세스를 자동화하는 것입니다. 이를 위해 표준 리눅스 작업 스케줄러인 cron을 사용합니다.

작업

  • 백업 명령을 자동으로 실행하는 cron 작업을 생성합니다.
  • 이 작업은 매분 실행되어야 합니다(이 챌린지의 목적상).
  • 명령은 ~/project/backups/ 디렉토리 내에 새로운 압축 tar 아카이브를 생성해야 합니다.
  • 덮어쓰기를 방지하기 위해 각 새 백업 파일은 타임스탬프가 포함된 고유한 이름을 가져야 합니다(예: backup-2023-10-27_15-30-00.tar.gz).

요구 사항

  • cron 작업을 편집하려면 crontab -e를 사용해야 합니다.
  • cron 일정은 매분 실행되도록 * * * * *여야 합니다.
  • cron 작업 내의 백업 명령은 출력 디렉토리와 소스 디렉토리에 대해 절대 경로를 사용해야 합니다(예: /home/labex/project/backups).
  • 백업 파일명에는 타임스탬프가 포함되어야 합니다.

예시

cron 작업을 설정한 후, crontab을 확인하고 자동 백업이 나타날 때까지 기다려 작동 여부를 확인할 수 있습니다. crontab -l을 실행하면 새 백업 작업이 표시되어야 합니다:

## 예시 출력 (정확한 명령은 다를 수 있음)
* * * * * tar -czf /home/labex/project/backups/backup-$(date +\%Y-\%m-\%d_\%H-\%M-\%S).tar.gz -C /home/labex/project data config logs

1~2분 후, backups 디렉토리에 타임스탬프가 찍힌 백업 파일이 나타나기 시작할 것입니다:

~/project/backups/
├── backup-2025-09-11_15-30-00.tar.gz
├── backup-2025-09-11_15-31-00.tar.gz
├── backup-2025-09-11_15-32-00.tar.gz
└── system-backup.tar.gz

힌트

  • crontab -e를 실행하여 cron 작업 편집기를 엽니다. 편집기를 선택하라는 메시지가 나타날 수 있으며, nano가 좋은 선택입니다.
  • cron 작업 형식은 [분] [시] [일] [월] [요일] [명령]입니다. * * * * *는 매일 매시간 매분을 의미합니다.
  • date 명령을 사용하여 타임스탬프를 생성할 수 있습니다. 예를 들어, date +%Y-%m-%d_%H-%M-%S2023-10-27_15-30-00과 같은 형식을 생성합니다.
  • 다른 명령 내에서 명령의 출력을 사용하려면 $(command)를 사용하십시오.
  • 중요: crontab에서 퍼센트 기호(%)는 특별한 의미(줄 바꿈으로 처리됨)를 가집니다. date 명령과 함께 사용할 때는 백슬래시(\%)로 이스케이프해야 합니다.
  • crontab의 최종 명령은 다음과 같을 수 있습니다: * * * * * tar -czf /path/to/backup-$(date +\%F_\%T).tar.gz -C /path/to/source dir1 dir2

요약

축하합니다, 센티넬! 완전하고 자동화된 백업 및 복구 전략을 성공적으로 설계하고 구현했습니다. 당신의 근면함과 기술 덕분에 회사의 데이터는 이제 안전합니다. 잠재적인 위기를 예방했을 뿐만 아니라, 미래를 위해 회사를 보호할 시스템을 구축했습니다.

이 챌린지에서 당신은 몇 가지 기본적인 시스템 관리 기술을 마스터했습니다:

  • 중요 데이터 식별: 백업이 필요한 대상을 정확히 파악.
  • 아카이브 생성: tar 명령을 사용하여 압축 백업 생성.
  • 무결성 검증: 백업이 유효하고 완전한지 확인.
  • 복원 수행: 데이터 손실로부터 복구하기 위해 특정 파일 추출.
  • 작업 자동화: 정기적이고 무인 백업을 위한 cron 작업 예약.

이것들은 모든 리눅스 시스템 관리자, 개발자 또는 DevOps 엔지니어에게 필수적인 실무 기술입니다. 당신은 중요한 시스템의 신뢰할 수 있는 수호자가 될 자질이 있음을 증명했습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습