728x90
반응형
3. path 모듈: 파일 및 디렉토리 경로 마법사 🪄
애플리케이션을 개발하다 보면 파일이나 디렉토리의 경로를 조합하거나, 특정 경로에서 파일 이름 또는 확장자만 추출해야 하는 경우가 많습니다. 이때 문자열을 직접 조작하는 것은 오류가 발생하기 쉽고, 특히 Windows와 macOS/Linux 같은 서로 다른 운영체제에서는 경로 구분자(Windows는 \, macOS/Linux는 /)가 달라 문제가 생길 수 있습니다.
path 모듈은 이러한 경로 관련 작업을 운영체제에 독립적인 방식으로 안전하고 일관되게 처리할 수 있도록 다양한 유틸리티 함수를 제공합니다. Java의 java.nio.file.Path 인터페이스나 java.io.File 클래스의 경로 관련 메소드들과 유사한 기능을 한다고 생각하시면 됩니다.
주요 path 모듈 함수 예시:
path 모듈을 사용하려면 먼저 require 해야 합니다.
JavaScript
const path = require('path');
- path.join([...paths]): 여러 개의 경로 문자열을 운영체제에 맞는 경로 구분자(예: / 또는 \)로 연결하여 하나의 완전한 경로로 만듭니다. 인자로 전달된 경로 중 빈 문자열은 무시됩니다. . (현재 디렉토리)나 .. (상위 디렉토리) 같은 상대 경로도 올바르게 처리합니다.문자열로 직접 경로를 합치는 것 ('/' + 'users' + '/' + ...) 보다 path.join()을 사용하는 것이 훨씬 안전하고 권장됩니다.
-
JavaScript
const myPath = path.join('/users', 'johndoe', 'documents', 'report.pdf'); console.log(myPath); // macOS/Linux: /users/johndoe/documents/report.pdf // Windows: \users\johndoe\documents\report.pdf (실제로는 C:\users\... 형태가 될 수 있음) const projectRoot = '/app'; const assetsFolder = 'public/images'; const imageName = 'logo.png'; const imagePath = path.join(projectRoot, assetsFolder, imageName); console.log(imagePath); // /app/public/images/logo.png (또는 \app\public\images\logo.png) console.log(path.join('foo', 'bar', '..', 'baz/quux', '.')); // foo/baz/quux (또는 foo\baz\quux) - path.resolve([...paths]): 주어진 경로들을 오른쪽에서 왼쪽으로 처리하여 절대 경로를 생성합니다. 만약 오른쪽부터 처리하다가 절대 경로(예: /foo 또는 C:\bar)를 만나면 이전의 경로들은 무시됩니다. 인자가 없으면 현재 작업 디렉토리의 절대 경로를 반환합니다.path.join()은 단순히 경로들을 연결하는 반면, path.resolve()는 항상 절대 경로를 반환하려고 시도한다는 차이점이 있습니다.
-
JavaScript
console.log(path.resolve('foo/bar', '/tmp/file', '..', 'a/../subfile')); // /tmp/subfile (또는 C:\tmp\subfile 등 실제 환경에 따라) console.log(path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')); // 현재 작업 디렉토리를 기준으로 경로를 계산: // 예를 들어 현재 작업 디렉토리가 /home/user/project 라면, // /home/user/project/wwwroot/static_files/gif/image.gif console.log(path.resolve('img.jpeg')); // /current/working/directory/img.jpeg - path.dirname(p): 주어진 경로 p에서 디렉토리 이름 부분을 반환합니다. Java의 File.getParent()와 유사합니다.
-
JavaScript
console.log(path.dirname('/users/johndoe/documents/report.pdf')); // /users/johndoe/documents console.log(path.dirname('config/settings.json')); // config - path.basename(p[, ext]): 주어진 경로 p에서 마지막 부분(파일 이름 또는 가장 마지막 디렉토리 이름)을 반환합니다. 선택적 인자 ext가 주어지고, p의 마지막 부분이 ext로 끝나면 ext를 제외한 부분을 반환합니다. Java의 File.getName()과 유사합니다.
-
JavaScript
console.log(path.basename('/users/johndoe/documents/report.pdf')); // report.pdf console.log(path.basename('/users/johndoe/documents/report.pdf', '.pdf')); // report console.log(path.basename('archive.tar.gz', '.gz')); // archive.tar console.log(path.basename('/some/dir/')); // dir - path.extname(p): 주어진 경로 p에서 확장자 부분을 반환합니다. 경로의 마지막 부분에 .이 없거나, .으로 시작하고 다른 문자가 없으면 빈 문자열을 반환합니다.
-
JavaScript
console.log(path.extname('index.html')); // .html console.log(path.extname('archive.tar.gz')); // .gz (가장 마지막 확장자만) console.log(path.extname('image.jpeg')); // .jpeg console.log(path.extname('filename')); // '' (빈 문자열) console.log(path.extname('.profile')); // '' (빈 문자열, Unix 숨김 파일의 경우) console.log(path.extname('folder/file.txt')); // .txt - path.isAbsolute(p): 주어진 경로 p가 절대 경로인지 여부를 boolean 값으로 반환합니다.
-
JavaScript
console.log(path.isAbsolute('/foo/bar')); // true console.log(path.isAbsolute('foo/bar')); // false console.log(path.isAbsolute('C:\\foo\\bar')); // true (Windows에서) - path.parse(p): 경로 문자열 p를 분석하여 객체 형태로 반환합니다. 객체는 root, dir, base, ext, name 속성을 가집니다.
-
JavaScript
const pathObject = path.parse('/home/user/dir/file.txt'); console.log(pathObject); // { // root: '/', // dir: '/home/user/dir', // base: 'file.txt', // ext: '.txt', // name: 'file' // } console.log(path.parse('C:\\path\\dir\\file.txt')); // { // root: 'C:\\', // dir: 'C:\\path\\dir', // base: 'file.txt', // ext: '.txt', // name: 'file' // } - path.format(pathObject): path.parse()가 반환하는 것과 같은 객체를 인자로 받아 경로 문자열로 조합합니다. dir과 base가 우선적으로 사용되며, 이들이 없으면 root, name, ext가 사용됩니다.
-
JavaScript
const newPath = path.format({ root: '/', dir: '/home/user/foo', base: 'bar.baz', // name: 'bar', // dir과 base가 있으면 무시됨 // ext: '.baz' // dir과 base가 있으면 무시됨 }); console.log(newPath); // /home/user/foo/bar.baz - path.sep: 현재 운영체제의 경로 구분자를 제공합니다. (Windows에서는 \, POSIX 시스템에서는 /)
- path.delimiter: 현재 운영체제의 환경 변수 경로 목록 구분자를 제공합니다. (Windows에서는 ;, POSIX 시스템에서는 :)
__dirname 와 __filename
path 모듈의 일부는 아니지만, 경로를 다룰 때 매우 유용하게 사용되는 Node.js 전역 변수(실제로는 각 모듈 스코프)가 있습니다.
- __filename: 현재 실행 중인 파일의 절대 경로를 나타내는 문자열입니다.
- __dirname: 현재 실행 중인 파일이 위치한 디렉토리의 절대 경로를 나타내는 문자열입니다. path.dirname(__filename)과 동일한 값을 가집니다.
이 변수들은 특히 현재 파일의 위치를 기준으로 다른 파일이나 디렉토리의 경로를 지정할 때 매우 유용합니다.
JavaScript
// 예를 들어, 현재 파일이 /Users/me/project/app.js 라면:
console.log('Current file path:', __filename); // /Users/me/project/app.js
console.log('Current directory path:', __dirname); // /Users/me/project
// __dirname을 사용하여 같은 디렉토리 내의 다른 파일 경로 만들기
const configFile = path.join(__dirname, 'config.json');
console.log('Config file path:', configFile); // /Users/me/project/config.json
path 모듈을 사용하면 운영체제에 구애받지 않고 경로 관련 로직을 깔끔하고 안정적으로 작성할 수 있습니다.
728x90
반응형
'프로그래밍 > NODEJS 강좌 BY GEMINI' 카테고리의 다른 글
| 주요 내장 모듈 살펴보기 - os: 운영체제 정보 접근,url: URL 파싱 및 조작 (0) | 2025.06.04 |
|---|---|
| 주요 내장 모듈 살펴보기 - events: 이벤트 기반 프로그래밍의 핵심 (Java의 이벤트 리스너와 유사점) (0) | 2025.06.04 |
| 주요 내장 모듈 살펴보기- http: HTTP 서버 및 클라이언트 생성 (Java의 java.net.HttpURLConnection 또는 서블릿 API와 비교) (0) | 2025.06.04 |
| 주요 내장 모듈 살펴보기 (0) | 2025.06.04 |
| 2️⃣ Node.js 핵심 모듈: 강력한 기본기 다지기 (0) | 2025.05.28 |