본문 바로가기
Backend/Server

Node.js, 기본 개념과 유틸리티 npm, npx 이해

by 신림쥐 2023. 12. 20.
728x90

Node.js

  • Node.js는 자바스크립트 엔진을 브라우저 환경 외부에서도 사용할 수 있도록 만든 자바스크립트 런타임 환경입니다.
  • 비동기 I/O를 지원하며, 단일 스레드 이벤트 루프 기반으로 동작하여 비동기 요청 처리를 효율적으로 합니다.
  • **SPA(Single Page Application)**와 같이 I/O가 빈번한 애플리케이션에 적합하며, CPU 사용률이 높은 애플리케이션에는 권장되지 않습니다.

 

npm (Node Package Manager)

npm은 Node.js 패키지 매니저로, 자바스크립트 라이브러리나 도구들을 설치하고 관리하는 데 사용됩니다.

  • 기능:
    • 패키지 설치: npm install <패키지명>
    • 프로젝트의 의존성 관리
    • 패키지 업데이트: npm update
    • 패키지 삭제: npm uninstall <패키지명>
    • 프로젝트 초기화: npm init
npm install react    # react 패키지를 설치
npm install express  # express 패키지를 설치

 

npx (Node Package Execute)

npx는 npm 패키지를 실행하는 데 사용됩니다. npx를 사용하면 설치된 패키지를 전역적으로 또는 로컬에서 실행할 수 있습니다. 특히 일회성 실행이나 패키지의 특정 버전 실행에 유용합니다.

  • 기능:
    • 패키지 실행: npx는 특정 패키지를 설치하지 않고도 즉시 실행할 수 있게 해줍니다.
    • 패키지의 최신 버전 실행: 로컬 또는 전역에 패키지를 설치하지 않고 최신 버전을 바로 실행합니다.
    • 일회성 실행: 실행하고 나서 다시 사용하지 않을 패키지를 설치할 때 유용합니다.
npx create-react-app my-app    # create-react-app을 설치하지 않고 바로 실행하여 새 React 앱 생성
npx cowsay "Hello, world!"     # cowsay 패키지를 바로 실행하여 메시지를 출력

 

 

Node.js 버전 출시

  • Node.js 커뮤니티에서 1년에 2번(약 6개월 간격으로) 새 버전을 출시한다.
  • 출시 후 6개월 간 Current 상태를 거치고, LTS(Long Term Support)버전으로 된다.
    • 즉, 새 버전을 배포 시 마다 이전 Current 버전을 LTS 버전으로 변경, 새 버전을 Current 상태로 배포하는 것.

 

Node.js — Run JavaScript Everywhere

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

 

Node.js 최신 버전의 장단점

Node 버전과 npm 버전 사이에는 호환성이 존재하지 않는다.

  장점 단점
안정성 LTS(30개월 지원)로 안정성 보장, 2027년 7월 9일까지 안정성 업데이트 제공 최신 버전의 Node.js를 사용할 경우, Docker 이미지와 같은 환경에서 버전 불일치로 인한 문제 확인 필요
새로운 기능 새로운 API 추가 및 성능 향상, 빠른 런타임 제공 특정 버전에서 새로운 기능을 추가하거나 deprecated 된 기능이 있을 경우 기존 프로젝트에서 사용 중인 라이브러리들이 작동하지 않을 수 있다.
호환성 기존 라이브러리 및 프레임워크와의 호환성 증가 최신 ECMAScript 표준을 지원하지만, 코드가 구버전 Node.js에서 실행되던 방식과 호환되지 않는 경우가 있을 수 있습니다. 이로 인해 기존 코드베이스에서 오류가 발생할 수 있다.
ECMAScript 지원 최신 ECMAScript 표준 지원, 효율적인 자바스크립트 개발 가능

 

 

 

노드 버전 관리 Node.js Version

1. 버전 명칭 (Major.Minor.Patch)

  • 주버전(MAJOR) : 18 - 기존과 호환되지않은 기능 추가
  • 부버전(MINOR)2 : 2 - 기존과 호환되는 기능 추가
  • 수버전(PATCH)0: 0 - 기존과 호환되는 버그 수정
// 특정 버전보다 높거나 낮은 경우 크다, 작다, 크거나 같다, 작거나 같다 표기
>1.2.3
>=1.2.3
<1.2.3
<=1.2.3

 

