OS의 장벽을 넘는 필수 유틸리티: path와 os
개발 환경(Windows)과 배포 환경(Linux, macOS)은 폴더 경로 구분자(\ vs /)나 CPU 아키텍처가 서로 다릅니다. Node.js는 이러한 운영체제 간의 차이를 완벽히 추상화하여 동일한 코드로 작동할 수 있게 해주는 path 모듈과 os 모듈을 기본으로 제공합니다.
가장 헷갈리는 path.join() vs path.resolve()
| 함수명 |
동작 원리 |
예시 (Windows 환경 기준) |
| path.join() |
주어진 인자들을 하나로 단순히 합치며(결합), ..(상위 폴더)나 .(현재 폴더)를 알아서 계산해 줍니다. 절대 경로 /가 중간에 있어도 상대 경로처럼 무시하고 단순 합체합니다. |
path.join('a', 'b', '/c') // 결과: a\b\c |
| path.resolve() |
오른쪽에서 왼쪽으로 읽으며, 가장 먼저 만나는 루트 절대경로(/)를 기준으로 최종 경로를 반환합니다. 절대경로 앞의 값들은 완전히 무시됩니다! |
path.resolve('a', 'b', '/c') // 결과: C:\c |
os 모듈 주요 함수 모음
서버의 자원 상태(CPU, 메모리 부족 등)를 모니터링할 때 주로 쓰입니다.
• os.platform() : 운영체제 종류 반환 (win32, linux, darwin)
• os.cpus() : 컴퓨터의 CPU 코어 정보 객체 배열 반환 (코어 수만큼 배열 크기가 나옴)
• os.freemem() : 현재 사용 가능한 남은 RAM 용량 (바이트 단위)
• os.homedir() : 현재 운영체제 사용자의 홈 디렉토리 경로 반환
path와 os 모듈 실행 결과
실제 스크립트 파일에서 path.join()과 path.resolve()를 실행했을 때 반환되는 경로 문자열의 차이점, 그리고 os 모듈이 뱉어내는 운영체제 시스템 정보를 터미널에서 확인해 보세요.
const path = require('path');
const os = require('os');
// 1. path.join() 테스트
console.log('--- path.join() ---');
console.log(path.join('/users', 'minstudio', '../temp'));
// 결과: /users/temp
// 설명: minstudio로 들어갔다가 ../ 로 다시 나와서 temp로 진입함
// 2. path.resolve() 테스트
console.log('\n--- path.resolve() ---');
console.log(path.resolve('users', 'minstudio', '/temp'));
// 결과: /temp
// 설명: 맨 오른쪽 '/temp'가 절대경로이므로 그 앞의 폴더들은 모두 무시됨!
// 3. os 모듈 정보 조회
console.log('\n--- OS 시스템 정보 ---');
console.log(`OS 플랫폼: ${os.platform()}`);
console.log(`CPU 코어 수: ${os.cpus().length}개`);
Terminal (Node.js Execution)
$ node demo.js
--- path.join() ---
/users/temp
--- path.resolve() ---
/temp
--- OS 시스템 정보 ---
OS 플랫폼: win32
CPU 코어 수: 16개