티스토리 뷰

Node.js

[Node.js] 내부 모듈 os, path

ljy98 2022. 3. 17. 01:02

1. os 내부 모듈

2. path 내부 모듈


1. os 내부 모듈

const os = require('os');
console.log(os.cpus().length); // 4
console.log(os.cpus()); // model, speed, times ...
console.log(os.platform()); // linux
console.log(os.homedir()); // home/jenny
console.log(os.hostname()); // DESKTOP-PUMI14Q
console.log(os.freemem()); // 2342322176
console.log(os.totalmem()); // 6120857600
console.log(os.networkInterfaces()); // 네트워크 인터페이스 정보 (address, netmask, mac ...)

os는 내부 모듈이기 때문에 npm install로 설치할 필요가 없다.

os 객체의 cpus() 메소드는 이름 그대로 cpu에 대한 정보를 나타내준다. 내 노트북의 cpu는 4개이다.

platform()은 현재 어떤 운영체제를 사용하고 있는지 알려준다. 윈도우는 win32, 맥은 darwin이라는 출력 결과가 나온다.

hostname()은 컴퓨터의 호스트네임을 말한다.

freemem()과 totalmem()은 각각 유휴메모리와 총 메모리를 나타낸다.

networkInterfaces()는 네트워크 인터페이스 정보를 준다. IP 주소, 넷마스크, MAC 주소 등이 출력된다.

 

 

2. path 내부 모듈

// path.js

const os = require('os');
const path = require('path');

console.log(__dirname); // /home/jenny/workspace/220315/multer
console.log(__filename); // /home/jenny/workspace/220315/multer/path.js

let dir1 = path.join(__dirname, 'jenny.js'); // /home/jenny/workspace/220315/multer/jenny.js
let dir2 = path.resolve(__dirname, 'jenny.js'); // /home/jenny/workspace/220315/multer/jenny.js

dir1 = path.join(__dirname, '/jenny.js'); // /home/jenny/workspace/220315/multer/jenny.js (절대경로 무시)
dir2 = path.resolve(__dirname, '/jenny.js'); // /jenny.js (절대경로 존중)

let str = 'server.js';
console.log(str.split('.')[1]); // js
console.log(path.extname('server.js')); // .js
console.log(path.dirname('/home/jenny/workspace/220315/multer/jenny.js')); // /home/jenny/workspace/220315/multer
console.log(path.basename('/home/jenny/workspace/220315/multer/jenny.js')); // jenny.js
console.log(path.basename('/home/jenny/workspace/220315/multer/jenny.js', '.js')); // jenny
console.log(path.basename('/home/jenny/workspace/220315/multer/jenny.js').split('.')[0]); // jenny

__dirname은 node 명령어를 실행한 디렉토리의 절대 경로를 나타낸다.

즉, node path.js라는 명령어를 실행한 디렉토리의 절대 경로는 /home/jenny/workspace/220315/multer이다.

 

__filename은 node 명령어를 실행한 파일의 절대 경로를 나타낸다. 따라서 __dirname 결과 뒤에 파일명을 붙인 것과 같다.

 

path 객체의 join() 메소드와 resolve() 메소드는 () 안의 2개의 인자를 붙여주는 역할을 한다. 둘의 차이는 join()은 절대경로를 무시하고, resolve()는 절대경로를 존중해준다는 것이다.

 

쉽게 설명하자면, join()을 사용했을 때에는 두 번째 인자가 'jenny.js'일 때와 '/jenny.js'일 때 콘솔 로그 결과가 같고, resolve()를 사용했을 때에는 다른 결과가 나온다. 이는 join()에서는 두 번째 인자를 상대 경로로 인식하여 첫 번째 인자에 무조건 붙여주고, resolve()에서는 '/jenny.js'를 절대 경로로 인식하여 ('/'라는 최상위 디렉토리 하위에 jenny.js 파일이 있다는 것으로 인식하여) 나타난 차이이다.

 

extname()은 파일의 확장자만 분리해주고, basename()은 __filename에서 __dirname을 뺀 나머지라고 생각하면 된다. basename()에 2개의 인자를 넣을 경우 두 번째 인자에 들어간 부분이 제외된 결과가 나오게 된다.

 

Q. __dirname 과 process.cwd()는 무슨 차이일까?

대체로 __dirname과 process.cwd() (혹은 pwd)의 콘솔 로그 결과는 같은 내용이 출력된다. 하지만 두 결과는 항상 같지 않고, 개념 자체도 비슷한 것 같지만 차이가 존재한다. process.cwd()와 pwd 명령어는 현재 작업 중인 디렉토리를 말한다. 

jenny@DESKTOP-PUMI14Q:~/workspace/220315/multer$ node ~/hello/abc.js

예를 들어, 절대 경로가 /workspace/220315/multer 인 곳에서 node 명령어로 다른 경로에 있는 abc.js 파일을 실행한다고 가정하자. 이때 __dirname과 process.cwd()는 다음과 같다.

console.log(__dirname); // /home/jenny/hello
console.log(process.cwd()); // /home/jenny/workspace/220315/multer

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함