2. 버전 업데이트 호환 범위

  • 틸트(~): 마이너 버전에소 패치 버전 변경 → 마이너 버전이 없는 경우(~0) 1.0.0 까지 포함
  • 캐럿(^): 정식버전에서 마이너와 패치 버전 변경 → 정식버전 미만까지는 패치만 갱신(^0) 0.1.0까지 포함 → 하위호환성을 따름
// 1.2.3보다 크거나 같고, 2.0.0보다 작은 범위내에서 업데이트
^1.2.3
// 1.2.3을 포함해서 같거나 크고, 1.3.0보다 작은 범위내에서 업데이트
~1.2.3

 

 

Looking for latest release of a version branch?
버전 지점의 최신 릴리스를 찾고 계십니까?

 

Full details regarding Node.js release schedule are available
{
  "v0.8": {
    "start": "2012-06-25",
    "end": "2014-07-31"
  },
  "v0.10": {
    "start": "2013-03-11",
    "end": "2016-10-31"
  },
  "v0.12": {
    "start": "2015-02-06",
    "end": "2016-12-31"
  },
  "v4": {
    "start": "2015-09-08",
    "lts": "2015-10-12",
    "maintenance": "2017-04-01",
    "end": "2018-04-30",
    "codename": "Argon"
  },
  "v5": {
    "start": "2015-10-29",
    "maintenance": "2016-04-30",
    "end": "2016-06-30"
  },
  "v6": {
    "start": "2016-04-26",
    "lts": "2016-10-18",
    "maintenance": "2018-04-30",
    "end": "2019-04-30",
    "codename": "Boron"
  },
  "v7": {
    "start": "2016-10-25",
    "maintenance": "2017-04-30",
    "end": "2017-06-30"
  },
  "v8": {
    "start": "2017-05-30",
    "lts": "2017-10-31",
    "maintenance": "2019-01-01",
    "end": "2019-12-31",
    "codename": "Carbon"
  },
  "v9": {
    "start": "2017-10-01",
    "maintenance": "2018-04-01",
    "end": "2018-06-30"
  },
  "v10": {
    "start": "2018-04-24",
    "lts": "2018-10-30",
    "maintenance": "2020-05-19",
    "end": "2021-04-30",
    "codename": "Dubnium"
  },
  "v11": {
    "start": "2018-10-23",
    "maintenance": "2019-04-22",
    "end": "2019-06-01"
  },
  "v12": {
    "start": "2019-04-23",
    "lts": "2019-10-21",
    "maintenance": "2020-11-30",
    "end": "2022-04-30",
    "codename": "Erbium"
  },
  "v13": {
    "start": "2019-10-22",
    "maintenance": "2020-04-01",
    "end": "2020-06-01"
  },
  "v14": {
    "start": "2020-04-21",
    "lts": "2020-10-27",
    "maintenance": "2021-10-19",
    "end": "2023-04-30",
    "codename": "Fermium"
  },
  "v15": {
    "start": "2020-10-20",
    "maintenance": "2021-04-01",
    "end": "2021-06-01"
  },
  "v16": {
    "start": "2021-04-20",
    "lts": "2021-10-26",
    "maintenance": "2022-10-18",
    "end": "2023-09-11",
    "codename": "Gallium"
  },
  "v17": {
    "start": "2021-10-19",
    "maintenance": "2022-04-01",
    "end": "2022-06-01"
  },
  "v18": {
    "start": "2022-04-19",
    "lts": "2022-10-25",
    "maintenance": "2023-10-18",
    "end": "2025-04-30",
    "codename": "Hydrogen"
  },
  "v19": {
    "start": "2022-10-18",
    "maintenance": "2023-04-01",
    "end": "2023-06-01"
  },
  "v20": {
    "start": "2023-04-18",
    "lts": "2023-10-24",
    "maintenance": "2024-10-22",
    "end": "2026-04-30",
    "codename": "Iron"
  },
  "v21": {
    "start": "2023-10-17",
    "maintenance": "2024-04-01",
    "end": "2024-06-01"
  },
  "v22": {
    "start": "2024-04-23",
    "lts": "2024-10-29",
    "maintenance": "2025-10-21",
    "end": "2027-04-30",
    "codename": ""
  },
  "v23": {
    "start": "2024-10-15",
    "maintenance": "2025-04-01",
    "end": "2025-06-01"
  },
  "v24": {
    "start": "2025-04-22",
    "lts": "2025-10-28",
    "maintenance": "2026-10-20",
    "end": "2028-04-30",
    "codename": ""
  }
728x90