Node.js path 모듈 — 파일·디렉터리 경로 다루기
Node.js path 모듈 — 파일·디렉터리 경로 다루기
파일과 디렉터리의 경로를 다루는 일은 생각보다 까다로워요. 운영체제마다 경로 구분자가 다르고, 절대경로·상대경로를 합치다 보면 곧잘 헷갈리죠. Node.js의 node:path 모듈은 그런 경로 작업을 위한 유틸리티를 제공해요.
node:path 모듈은 이렇게 불러와요.
const path = require('node:path');
import path from 'node:path';
Windows vs POSIX
node:path 모듈의 기본 동작은 실행 중인 운영체제에 따라 달라져요. Windows에서 실행하면 Windows 스타일 경로를 가정하죠. 그래서 같은 함수라도 플랫폼에 따라 결과가 달라질 수 있어요.
// POSIX에서
path.basename('C:\\temp\\myfile.html');
// Returns: 'C:\\temp\\myfile.html'
// Windows에서
path.basename('C:\\temp\\myfile.html');
// Returns: 'myfile.html'
어느 운영체제에서든 일관된 결과를 얻으려면 path.win32나 path.posix를 명시적으로 써요.
// 어떤 OS에서든
path.win32.basename('C:\\temp\\myfile.html');
// Returns: 'myfile.html'
path.posix.basename('/tmp/myfile.html');
// Returns: 'myfile.html'
path.basename()
path.basename()은 Unix의 basename 명령처럼 경로의 마지막 부분을 돌려줘요. 뒤따르는 디렉터리 구분자는 무시하고, 선택적으로 제거할 접미사(suffix)를 둘째 인자로 줄 수 있어요.
path.basename('/foo/bar/baz/asdf/quux.html');
// Returns: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// Returns: 'quux'
주의할 점이 하나 있어요. Windows는 보통 파일 이름(확장자 포함)을 대소문자 구분 없이 취급하지만, basename은 그렇지 않아요. 접미사 문자열을 대소문자 구분으로 비교해요.
path.win32.basename('C:\\foo.html', '.html');
// Returns: 'foo'
path.win32.basename('C:\\foo.HTML', '.html');
// Returns: 'foo.HTML'
path.dirname()
path.dirname()은 Unix의 dirname 명령처럼 경로의 디렉터리 이름을 돌려줘요.
path.dirname('/foo/bar/baz/asdf/quux');
// Returns: '/foo/bar/baz/asdf'
path.extname()
path.extname()은 경로의 확장자(mark)를 돌려줘요. path가 문자열이 아니면 TypeError를 던져요.
path.delimiter
path.delimiter는 플랫폼별 경로 구분자를 알려줘요. Windows는 ;, POSIX는 :이에요. 환경 변수 PATH를 나눌 때 유용해요.
process.env.PATH.split(path.delimiter);
// POSIX: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
// Windows: ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
path.sep
path.sep은 경로 세그먼트 구분자예요. POSIX는 /, Windows는 \이에요. Windows에서는 /와 \ 둘 다 세그먼트 구분자로 받아들이지만, path 메서드는 오직 \만 추가해요.
'foo/bar/baz'.split(path.sep);
// ['foo', 'bar', 'baz']
정리하면, path 모듈은 경로를 자르고(basename·dirname·extname), 합치고, 플랫폼 차이를 통일해 주는 도구 모음이에요. OS 간 일관성이 필요하면 path.win32·path.posix를 명시해 쓰면 돼요.