Watchman은 React Native 개발에서 왜 필요할까
작성자 홍서진
듀오랩스 대표·2분 읽기
React Native나 Expo로 개발하다 보면 코드를 고쳤는데 앱에 바로 반영되지 않는 경우가 있습니다. 이때 원인 중 하나가 파일 변경 감시 도구인 Watchman 문제일 수 있습니다.
Watchman이란
Watchman은 Meta가 만든 파일 시스템 변경 감시 도구입니다. 프로젝트 안의 파일이 바뀌면 이를 빠르게 감지해 Metro 같은 도구에 알려줍니다.
대규모 프로젝트에서는 파일이 많기 때문에 단순 폴링 방식보다 전문 감시 도구가 더 안정적입니다.
Metro와 Fast Refresh
React Native의 Metro 번들러는 소스 코드 변경을 감지해 앱에 빠르게 반영합니다. 이 기능이 Fast Refresh입니다.
Watchman이 정상 동작하면 파일 변경이 빠르게 감지되고, 앱 화면도 자연스럽게 갱신됩니다.
문제가 생기면 나타나는 증상
Watchman이나 Metro 캐시가 꼬이면 다음 증상이 나타날 수 있습니다.
- 파일을 저장해도 앱이 갱신되지 않는다.
- 예전 코드가 계속 실행된다.
- Metro를 재시작해야만 변경이 반영된다.
- 특정 파일 변경만 감지되지 않는다.
기본 해결 방법
먼저 Metro 캐시를 비우고 다시 시작해 볼 수 있습니다.
npx expo start -cWatchman 상태가 문제라면 watch를 초기화하는 방법도 있습니다.
watchman watch-del-all환경에 따라 Watchman을 재설치하거나 업데이트해야 할 수도 있습니다.
실무 팁
- 프로젝트가 커질수록 Watchman 설치를 권장합니다.
- 캐시 문제와 코드 문제를 구분해야 합니다.
- 팀 문서에 Metro 캐시 초기화 절차를 남겨두면 좋습니다.
- monorepo나 외부 디렉터리 symlink 구조에서는 감시 범위를 특히 주의해야 합니다.
듀오랩스가 보는 관점
개발 환경 문제는 기능 버그처럼 보일 때가 많습니다. Watchman과 Metro의 역할을 이해하면 “코드가 안 먹는다”는 막연한 문제를 더 빠르게 진단할 수 있습니다.
함께 읽기
- React Native Debug·Release 구성 차이: No script URL provided 가 뜨는 이유앱 두 개를 아이폰에 올려놓고 하나를 열었더니 빨간 화면에 이 문구가 떴습니다.
- Metro 포트 충돌로 배운 것: RN이 OTA 업데이트를 할 수 있는 이유새로 만든 앱을 아이폰에 설치했습니다. 빌드는 성공했고 설치도 됐는데, 앱을 열자 빨간 에러 화면이 떴습니다. 그런데 에러가 가리키는 파일이 이상했습니다.
- 여러 고객 앱을 운영할 때 계정과 서명 키를 분리하는 방법React Native와 Expo로 여러 고객 앱을 개발·배포한다면 계정, 비용, 서명 키, 스토어 권한을 어떻게 나눌지 초기에 정해야 합니다. 이 구조를 잘못 잡으면 나중에 소유권 이전, 업데이트, 보안 관리가 복잡해집니다.
- React Native와 Expo에서 OTA 업데이트를 이해하는 방법OTA(Over-The-Air) 업데이트는 앱 스토어 심사를 거치지 않고 설치된 앱의 JavaScript 코드와 에셋을 갱신하는 방식입니다. React Native와 Expo 환경에서는 빠른 버그 수정과 작은 기능 개선에 매우 유용합니다.
- Expo 앱 다국어: 사전의 키를 한국어 원문으로 둔 이유성경 지도 앱에 언어 다섯 개를 더했습니다. 영어, 일본어, 중국어 간체와 번체, 스페인어입니다. 화면이 하나뿐이고 서버도 없는 앱이라 붙이는 일 자체는 간단할 줄 알았는데, 번역문을 어디에 둘지에서 막혔습니다.