Node.js

Node.js 내장 모듈 - os

김핵센 2023. 5. 1. 19:24

Node.js의 내장 모듈 중 하나인 os를 알아볼 것이다.

 

os - 운영체제의 정보를 담고 있다.

 

접근 방법

os 접근 방법은 해당 모듈을 require로 가져오면 된다. (내장 모듈이기 때문에 경로를 지정해줄 필요는 X)

const os = require('os');

console.log('운영체제 정보---------------------------------');
console.log('os.arch():', os.arch());
console.log('os.platform():', os.platform());
console.log('os.type():', os.type());
console.log('os.uptime():', os.uptime());
console.log('os.hostname():', os.hostname());
console.log('os.release():', os.release());

console.log('경로------------------------------------------');
console.log('os.homedir():', os.homedir());
console.log('os.tmpdir():', os.tmpdir());

console.log('cpu 정보--------------------------------------');
console.log('os.cpus():', os.cpus());
console.log('os.cpus().length:', os.cpus().length);

console.log('메모리 정보-----------------------------------');
console.log('os.freemem():', os.freemem());
console.log('os.totalmem():', os.totalmem());

 

os.arch()

os.arch 속성은 현재 Node.js 바이너리가 컴파일된 CPU 아키텍처를 반환한다.

이 정보를 사용하여 특정 작업을 수행하는 데 유용할 수 있다.

=> 예를 들어 64비트(x64) CPU 아키텍처를 사용하는 컴퓨터에서 Node.js를 설치하면, 설치된 Node.js 바이너리 파일은 x64 아키텍처에서 컴파일된 바이너리 파일이다.

이와 같이 Node.js 바이너리 파일은 컴파일할 때 사용한 CPU 아키텍처에 따라 생성된다.

Node.js 바이너리 파일이 어떤 CPU 아키텍처에서 컴파일되었는지 알 수 있다면, 이 정보를 활용하여 다음과 같은 용도로 활용될 수 있다.

  1. 호환성 검사: 현재 실행 중인 Node.js 바이너리 파일이 호환되는 CPU 아키텍처인지 확인할 수 있다. 이를 통해, 특정 CPU 아키텍처에서 실행하는데 문제가 발생하지 않도록 방지할 수 있다.
  2. 최적화: 각 CPU 아키텍처마다 성능 차이가 있기 때문에, 특정 CPU 아키텍처에 대해 최적화된 코드를 생성할 수 있습니다. 이를 통해, 실행 속도나 메모리 사용량 등을 최적화할 수 있다.
  3. 다양한 플랫폼 지원: 서로 다른 CPU 아키텍처에서 실행되는 여러 플랫폼에서 Node.js를 지원하고자 할 때, 각 플랫폼에 맞게 Node.js 바이너리 파일을 생성할 수 있다. 이를 통해, 다양한 플랫폼에서 Node.js를 실행할 수 있다.
  4. 보안: 특정 CPU 아키텍처에서 실행되는 바이너리 파일은 해당 아키텍처에서만 실행될 수 있기 때문에, 보안에 유리하다. 예를 들어, x64 아키텍처에서 실행되는 Node.js 바이너리 파일은 x64 아키텍처가 아닌 다른 아키텍처에서는 실행할 수 없다. 따라서, 보안적인 측면에서도 CPU 아키텍처 정보는 중요하다.

os.platform()

현재 운영체제의 플랫폼 정보를 제공한다.

이 메소드를 호출하면, 문자열 형태로 현재 운영체제의 이름이 반환된다.

예를 들어, Windows 운영체제에서 os.platform() 메소드를 호출하면 "win32" 문자열이 반환되며, macOS 운영체제에서 호출하면 "darwin" 문자열이 반환된다. Linux 운영체제에서 호출하면 "linux" 문자열이 반환된다. 

메소드를 사용하면 Node.js 애플리케이션이 실행 중인 운영체제의 종류를 확인할 수 있으므로, 이에 따라 다른 동작을 수행하도록 애플리케이션을 작성할 수 있다.

os.type()

