일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- go
- Elasticsearch
- CKA 기출문제
- AI
- Spring
- AWS EKS
- Kubernetes
- APM
- golang
- tucker의 go 언어 프로그래밍
- 코틀린 코루틴의 정석
- PETERICA
- kotlin querydsl
- 오블완
- 정보처리기사 실기 기출문제
- 티스토리챌린지
- Java
- 기록으로 실력을 쌓자
- aws
- kotlin
- CloudWatch
- minikube
- Pinpoint
- mysql 튜닝
- docker
- CKA
- 공부
- kotlin coroutine
- Linux
- 정보처리기사실기 기출문제
- Today
- Total
피터의 개발이야기
[GO] Go의 fsnotify 라이브러리를 활용한 파일 시스템 감시 본문

ㅁ 들어가며
ㅇ 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
'Programming > GO' 카테고리의 다른 글
[GO] Tucker의 GO 언어 프로그래밍 - 1장 역사와 특징 (0) | 2025.03.07 |
---|---|
[GO] Go에서 함수와 메서드, 그리고 포인터 메서드와 값 타입 메서드 차이 (0) | 2025.02.21 |
[GO] Go 언어에서 sync.Map 사용하기 (0) | 2025.02.18 |
[GO] Golang에서 Linux 명령어 실행 및 관리하기 (0) | 2025.02.17 |
[GO] Go Race Detector: 동시성 버그를 잡아내는 강력한 도구 (0) | 2025.02.16 |