[파이썬] 자동화된 백업 압축

백업은 중요한 데이터를 보호하기 위해 필수적인 작업입니다. 그 중 백업 데이터를 압축하는 것은 저장 공간을 절약할 뿐만 아니라 전송과 공유 시에도 효과적입니다. 이번 블로그 포스트에서는 Python을 사용하여 자동으로 백업 파일을 압축하는 방법에 대해 알아보겠습니다.

1. zipfile 모듈

Python의 zipfile 모듈은 파일 압축 및 압축 해제를 위한 다양한 기능을 제공합니다. 이 모듈을 사용하여 자동화된 백업 압축 기능을 구현할 수 있습니다. 우선, zipfile 모듈을 임포트해야 합니다. 다음은 기본적인 백업 파일을 압축하는 코드 예시입니다.

import zipfile

def backup_and_compress(source_folder, target_zip):
    with zipfile.ZipFile(target_zip, 'w') as zipf:
        for root, dirs, files in os.walk(source_folder):
            for file in files:
                zipf.write(os.path.join(root, file), file)

# 사용 예시
backup_and_compress('/path/to/source/folder', '/path/to/target/backup.zip')

위 코드는 지정된 소스 폴더에서 모든 파일을 재귀적으로 탐색하고, 각 파일을 압축 파일에 추가합니다.

2. 일정한 간격으로 백업 압축 실행

자동화된 백업은 일정한 주기로 실행되어야 합니다. Python에서는 크론 작업을 생성하여 이를 달성할 수 있습니다. 아래 코드는 매일 오전 3시에 백업 압축 함수를 실행하는 크론 작업을 등록하는 방법을 보여줍니다.

import os
from crontab import CronTab

def create_backup_cronjob():
    cron = CronTab(user=True)
    command = f'python3 /path/to/backup/script.py'
    job = cron.new(command=command)
    job.setall('0 3 * * *')  # 매일 오전 3시에 실행
    cron.write()

위 코드에서 setall() 메서드는 크론 작업이 실행될 시간을 지정합니다. 매일 오전 3시에 실행하도록 설정하였습니다.

3. 추가 기능: 암호화된 백업 압축

백업 파일에 추가적인 보안 기능을 제공하기 위해, 백업 압축 파일을 암호화할 수도 있습니다. Python의 zipfile 모듈은 이러한 기능을 지원합니다. 다음은 암호화된 백업 압축 파일을 생성하는 코드 예시입니다.

import zipfile

def backup_and_compress(source_folder, target_zip, password):
    with zipfile.ZipFile(target_zip, 'w', zipfile.ZIP_DEFLATED, True) as zipf:
        zipf.setpassword(password.encode())
        for root, dirs, files in os.walk(source_folder):
            for file in files:
                zipf.write(os.path.join(root, file), file)

# 사용 예시
backup_and_compress('/path/to/source/folder', '/path/to/target/encrypted_backup.zip', 'mysecretpassword')

위 코드에서 zipf.setpassword() 메서드를 사용하여 백업 압축 파일에 암호를 설정합니다. 이렇게 하면 압축 해제 시에는 해당 암호를 사용해야 합니다.

Python을 사용하여 자동화된 백업 압축 기능을 구현할 수 있습니다. zipfile 모듈을 통해 백업 파일을 압축하고 암호화할 수 있으며, 크론 작업을 사용하여 일정한 주기로 실행할 수 있습니다. 데이터의 보안과 효율성을 높일 수 있는 자동화된 백업 압축 시스템을 구축해보세요.