현재 운영체제의 이름을 반환한다.

메소드를 호출하면, 문자열 형태로 현재 운영체제의 이름이 반환된다. 예를 들어, Windows 운영체제에서 os.type() 메소드를 호출하면 "Windows_NT" 문자열이 반환되며, macOS 운영체제에서 호출하면 "Darwin" 문자열이 반환된다. Linux 운영체제에서 호출하면 "Linux" 문자열이 반환된다.

os.platform() 메소드와 유사하지만, 반환되는 값이 약간 다르다. os.platform() 메소드는 운영체제의 플랫폼 정보를 반환하는 반면, os.type() 메소드는 운영체제의 이름을 반환한다.

메소드를 사용하면 Node.js 애플리케이션이 실행 중인 운영체제의 종류를 확인할 수 있으므로, 이에 따라 다른 동작을 수행하도록 애플리케이션을 작성할 수 있다.

os.uptime()

현재 시스템이 부팅된 이후 경과된 시간을 초 단위로 반환한다.

이 메소드를 호출하면, 시스템이 부팅된 이후 경과된 시간이 초 단위로 반환된다.

이 값을 사용하면, 현재 시스템이 얼마나 오랫동안 실행 중인지 확인할 수 있다. 이 메소드의 반환 값은 부동 소수점 형태로 반환되며, 소수점 이하 자리수가 있을 수 있다.

예를 들어, os.uptime() 메소드가 123.456을 반환하면, 시스템이 부팅된 이후 123.456초가 경과했음을 의미한다.

메소드는 서버 운영 등에서 시스템 상태를 모니터링하거나, 시스템 로그 분석 등에 활용될 수 있다.

예를 들어, 시스템 로그에서 시간 정보를 파악하기 위해 사용될 수 있다.

os.hostname()

현재 컴퓨터의 호스트 이름을 문자열로 반환한다.

호스트 이름은 일반적으로 컴퓨터를 식별하는 데 사용되며, 네트워크 환경에서 다른 컴퓨터들과 통신할 때 사용된다.

호스트 이름은 컴퓨터의 운영체제에서 설정되며, 일반적으로 컴퓨터의 이름이나 IP 주소와 연관되어 있다.

또한, 네트워크 구성에 따라 다를 수 있다. 일부 경우에는 동적으로 할당되거나 변경될 수 있다.

예를 들어, DHCP를 사용하는 네트워크에서는 호스트 이름이 자동으로 할당될 수 있다.

os.hostname() 메소드는 주로 네트워크 프로그래밍과 관련된 작업에서 사용된다.

예를 들어, TCP/IP 프로토콜을 사용하여 다른 컴퓨터와 통신하는 경우 호스트 이름을 사용하여 특정 컴퓨터를 식별할 수 있다.

os.release()

현재 운영체제의 릴리즈 버전을 나타내는 문자열을 반환하는 Node.js의 메소드이다. 

이 메소드는 운영체제마다 다른 값을 반환한다.

예를 들어, macOS에서는 커널 버전을 반환하며, Linux에서는 커널 버전과 함께 디스트리뷰션의 이름도 반환할 수 있다.

이 메소드를 사용하면 Node.js 애플리케이션이 실행 중인 운영체제에 대한 정보를 얻을 수 있다.

이 정보는 운영체제마다 다르게 처리되는 파일 경로 및 명령행 인수와 같은 시스템 관련 작업에서 유용하게 사용될 수 있다.

os.homedir()

현재 사용자의 home directory 경로를 반환한다.

Home directory는 현재 작업 중인 사용자의 기본 디렉토리이며, 일반적으로 사용자 계정 이름으로 된 디렉토리이다.

예를 들어, Unix/Linux 시스템에서 os.homedir() 함수는 "/home/사용자_이름"과 같은 형식의 경로를 반환하고, Windows 시스템에서는 "C:\Users\사용자_이름"과 같은 형식의 경로를 반환한다. 따라서 os.homedir() 함수를 사용하면 현재 작업 중인 사용자의 홈 디렉토리 경로를 손쉽게 가져올 수 있다.

