웹 개발 (Frontend Developer)/Node.js

벡엔드에서 사용하는 Node.js 기본 이해

Jackykim 2024. 9. 5. 19:58

<Node.js 란?>

자바스크립트 런타임(Node.js)은 확장 가능한 네트워크 애플리케이션을 구축하기 위해 설계된 환경입니다. Node.js를 사용하면 자바스크립트를 풀스택으로 사용할 수 있으며, 확장성이 뛰어나고, 비동기 처리(Non-blocking)와 방대한 에코시스템(커뮤니티)을 제공합니다. **런타임 (runtime)** 이란 프로드래밍 언어가 구동되는 환경을 말합니다. 

 

<Node.js 설치하기>

컴퓨터가 브라우저 없이 Javascript 코드를 읽을 수 있게 Node.js를 설치해 주겠습니다. 

Node.js 웹사이트로로 이동하여 안전된 버전 (보통 숫자가 더 낮은 버전 / LTS 버전) 다운로드 및 설치합니다.

설치 완료 후에 Node 실행하여 node --version으로 어떤 버전에 있는지 확인 가능합니다.
Node 환경에 진입할 때에는 $node으로 가능하고 .exit으로 node 환경에서 나옵니다.

 

<Node.js REPL은 뭔가?>

REPL은 Read-Eval-Print-Loop의 약어로 사용자가 특정 코드를 입력하면 그 코드를 평가하고 코드의 실행결과를 출력해 주는 것을 반복해 주는 환경을 말합니다. REPL 환경에서 자바스크립트 코드를 즉석에서 바로 실행해 결과를 확인해 볼 때 주로 사용합니다. 

 

<Node Package Manager (npm) 이란?>

오픈 소스 Node.js 프로젝트 게시를 위한 온라인 리포지토리(저장소)입니다. 패키지 설치, 버전 관리 및 종속성 관리를 지원하는 해당 저장소와 상호 작용하기 위한 명령줄 유틸리티입니다.

 

Visual Studio Code 터미널에 들어가 npm init -y 하면 package.json 생성하게 됩니다. 다음 필요한 패키지를 설치하려면 npm install <패키지명> 명령어를 사용합니다. 예를 들어 axios 패키지 설치 및 기능 사용하고 싶으면 npm install axios 하면 됩니다. 패키지 설치 할 경우 Node_modules 폴더가 생기게 됩니다. node_modules 디렉터리에는 package.json에 있는 모듈뿐만 아니라, package.json에 있는 모듈이 의존하고 있는 모듈 전부를 포함하고 있습니다.

 

<Package-lock.json에 대해>

package-lock.json은 의존성 트리(패키지 종속성 구조)에 대한 정보를 기록하는 파일로, 설치된 시점의 정확한 상태를 유지합니다.

 

Package-lock.json 파일을 사용하는 이유:

- 이 파일은 소스 리포지토리에 커밋하기 위한 것이며 다양한 용도로 사용됩니다.

- 팀원, 배포 및 지속적 통합이 정확히 동일한 종속성을 설치하도록 보장하는 종속성 트리의 단일 표현을 설명합니다. 

- 사용자가 디렉터리 자체를 커밋하지 않고도 node_modules의 이전 상태로 "시간 여행"할 수 있는 기능을 제공합니다.

- 버전이 달라서 호환이 안된다면 에러가 나게 되고 다른 모듈과 버전 충돌이 일어날 수 있어 package-lock.json을 사용하여 문제 해결 할 수 있습니다. 

 

버전 문제나 npm 설치하면 취약점들이 발견되면 <npm audit> 사용하면 됩니다.

audit 명령은 프로젝트에 구성된 종속성에 대한 설명을 기본 레지스트리에 제출하고 알려진 취약성에 대한 보고서를 요청합니다. fix 인수가 제공되면 수정 사항이 패키지 트리에 적용됩니다.

npm audit 예시

 

npm audit fix --force 명령어를 터미널에 기입하면 버전의 취약점들을 고칩니다. 

npm audit fix --force 예시

 

<npm install nodemon>

Nodemonnpm i -g nodemon으로 설치가 가능합니다. 

nodemon은 디렉터리의 파일 변경이 감지되면 노드 응용 프로그램을 자동으로 다시 시작하여 Node.js 기반 응용 프로그램을 개발하는 데 도움이 되는 도구입니다. (변경 시 node을 반복적으로 끄고 다시 시작하는 일을 방지)

nodemon을 사용하려면 스크립트를 실행할 때 명령줄에서 node라는 단어를 바꾸면 됩니다.

Package.json 스크립트 업데이트

 

nodemon 적용하려면 터미널에서 npm run dev 실행하면 됩니다. 

 

노드 패키지들의 버전은 세 자리로 되어있고 상단에서 알아본것과 같이 버전이 다르면 문제가 생길 수 있어 버전 숫자의 의미에 대해 알아보겠습니다. <Semantic Versioning>

 

버전 번호 MAJOR.MINOR.PATCH가 주어지면 다음을 증가시킵니다.

1. 호환되지 않는 API 변경 시 MAJOR 버전
2. 이전 버전과 호환되는 방식으로 기능을 추가하는 경우의 MINOR 버전
3. 이전 버전과 호환되는 버그 수정 시 PATCH 버전

 

틸드 (~)
patch 버전까지만 설치 또는 업데이트합니다.
틸드는 현재 지정한 버전의 마지막 자리 내의 범위에서만 자동으로 업데이트합니다. 

~0.0.1        >=0.0.1 <0.1.0 
~0.1.1        >=0.1.1 <0.2.0 
~0.1           >=0.1.0 <0.2.0 
~0              >=0.0 <1.0 
버전을 명시했을 때 위와 같은 범위 내에서 자동으로 업데이트합니다.

캐럿
minor 버전까지만 설치 또는 업데이트합니다.
캐럿은 Node.js 모듈이 Sematic Versioning의 규약을 따른다는 것을 신뢰한다는 가정하에서 동작하며 그러기에 MINOR나 PATCH버전은 하위 호환성이 보장되므로 그 내에서는 자동으로 업데이트합니다.

^1.0.5        >=1.0.5 <2.0 
^1.0           >=1.0.0 <2.0 
^1              >=1.0.0 <2.0 

* 버전이 1.0.0 미만인 경우에는 예외사항. 
^0.1.4         >=0.1.4 <0.2.0 
^0.1           >=0.1.0 <0.2.0 
^0.0.1        ==0.0.1 

소프트웨어 1.0 버전 전에는 API 변경이 계속 일어납니다. 그래서 0.3을 쓰다가 0.4를 사용하면 API가 호환이 안될 수 있습니다.