node.js에서 경로 이야기를 하기 전에 절대경로와 상대경로의 개념을 먼저 알아야 한다.
어떠한 웹페이지나 파일이 가지고 있는 고유한 경로를 말한다.
즉, 처음부터 시작하여 목적지까지의 절대적인 경로를 의미한다.
특징으로 최상위 /를 포함하고 있다.
MacOS의 경우 /를 사용
EX) /Users/cloudoort/Desktop/projects/api/index.ts
Window의 경우 \를 사용
C:\Desktop\projects\api\index.ts
그냥 내 컴퓨터에서 파일이 위치한 주소라고 생각하면 이해하기 편하다
현재 위치한 곳을 기준으로 상대적으로 표현한 경로이다.
주로 프로젝트 내에서 import 할 때 쓰인다.
쉽게 말해, 자신을 기준으로 자신보다 앞에 있는지, 뒤에 있는지 표현한 경로이다
예를 들어
지금 A파일에 위치해 있고, 현 주소가 /Users/cloudoort/Desktop/projects/api/A이다
현 위치에서 projects/app 폴더 안의 B라는 파일의 상대 경로를 적고싶다.
파일B의 상대 경로는 현재 위치한 파일 A를 기준으로 적어주면 되는 것이다.
../app/B
(api폴더를 나가고 / app폴더 안으로 들어가서 /B 파일에 도달한다.)
참고
/: 포트 다음의 폴더 경로
./: 현재 위치
../: 현재 위치의 상위 디렉토리
../../: 현재 위치에서 두 단계 상위 디렉토리
node.js는 모듈 관계가 있는 경우가 많아 현재 파일의 경로나 파일명을 알아야 하는 경우가 많다.
node.js는 그러한 키워드로서 _dirname과 __filename을 통해 경로에 대한 정보를 제공한다.
// __filename은 file 명을 포함한 절대 경로 정보를 제공한다.
console.log(__filename); // /Users/cloudoort/Desktop/projects/api/index.ts
// __dirname은 file 명을 제외한 절대 경로 정보를 제공한다.
consoel.log(__dirname); // /Users/cloudoort/Desktop/projects/api
모든 기술은 특정 문제를 해결하기 위해 탄생한다.
path 모듈은 운영체제 별로 경로 구분자가 달라 생기는 문제를 해결하기 위해 등장했다.
(위에서 절대경로를 이야기 할 때, 운영체제별로 최초 디렉토리가 다르다는 것을 알 수 있었다.)
path 모듈은 내장 모듈로 별도의 설치 없이 import하여 사용가능하다.
path인자로 받은 주소(string)들을 합쳐준다.
각 운영체제 별로 다른 디렉토리를 합쳐줄 때 생기는 문제를 유연하게 해결해주면서 경로를 합쳐준다.
import path from 'express';
path.join('path1', 'path2', ...)
파일명을 반환한다.
import path from 'express';
console.log(path.basename(__filename));
// app.js
디렉토리 주소를 반환한다.
import path from 'express';
console.log(path.dirname(api));
// /Users/cloudoort/Desktop/projects/api
파일 확장자 명을 반환한다.
import path from 'express';
console.log(path.dirname(api));
// js
두 경로를 인자로 전달하면, 첫 번째 경로에서 두 번째 경로로 가는 방법을 결과로 리턴한다.
// from: <string> / to: <string> / return: <string>
import path from 'express';
path.relative('/Users/cloudoort/Desktop/projects/api', '/Users')
// return: '../../../../'