[파이썬] shutil 파일 변화 모니터링 및 자동 백업 구현하기

파일 변화를 모니터링하고 이를 자동으로 백업하는 기능은 데이터의 안정성과 보안을 확보하는 데 중요한 역할을 합니다. Python의 shutil 라이브러리를 사용하여 파일 변화를 감지하고 백업하는 방법에 대해 알아보겠습니다.

1. shutil 라이브러리 소개

shutil은 파일 및 디렉토리 작업에 유용한 함수들을 제공하는 Python 표준 라이브러리입니다. 이를 사용하여 파일 및 디렉토리를 복사, 이동, 삭제 등의 작업을 할 수 있습니다.

본 포스트에서는 shutilcopy2 함수를 사용하여 파일 백업을 구현해보겠습니다. 이 함수는 원본 파일의 메타데이터(권한, 생성일자 등)를 보존하면서 파일을 복사합니다.

2. 파일 변화 감지하기

변화를 감지하려는 파일이 위치한 디렉토리를 모니터링하고, 파일의 변화를 감지하는 방법에는 여러가지가 있습니다.

가장 간단한 방법은 주기적으로 디렉토리를 스캔하여 파일들의 최종 수정일자를 확인하는 것입니다. 이를 위해 Python의 os 라이브러리를 사용할 수 있습니다.

import os

def check_file_changes(directory):
    original_files = {}

    while True:
        for file_name in os.listdir(directory):
            file_path = os.path.join(directory, file_name)
            modified_time = os.path.getmtime(file_path)

            if file_name not in original_files:
                original_files[file_name] = modified_time
            
            if original_files[file_name] != modified_time:
                backup_file(file_path)
                original_files[file_name] = modified_time
    
        time.sleep(5)  # 일정 간격으로 디렉토리 스캔

def backup_file(file_path):
    # 파일을 백업하는 로직 구현
    shutil.copy2(file_path, 'backup_directory')

위의 코드는 지정한 디렉토리 내의 파일들을 스캔하고, 파일의 최종 수정일자를 확인하여 이전에 백업된 시간과 비교합니다. 변화가 감지된 경우 backup_file 함수를 호출하여 파일을 백업합니다.

3. 백업된 파일 저장하기

백업된 파일을 저장할 디렉토리를 미리 생성해야 합니다. 이를 위해 os 모듈을 사용하여 디렉토리를 생성할 수 있습니다.

backup_directory = 'backup_directory'

if not os.path.exists(backup_directory):
    os.mkdir(backup_directory)

위의 코드는 backup_directory라는 디렉토리가 존재하지 않을 때 디렉토리를 생성합니다. 이때 os.mkdir 함수를 사용합니다.

4. 실행 예시

변화를 감지할 디렉토리와 백업 디렉토리를 설정한 후, check_file_changes 함수를 실행합니다.

directory_to_monitor = 'directory_to_monitor'

check_file_changes(directory_to_monitor)

위의 코드는 directory_to_monitor 내의 파일 변화를 모니터링하고, 변화가 감지될 때마다 해당 파일을 백업합니다.

마무리

Python의 shutil 라이브러리를 사용하여 파일 변화를 모니터링하고 자동 백업하는 방법에 대해 알아보았습니다. 이를 응용하여 데이터의 안정성과 보안을 강화할 수 있습니다. 파일 변화를 감지하는 방법은 다양하므로 프로젝트의 요구사항에 맞게 적절한 방법을 선택하여 사용하시면 됩니다.