본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (2) - 모듈 사용하기 : __filename, __dirname

node js logo image

 

 

 

 

 

노드에서 사용되는 파일들은 단순 파일로서 사용되는 경우뿐만 아니라 모듈로서 관계성을 가지는 경우가 대다수입니다. 당연한 이야기죠? 그래서 특정 모듈(파일)들의 경로나 파일명을 필요로 하는 경우가 종종 발생합니다. 

 

아래와 같이 예제 파일에서 console.log로 __filename과 __dirname을 출력해 보겠습니다. 그럼 특별한 설정 없이 현재의 파일명과 파일 경로를 자동으로 출력해 줍니다. 

 

 

console.log(__filename);
console.log(__dirname);

/* 출력
X:\XXXXX\XXXXXX\example.js
X:\XXXXX\XXXXXX
*/

 

 

물론 윈도우가 아닌 경우 위 예제와 같이 ' / '가 아닌 ' \ '로 경로가 구분이 될 수도 있습니다. 또한 경로의 문자열 반환 등의 이슈도 있기 때문에, 경로와 관련된 처리는 대부분 path 모듈을 통해서 진행합니다. 이는 따로 살펴보도록 하겠습니다. 

 

덧붙여, ES 모듈에서는 이 __filename과 __dirname을 사용하지 못합니다. 그래서 import.meta.url로 경로를 불러옵니다. 

 

console.log(import.meta.url);
console.log('__filename 실행 시 오류');
console.log(__filename);

/* 출력
file:///X:/XXXXX/XXXXXX/example.mjs
__filename 실행 시 오류
Uncaught ReferenceError ReferenceError: __filename is not defined in ES module scope
    at <anonymous> (file:///X:/XXXXX/XXXXX/example.mjs:3:13)
    at run (node:internal/modules/esm/module_job:218:25)
    --- await ---
    at runMainESM (node:internal/modules/run_main:98:21)
    at executeUserEntryPoint (node:internal/modules/run_main:131:5)
    at <anonymous> (node:internal/main/run_main_module:28:49)
Process exited with code 1
*/

 

 

다음 아티클부터는 우리가 따로 선언하지 않아도 사용할 수 있었던 require, module 객체와 같은 기본 제공 내장 객체에 대해서 자세히 살펴보도록 하겠습니다.