프로그래밍/C#

C# 파일 시스템 감시자: 실시간 파일 모니터링의 강력한 도구

shimdh 2025. 9. 17. 20:12
728x90

C#의 파일 시스템 감시자는 파일 시스템 내의 변경 사항을 모니터링할 수 있는 강력한 방법을 제공합니다. 이 기능은 특히 파일 수정에 즉시 반응해야 하는 애플리케이션, 예를 들어 로깅 시스템, 백업 솔루션 또는 실시간 데이터 처리 애플리케이션에 유용합니다. 파일 시스템 감시자를 구현하고 활용하는 방법을 이해하면 애플리케이션의 상호작용성과 반응성을 크게 향상시킬 수 있습니다.

파일 시스템 감시자 개요

.NET 프레임워크의 FileSystemWatcher 클래스는 지정된 디렉터리에서의 변경 사항을 모니터링하기 위한 인터페이스 역할을 합니다. 이 클래스는 파일이나 디렉터리와 관련된 이벤트를 수신할 수 있도록 해줍니다. 예를 들어:

  • 생성됨: 새로운 파일이나 디렉터리가 생성될 때 트리거됩니다.
  • 변경됨: 기존 파일이나 디렉터리가 수정될 때 트리거됩니다.
  • 삭제됨: 파일이나 디렉터리가 삭제될 때 트리거됩니다.
  • 이름 변경됨: 파일이나 디렉터리의 이름이 변경될 때 트리거됩니다.

이러한 이벤트를 활용하여 개발자는 사용자 행동이나 파일 시스템에 영향을 미치는 외부 프로세스에 따라 동적으로 반응하는 애플리케이션을 만들 수 있습니다.

FileSystemWatcher의 주요 속성

  1. Path: 모니터링할 폴더를 지정합니다.
  2. Filter: 모니터링할 파일을 지정할 수 있습니다 (예: "*.txt"는 텍스트 파일).
  3. NotifyFilter: 어떤 유형의 변경 사항이 이벤트를 트리거할지를 나타냅니다 (예: LastWrite, Size).
  4. EnableRaisingEvents: true로 설정하면 모니터링을 시작하는 부울 속성입니다.
728x90

구현 예시

다음은 FileSystemWatcher를 사용하여 간단한 콘솔 애플리케이션을 구현하는 방법입니다:

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // FileSystemWatcher의 새 인스턴스 생성
        using (FileSystemWatcher watcher = new FileSystemWatcher())
        {
            // 경로와 필터 설정
            watcher.Path = @"C:\Temp"; // 경로를 지정하세요
            watcher.Filter = "*.txt";   // 텍스트 파일만 모니터링

            // 이벤트 핸들러 설정
            watcher.Created += OnChanged;
            watcher.Deleted += OnChanged;
            watcher.Renamed += OnRenamed;

            // 모니터링 시작
            watcher.EnableRaisingEvents = true;

            Console.WriteLine("종료하려면 'q'를 누르세요.");

            while (Console.Read() != 'q') ;
        }
    }

    private static void OnChanged(object source, FileSystemEventArgs e) =>
        Console.WriteLine($"파일 {e.FullPath}이(가) {e.ChangeType}되었습니다.");

    private static void OnRenamed(object source, RenamedEventArgs e) =>
        Console.WriteLine($"파일 {e.OldFullPath}이(가) {e.FullPath}로 이름이 변경되었습니다.");
}

이 예시에서는:

  • FileSystemWatcher의 인스턴스를 생성하고 C:\Temp에 지정합니다.
  • 필터를 설정하여 .txt 파일에만 반응하도록 합니다.
  • 관련 변경 사항이 발생할 때 메시지를 출력하는 이벤트 핸들러(OnChanged, OnRenamed)를 정의합니다.

이 설정은 애플리케이션이 단순히 관찰하는 것에 그치지 않고 특정 조건이 충족될 때 적극적으로 반응할 수 있도록 합니다.

실용적인 사용 사례

  1. 실시간 로그 모니터링: 로그 관리 도구에서 로그 항목의 추가/수정/삭제가 관리자에게 경고/알림을 트리거하도록 FileSystemWatcher를 사용할 수 있습니다.
  2. 백업 솔루션: 변경된 파일을 감지하여 한 위치에서 다른 위치로 자동으로 복사하여 수동 개입 없이 데이터 무결성을 보장합니다.
  3. 데이터 처리 파이프라인: 디스크에 저장된 후 즉시 처리가 필요한 데이터(예: CSV 파일)의 경우, 감시자를 사용하여 새로운 입력 파일을 감지할 때 자동으로 작업을 시작하여 워크플로를 크게 간소화할 수 있습니다.
  4. 사용자 알림: 사진 정리 애플리케이션과 같은 경우, 지정된 폴더에 새로 추가된 이미지를 즉시 사용자에게 알림으로써 즉각적인 피드백 메커니즘을 통해 사용자 경험을 향상시킬 수 있습니다.

결론

FileSystemWatcher가 제공하는 기능은 C# 애플리케이션에 파일 시스템 상호작용에 중점을 둔 동적 기능을 추가하여 보다 반응적인 소프트웨어 설계 패턴과 전반적인 사용자 경험을 개선합니다. 그 속성을 이해하고 실용적인 예제를 효과적으로 구현함으로써, 개발자는 프로젝트 내 다양한 도메인에서 이 도구의 잠재력을 최대한 활용할 수 있습니다.

728x90