Node.js파일과 스트림

fs.watch와 watch mode

파일 변경 감지용 `fs.watch()`와 개발 중 재실행용 `node --watch`를 어떻게 구분해 써야 하는지 정리합니다.

마지막 수정 2026년 3월 21일

기본 패턴

javascript
import { watch } from "node:fs";

watch("./src", { recursive: true }, (eventType, filename) => {
  console.log(eventType, filename);
});

설명

  • fs.watch()는 프로그램 안에서 파일 변경 이벤트를 직접 감지할 때 씁니다. 예를 들어 정적 파일 인덱스를 다시 만들거나, 변경 시 로그를 남기거나, 간단한 동기화 도구를 만들 때 유용합니다.
  • node --watch app.js는 애플리케이션 코드를 수정할 때 프로세스를 자동 재시작하는 개발 편의 기능입니다.
  • 둘은 비슷해 보여도 목적이 다릅니다. 하나는 "코드 안에서 파일 시스템 이벤트를 소비"하는 API이고, 다른 하나는 "개발 중 프로세스를 다시 띄우는" CLI 동작입니다.
  • 운영체제마다 감지 방식과 이벤트 품질이 조금씩 다를 수 있어, 파일 감시 코드는 실제 배포 환경에서도 한번 확인하는 편이 좋습니다.
  • 디렉터리 전체를 광범위하게 감시하면 이벤트 양이 예상보다 많아질 수 있으므로, 범위를 좁히는 설계가 중요합니다.

짧은 예제

bash
node --watch server.js
node --watch-path=src server.js

빠른 정리

항목목적
fs.watch()코드 안에서 파일 변경 감지
node --watch개발 중 자동 재시작
감시 범위넓을수록 이벤트 부담 증가
플랫폼 차이OS별 감지 방식 차이 존재

주의할 점

"파일이 바뀌면 다시 실행"과 "파일 변경 이벤트를 프로그램 로직에 활용"은 비슷해 보여도 다른 문제입니다. 개발 편의가 목적이면 --watch, 기능 구현이 목적이면 fs.watch() 쪽으로 먼저 나누어 생각하면 선택이 쉬워집니다.

참고 링크

2 sources