이 경로를 이용하여 사용자의 설정 파일이나 데이터를 저장하는 등의 작업을 수행할 수 있다.

os.tmpdir()

현재 운영 체제의 기본 임시 파일 디렉토리의 경로를 반환한다.

이 디렉토리는 일반적으로 시스템에서 생성된 임시 파일을 저장하는 데 사용된다. 따라서 이 디렉토리의 경로는 파일 시스템의 일시적인 사용을 위해 일시적인 파일을 생성하는 데 유용하다.

예를 들어, Node.js에서 fs 모듈을 사용하여 파일을 작성하거나 읽는 경우, 파일이름을 포함한 경로를 제공해야 한다.

이때 os.tmpdir() 메소드를 사용하여 일시적으로 생성된 파일을 저장할 임시 디렉토리의 경로를 쉽게 얻을 수 있다.

os.cpus()

해당 컴퓨터의 CPU 정보를 나타낸다.

=> 컴퓨터 환경마다 코어의 개수가 다르기 때문에 해당 환경의 코어 개수를 가져오고 싶을 때 주로 사용한다.

현재 시스템에서 사용 가능한 CPU 정보를 객체 배열 형태로 반환한다.

반환된 객체 배열의 각 요소는 시스템의 각 물리적 CPU 코어를 나타내며, 다음과 같은 속성을 가진다.

  • model: CPU 모델명
  • speed: CPU 클럭 속도(MHz)
  • times: CPU 사용량 정보를 담고 있는 객체. 다음과 같은 속성을 가진다.
    • user: 사용자 모드에서 CPU 사용 시간(ms)
    • nice: 우선순위가 낮은 프로세스에서 CPU 사용 시간(ms)
    • sys: 시스템 모드에서 CPU 사용 시간(ms)
    • idle: 유휴 상태에서 CPU 사용 시간(ms)
    • irq: 하드웨어 인터럽트에서 CPU 사용 시간(ms)

os.cpus.length()

현재 시스템에서 사용 가능한 CPU의 개수를 반환한다.

CPU 코어 수에 대한 정보는 Node.js의 멀티스레딩 작업을 위해 중요하다.

Node.js는 싱글 스레드로 동작하지만, 백그라운드에서 멀티스레딩 작업을 처리할 수 있도록 worker_threads 모듈을 제공한다.

CPU 코어 수가 많을수록 worker_threads 모듈을 사용하여 백그라운드 작업을 병렬 처리할 수 있다.

os.freemem()

현재 시스템에서 사용 가능한 메모리 양을 바이트 단위로 반환한다.

즉, 시스템에서 현재 사용 중이지 않은 메모리의 양을 알 수 있다.

이 메소드는 시스템이 현재 사용 중인 전체 메모리 양을 가져와서 사용 중이지 않은 양을 계산한다.

이 메소드는 운영체제의 유형과 시스템 구성에 따라 반환되는 값이 달라질 수 있다.

예를 들어, Linux 시스템에서는 캐시된 메모리도 사용 가능한 메모리로 간주되기 때문에 os.freemem()이 반환하는 값이 예상보다 작을 수 있다.

os.totalmem()

현재 시스템의 총 메모리(RAM) 용량을 바이트 단위로 반환한다.

이 메소드를 호출하면, 시스템의 총 물리 메모리 용량을 바이트 단위로 반환한다.

이 값은 시스템에서 사용 가능한 전체 메모리를 나타낸다.

예를 들어, 만약 메모리가 16GB인 시스템에서 os.totalmem()을 호출하면, 약 17,179,869,184 (16GB를 바이트 단위로 변환한 값)를 반환할 것이다.

이 메소드는 Node.js 애플리케이션에서 메모리 사용량을 추적하고 최적화하는 데 유용하다.

예를 들어, Node.js의 Heap 메모리 사용량이 시스템의 총 메모리 용량을 초과하지 않도록하는 등의 목적으로 사용될 수 있다.

 

이상 다른 메소드도 많지만 자주 쓰일만한 메소드만 정리해보았습니다..!