관리 메뉴

피터의 개발이야기

[GO] Go의 fsnotify 라이브러리를 활용한 파일 시스템 감시 본문

Programming/GO

[GO] Go의 fsnotify 라이브러리를 활용한 파일 시스템 감시

기록하는 백앤드개발자 2025. 2. 20. 06:56
반응형

ㅁ 들어가며

fsnotify는 Go 언어에서 파일 및 디렉토리의 변경 사항을 실시간으로 감지할 수 있도록 도와주는 라이브러리이다. fsnotify의 주요 기능과 사용법을 정리하였다.

 

ㅁ fsnotify란?

 fsnotify는 Windows, Linux, macOS 등 다양한 운영체제에서 동작하는 크로스 플랫폼 파일 시스템 감시 라이브러리이다. 이 라이브러리를 사용하면 파일 생성, 삭제, 수정, 권한 변경 등의 이벤트를 실시간으로 감지할 수 있다.

 

ㅁ 감지 이벤트

이벤트 설명
fsnotify.Create 파일 또는 디렉토리 생성
fsnotify.Remove 파일 또는 디렉토리 삭제
fsnotify.Write 파일 내용 수정
fsnotify.Rename 파일 또는 디렉토리 이름 변경
snotify.Chmod 파일 또는 디렉토리 권한 변경

ㅇ Go의 고루틴과 채널을 활용하여 비동기적으로 이벤트를 처리할 수 있다.

 

ㅁ 특징

ㅇ 크로스 플랫폼 지원: Windows, Linux, macOS 등 주요 플랫폼에서 동일한 API로 동작.

비동기 이벤트 처리Go의 고루틴과 채널을 활용하여 비동기적으로 이벤트를 처리할 수 있음.

 

 

설치 방법

go get github.com/fsnotify/fsnotify

ㅇ fsnotify는 Go 모듈로 제공되며, go  명령어로 설치할 수 있다.

 

사용 예제

 

package main

import (
    "log"
    "github.com/fsnotify/fsnotify"
)

func main() {
    // Watcher 생성
    watcher, err := fsnotify.NewWatcher()
    if err != nil {
        log.Fatal(err)
    }
    defer watcher.Close()

    // 감시할 디렉토리 추가
    err = watcher.Add("./monitoring")
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Monitoring directory: ./monitoring")

    // 이벤트 처리
    go func() {
        for {
            select {
            case event := <-watcher.Events:
                switch {
                case event.Op&fsnotify.Create == fsnotify.Create:
                    log.Println("File created:", event.Name)
                case event.Op&fsnotify.Remove == fsnotify.Remove:
                    log.Println("File deleted:", event.Name)
                case event.Op&fsnotify.Write == fsnotify.Write:
                    log.Println("File modified:", event.Name)
                case event.Op&fsnotify.Rename == fsnotify.Rename:
                    log.Println("File renamed:", event.Name)
                case event.Op&fsnotify.Chmod == fsnotify.Chmod:
                    log.Println("File permission changed:", event.Name)
                }
            case err := <-watcher.Errors:
                log.Println("Error:", err)
            }
        }
    }()

    // 프로그램 종료 방지
    select {}
}

Watcher 생성: fsnotify.NewWatcher()를 호출하여 감시 객체를 생성

디렉토리 추가: watcher.Add() 메서드를 사용해 감시할 디렉토리를 지정

이벤트 처리: watcher.Events 채널에서 발생하는 이벤트를 비동기적으로 처리하며, 각 이벤트에 대해 적절한 작업을 수행

오류 처리: watcher.Errors 채널에서 발생하는 오류를 로깅

 

ㅁ 마무리

  Go의 fsnotify는 간단하게 파일 시스템을 감시하는 도구이다. 이를 활용하면 파일의 변화를 감지하여 다양한 애플리케이션에서 실시간 파일 변경 사항을 손쉽게 추적하고 처리할 수 있다. 필요에 따라 고루틴과 채널을 조합하여 효율적인 비동기 처리를 구현도 가능하였다.

 

ㅁ 함께 보면 좋은 사이트

go pkg doc - fsnotify - Watcher

github - fsnotify

 [golang] 폴더/파일 감시 fsnotify

[go lang] fsnotify 또 다른 예시

 

반응형
Comments