Node.js모듈과 패키지

import.meta와 file URL 경로 처리

ESM에서 `import.meta`, file URL, `__dirname` 대체 패턴을 어떻게 다뤄야 하는지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

javascript
import { fileURLToPath } from "node:url";

const __filename = fileURLToPath(import.meta.url);

설명

  • ESM으로 넘어오면 가장 먼저 부딪히는 차이 중 하나가 __filename__dirname이 없다는 점입니다. ESM은 CommonJS와 다른 메타데이터 모델을 쓰기 때문입니다.
  • import.meta.url은 현재 모듈의 file: URL을 나타내며, ESM 환경에서 자기 파일 위치를 기준으로 다른 자원을 읽을 때 핵심 출발점이 됩니다.
  • 현대 Node에서는 import.meta.dirname, import.meta.filename도 지원하지만, fileURLToPath(import.meta.url) 패턴은 더 넓은 버전 호환성과 생태계 관성 때문에 여전히 많이 보입니다.
  • 중요한 점은 ESM의 경로 해석이 "파일 시스템 문자열"보다 "URL 의미론"에 더 가깝다는 것입니다. 그래서 상대 경로 처리와 자원 로딩을 볼 때도 URL 기반 사고가 필요합니다.
  • 이 카드는 경로 유틸 팁이 아니라 ESM 감각 전환에 가깝습니다. CommonJS에서 파일 경로를 다루던 방식과 ESM에서의 기준점이 다르다는 점을 먼저 잡아야 합니다.

빠른 정리

요소의미
import.meta.url현재 모듈의 file: URL
fileURLToPath()URL을 파일 시스템 경로 문자열로 변환
import.meta.dirname현대 Node에서 제공되는 디렉터리 경로 메타
핵심 차이ESM은 URL 기반 사고가 기본
잘 맞는 사용처상대 자원 로딩, 워커/서브모듈 경로 구성

주의할 점

ESM 코드에서 CommonJS 경로 습관을 그대로 가져오면 상대 경로와 확장자 해석에서 바로 꼬이기 쉽습니다. 특히 워커 경로나 파일 읽기 기준점을 만들 때 import.meta.url을 먼저 떠올리는 편이 좋습니다.

참고 링크

2 sources