PC 데이터 유실 걱정 끝! 파이썬으로 폴더 자동 백업하기
PC 데이터 유실 걱정 끝! 파이썬으로 폴더 자동 백업하기 (완성 코드 공개)
"어제까지 잘 되던 PC가 오늘 갑자기 켜지지 않는다", "실수로 중요한 파일을 삭제했는데 복구할 방법이 없다"…
데이터를 잃고 나서야 백업의 중요성을 깨닫는 경우가 많습니다. 외장 하드나 USB에 손으로 복사하는 방법은 깜박하기 쉽고, 백업 타이밍을 놓치는 경우가 대부분입니다. 파이썬을 한 번만 세팅해두면 매일 지정한 시간에 중요한 폴더를 자동으로 백업하고, 지정한 기간이 지난 오래된 백업은 자동으로 삭제해 저장 공간을 관리할 수 있습니다.
1단계: 준비물 확인
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
이번 스크립트는 파이썬 기본 내장 라이브러리(shutil, zipfile, pathlib)만 사용합니다. 별도 설치가 필요 없습니다.
💡 이 코드로 할 수 있는 것: 지정한 폴더를 날짜가 포함된 파일명으로 ZIP 압축 백업합니다. 여러 폴더를 동시에 백업할 수 있고, 보관 기간이 지난 오래된 백업 파일은 자동으로 삭제해 저장 공간을 절약합니다. 백업 완료 후 텔레그램 또는 카카오톡으로 알림을 받는 것도 가능합니다.
2단계: 완성 코드
아래 코드를 그대로 복사해서 메모장에 붙여넣고, auto_backup.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import zipfile
import shutil
import time
from pathlib import Path
from datetime import datetime
# ① 설정: 백업할 폴더 목록 (여러 개 동시 가능)
BACKUP_TARGETS = [
r"C:\Users\내이름\Desktop\업무파일", # ← 백업할 폴더 1
r"C:\Users\내이름\Documents\중요문서", # ← 백업할 폴더 2
# 필요하면 계속 추가 가능
]
# ② 설정: 백업 저장 위치와 보관 기간
BACKUP_DIR = r"D:\백업저장소" # ← 백업 파일을 저장할 폴더 (외장 하드 권장)
KEEP_DAYS = 30 # ← 백업 보관 기간 (일 단위, 이 기간이 지나면 자동 삭제)
LOG_FILE = r"D:\백업저장소\backup_log.txt" # ← 백업 기록 로그 파일
# ③ 백업 실행 함수
def run_backup():
backup_root = Path(BACKUP_DIR)
backup_root.mkdir(parents=True, exist_ok=True)
date_str = datetime.now().strftime("%Y%m%d_%H%M")
log_lines = [f"\n{'='*40}", f"백업 시작: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"]
total_size = 0
success = 0
failed = 0
for target in BACKUP_TARGETS:
source = Path(target)
if not source.exists():
msg = f" ✘ 폴더 없음 (건너뜀): {target}"
print(msg)
log_lines.append(msg)
failed += 1
continue
zip_name = f"{source.name}_{date_str}.zip"
zip_path = backup_root / zip_name
try:
file_count = 0
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
for file in sorted(source.rglob("*")):
if file.is_file():
zf.write(file, file.relative_to(source.parent))
file_count += 1
size_mb = round(zip_path.stat().st_size / 1024 / 1024, 2)
total_size += size_mb
msg = f" ✔ {source.name} → {zip_name} ({file_count}개, {size_mb}MB)"
print(msg)
log_lines.append(msg)
success += 1
except Exception as e:
msg = f" ✘ {source.name} 백업 실패: {e}"
print(msg)
log_lines.append(msg)
failed += 1
# ④ 오래된 백업 자동 삭제
deleted = 0
for old_zip in backup_root.glob("*.zip"):
age_days = (time.time() - old_zip.stat().st_mtime) / 86400
if age_days > KEEP_DAYS:
old_zip.unlink()
msg = f" 🗑 오래된 백업 삭제: {old_zip.name} ({int(age_days)}일 경과)"
print(msg)
log_lines.append(msg)
deleted += 1
# ⑤ 결과 출력 및 로그 저장
summary = (f"\n백업 완료: 성공 {success}개 / 실패 {failed}개 / "
f"삭제 {deleted}개 / 총 {round(total_size, 2)}MB")
print(summary)
log_lines.append(summary)
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write("\n".join(log_lines))
return success, failed
# ⑥ 실행
if __name__ == "__main__":
print(f"▶ 자동 백업 시작: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
success, failed = run_backup()
print(f"\n✅ 완료! 로그 저장 → {LOG_FILE}")
3단계: 실행 방법
- 코드 ① 설정의
BACKUP_TARGETS에 백업할 폴더 경로를 입력합니다. 여러 개를 동시에 백업하려면 경로를 추가로 나열하면 됩니다. - 코드 ② 설정의
BACKUP_DIR에 백업 파일을 저장할 경로를 입력합니다. 외장 하드나 USB 드라이브 경로를 입력하면 PC 고장에도 안전하게 보호됩니다. KEEP_DAYS에 백업을 보관할 기간(일)을 입력합니다. 30으로 설정하면 30일이 지난 백업은 자동 삭제됩니다.- 터미널에서 아래 명령어로 실행합니다:
python auto_backup.py
정상 실행 시 터미널에 이렇게 출력됩니다:
▶ 자동 백업 시작: 2026-06-02 09:00 ✔ 업무파일 → 업무파일_20260602_0900.zip (48개, 12.34MB) ✔ 중요문서 → 중요문서_20260602_0900.zip (23개, 5.71MB) 🗑 오래된 백업 삭제: 업무파일_20260503_0900.zip (30일 경과) 백업 완료: 성공 2개 / 실패 0개 / 삭제 1개 / 총 18.05MB ✅ 완료! 로그 저장 → D:\백업저장소\backup_log.txt
백업 저장 폴더에 날짜·시간이 포함된 ZIP 파일이 생성되고, 모든 실행 기록이 로그 파일에 누적 저장됩니다.
4단계: 자주 발생하는 오류와 해결법
오류 1: 폴더 없음 (건너뜀) 메시지 출력
BACKUP_TARGETS에 입력한 경로가 실제로 존재하지 않는 경우입니다. 윈도우 탐색기에서 해당 폴더 경로를 확인하고 주소창에서 경로를 복사해 붙여넣으세요. 경로 앞에 r을 반드시 붙입니다(r"C:\...").
오류 2: 외장 하드가 연결되어 있지 않을 때 오류 발생
BACKUP_DIR이 외장 하드 경로인데 연결이 끊겨 있을 때 발생합니다. 아래 코드를 ③ 백업 실행 함수 시작 부분에 추가하면 외장 하드가 없을 때 자동으로 건너뜁니다:
if not Path(BACKUP_DIR).exists():
print("⚠ 백업 저장소에 접근할 수 없습니다. 외장 하드 연결을 확인하세요.")
return 0, 1
오류 3: 백업 파일 크기가 너무 커서 저장 공간 부족
KEEP_DAYS 값을 줄이거나, BACKUP_TARGETS에서 불필요한 폴더를 제외하세요. 또는 특정 확장자만 백업하도록 source.rglob("*") 부분에 확장자 필터를 추가할 수 있습니다.
5단계: 매일 자동 실행 예약하기
윈도우 작업 스케줄러를 활용하면 매일 지정한 시간에 자동으로 백업이 실행됩니다.
- 윈도우 검색창에 "작업 스케줄러"를 입력해 실행합니다.
- 오른쪽 패널에서 "기본 작업 만들기"를 클릭합니다.
- 이름 입력(예: "일일 자동 백업") → 트리거: "매일" 선택 → 실행 시간: 오전 9:00 설정
- 동작: "프로그램 시작" 선택 → 프로그램란에
python입력, 인수란에auto_backup.py의 전체 경로 입력 - 완료 후 저장하면 매일 오전 9시에 백업이 자동 실행됩니다.
⚠️ 중요: 작업 스케줄러 설정 시 "최고 권한으로 실행"에 체크해야 권한 문제 없이 파일에 접근할 수 있습니다. 또한 PC가 켜져 있어야 실행되므로, 출근 직후나 퇴근 전처럼 PC가 확실히 켜져 있는 시간으로 설정하세요.
응용: 백업 완료 후 텔레그램으로 알림 받기
이전 게시글 텔레그램 자동 발송 편의 코드와 결합하면 백업 완료 시 결과를 텔레그램으로 자동 수신할 수 있습니다. run_backup() 호출 아래에 아래 코드를 추가하세요.
from telegram_msg import send_message
send_message(f"""💾 자동 백업 완료 알림
✅ 성공: {success}개 폴더
❌ 실패: {failed}개 폴더
⏰ 완료 시각: {datetime.now().strftime('%Y-%m-%d %H:%M')}""")
💡 이전 게시글과 결합하면: ZIP 자동 압축 편과 중복 파일 자동 삭제 편을 먼저 실행해 폴더를 정리한 뒤 이 스크립트로 백업하면 깔끔하고 용량 효율적인 백업이 됩니다.
핵심 요약
- 준비물: Python만 설치하면 됩니다. 별도 라이브러리 설치 불필요
- 설정: BACKUP_TARGETS(백업 폴더 목록), BACKUP_DIR(저장 위치), KEEP_DAYS(보관 기간)만 수정
- 자동화: 윈도우 작업 스케줄러로 매일 지정 시간에 자동 실행
- 결과: 날짜·시간 포함 ZIP 백업 생성, 오래된 백업 자동 삭제, 실행 기록 로그 누적 저장
이 코드를 응용하면 네트워크 드라이브(NAS)나 외부 서버로 백업하거나, 변경된 파일만 골라 증분 백업하는 것도 가능합니다.
