본문 바로가기

Study Information Technology

파일 시스템 변경 모니터링 watchdog 라이브러리 사용하기

728x90
반응형

파일 시스템 변경 모니터링: watchdog 라이브러리 사용하기

Overview

파일 시스템의 변경 사항을 모니터링하는 것은 다양한 소프트웨어 개발 작업에서 매우 중요한 요소입니다. 예를 들어, 로그 파일의 변경을 감지하거나, 이미지 파일이 추가되었을 때 자동으로 처리하는 작업 등이 있습니다. Python의 watchdog 라이브러리는 이러한 파일 시스템의 변화를 쉽게 감지하고, 그에 따라 특정 동작을 수행할 수 있도록 도와주는 유용한 도구입니다. 이번 글에서는 watchdog 라이브러리를 사용하여 파일이 추가되거나 수정될 때 이를 감지하고, 이에 따른 행동을 트리거하는 방법을 자세히 설명하겠습니다.

watchdog 라이브러리 설치

먼저, watchdog 라이브러리를 설치해야 합니다. 다음의 명령어를 사용하여 pip로 설치할 수 있습니다.

pip install watchdog

설치가 완료되면, 파일 시스템을 모니터링할 준비가 되었습니다.

기본 사용법

watchdog 라이브러리는 파일 시스템의 이벤트를 감지하는 이벤트 핸들러와 모니터를 포함하고 있습니다. 이 라이브러리는 플랫폼에 상관없이 파일 시스템 이벤트를 감지할 수 있으며, Windows, macOS, Linux에서 모두 사용할 수 있습니다.

이벤트 핸들러 정의

파일 시스템의 변경 사항을 처리하기 위해 이벤트 핸들러를 정의해야 합니다. 예를 들어, 파일이 추가되거나 수정될 때 로그를 남기는 간단한 핸들러를 만들어보겠습니다.

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time

class MyEventHandler(FileSystemEventHandler):
def on_created(self, event):
print(f"파일이 생성되었습니다: {event.src_path}")

def on_modified(self, event):
print(f"파일이 수정되었습니다: {event.src_path}")

def on_deleted(self, event):
print(f"파일이 삭제되었습니다: {event.src_path}")

def on_moved(self, event):
print(f"파일이 이동되었습니다: {event.src_path} -> {event.dest_path}")

위 코드는 파일이 생성, 수정, 삭제, 이동될 때 각각의 이벤트에 대해 로그를 출력하는 핸들러입니다.

모니터 설정

이제 이벤트 핸들러를 설정한 후, 특정 디렉토리를 모니터링하는 코드를 작성해야 합니다. 다음 코드를 통해 특정 경로를 모니터링할 수 있습니다.

if __name__ == "__main__":
path = "/path/to/monitor"  # 모니터링할 디렉토리 경로
event_handler = MyEventHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)  # recursive=True: 하위 디렉토리도 모니터링
observer.start()

try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()

코드 설명

  1. 이벤트 핸들러: MyEventHandler 클래스는 FileSystemEventHandler를 상속받아 파일의 생성, 수정, 삭제, 이동 이벤트에 대해 각각의 메서드를 구현하고 있습니다.
  2. 모니터 설정: Observer 객체를 생성하고, schedule 메서드를 통해 모니터링할 경로와 이벤트 핸들러를 연결합니다. recursive=True를 설정하면 하위 디렉토리도 모니터링할 수 있습니다.
  3. 루프 유지: while True 루프는 프로그램이 종료되지 않도록 유지합니다. KeyboardInterrupt를 통해 사용자가 Ctrl+C를 눌렀을 때 모니터링을 중지합니다.

에러 처리

이 프로그램을 실행하는 도중 발생할 수 있는 몇 가지 에러와 그 해결 방법을 살펴보겠습니다.

  1. PermissionError: 특정 디렉토리를 모니터링할 권한이 없을 경우 발생합니다.
  • 해결 방법: 관리자 권한으로 실행하거나, 권한이 있는 디렉토리를 선택합니다.
  1. FileNotFoundError: 지정한 경로가 존재하지 않을 경우 발생합니다.
  • 해결 방법: 모니터링할 경로를 정확히 입력했는지 확인합니다.
  1. RecursionError: 하위 디렉토리를 무한히 감지하는 경우 발생합니다.
  • 해결 방법: 무한 루프에 빠지지 않도록 모니터링할 디렉토리 구조를 잘 설계합니다.

실제 예시

예를 들어, 웹 애플리케이션의 이미지 업로드 기능을 만들고 있다고 가정해봅시다. 사용자가 이미지를 업로드하면, 그 이미지를 특정 폴더에 저장하고, 저장된 이미지를 자동으로 처리하는 기능을 추가하고 싶습니다. 이럴 때 watchdog를 사용하여 이미지를 감지하고, 이미지 처리 함수를 호출할 수 있습니다.

from PIL import Image

class MyEventHandler(FileSystemEventHandler):
def on_created(self, event):
if event.src_path.endswith(".jpg") or event.src_path.endswith(".png"):
print(f"새 이미지가 생성되었습니다: {event.src_path}")
self.process_image(event.src_path)

def process_image(self, path):
with Image.open(path) as img:
img.thumbnail((128, 128))
img.save(f"thumbnail_{path.split('/')[-1]}")
print(f"썸네일이 생성되었습니다: thumbnail_{path.split('/')[-1]}")

# 나머지 코드는 위와 동일

위 코드는 새로운 이미지 파일이 생성되면 해당 파일의 썸네일을 생성하는 예제입니다.

참고문서

이제 watchdog 라이브러리를 사용하여 파일 시스템 변경을 모니터링하고, 다양한 동작을 자동으로 수행하는 방법에 대해 잘 이해하셨기를 바랍니다!

728x90
반응형