본문 바로가기
frontend/Node.js

[Node.js] Node.js 기본 개념 및 환경 설정: package.json 파일 구성 방법

by 신림쥐 2024. 5. 3.
728x90

 

     


     

    개요

    •  
    • Node.js 프로젝트를 시작할 때 가장 먼저 만드는 파일은 package.json입니다.
    • 이 파일은 프로젝트 정보, 서버 의존성 모듈, 라이브러리 환경설정 등을 저장하며, 개발 환경 설정 역할에 대하여 알아봅시다.

     

    Node.js 이란?

    • 라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를브라우저 이외의 환경에서도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시키고 자바스크립트 런타임 환경을 가진 언어이다.
    • 비동기 I/O를 지원
    • 단일 스레드 이벤트 루프 기반으로 동작함으로써 요청 처리 기능을 제공
    • 데이터를 실시간으로 처리하기 위해 I/O이 빈번하게 발생하는 SPA에 적합하고 CPU 사용률이 높은 애플리케이션에는 권장하지 않는다.

     

    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": ""
      }

     

     

     

    package.json 이란?

    • Node.js 환경을 설정하려면 package.json 파일을 사용하여 프로젝트의 의존성, 스크립트 및 메타데이터를 관리하는 파일이다.

     

    package.json 생성하기

    // Node.js 프로젝트에서 package.json 파일을 생성하려면, 터미널에서 다음 명령어를 실행
    $ npm init

     

    package.json 기본 구조

    {
      "name": "my-project",        // 프로젝트 이름
      "version": "1.0.0",          // 버전
      "description": "",           // 프로젝트 설명
      "main": "index.js",          // 진입점 파일
      "scripts": {                 // npm 스크립트
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],              // 프로젝트와 관련된 키워드
      "dependencies": {
        "react": "^17.0.2",
        "react-dom": "^17.0.2"
        "express": "^4.17.1"
      },
      "devDependencies": {
        "nodemon": "^2.0.19"
      },
      "author": "Your Name", // 작성자
      "license": "MIT"       // 라이센스
    }

     

     

    dependencies, devDependencies (패키지 유형)

    Node.js 프로젝트에서는 다양한 패키지를 dependencies와 devDependencies에 구분하여 관리한다.

    • dependencies : 앱에 종속된 가장 일반적인 종속성 패키지
    • devDependencies : 런타임에서는 필요하지 않은 빌드타임 & 개발에만 필요한 패키지
    • peerDependencies : 패키지에서 직접 require(import) 하지는 않더라도 호환성이 필요한 경우 사용하는 패키지
    // 실제 애플리케이션에서 필요한 라이브러리를 설치
    $ npm install <package-name>
    
    // 개발 환경에서만 필요한 라이브러리를 설치
    $ npm install <package-name> --save-dev

     

     

    scripts (노드 명령어)

    • package.json의 scripts 섹션은 자주 사용하는 명령어를 정의할 수 있는 곳입니다. 예를 들어, start와 dev 스크립트를 설정한다.

     

    engines

    • Node.js 버전 요구 사항을 설정한다.
    "engines": {
      "node": ">=14.0.0"
    }

     

     

    repository

    • 프로젝트의 Git 저장소 정보 추가
    "repository": {
      "type": "git",
      "url": "git+https://github.com/username/my-node-app.git"
    }
    728x90