Node.js 개요

1 minute read

Node.js

  • V8 엔진에 기반해 만들어진 자바스크립트 서버 사이드 플랫폼
  • Event Driven
  • Single Thread
  • Non-blocking I/O
  • 변수 선언은 var, let, const 이용

Event Loop

  • 시스템 커널에 작업을 떠넘겨 non-blocking I/O 작업을 수행할 수 있게 해준다.
  • 완료시 커널이 Node.js에 알려 주어 적절한 콜백을 poll 큐에 추가할 수 있게 하여 실행되게 한다.
  • 여러 단계의 이벤트 큐로 이루어짐 (timer, pending callbacks, …)
  • 싱글 쓰레드로 관리된다.

알아둬야할 점

  • 이벤트 루프가 싱글 쓰레드로 관리된다는 것이 Node.js가 싱글 쓰레드로 동작한다는 의미는 아니다. (실제 코드 상 실행 지점이 한 곳이라고 생각하면 된다.)
  • Node.js는 내부적으로 쓰레드풀을 생성해 I/O 작업을 할당시켜 병렬 작업을 가능하게 한다.
  • worker_threads 라는 모듈을 이용해 직접 쓰레드풀에 쓰레드를 생성할 수 있다. 하지만, 쓰레드 생성 자체가 시간을 많이 사용하는 작업이기 때문에 오히려 성능을 낮출 수 있으므로 잘 판단해서 사용해야 한다.

blocking vs non-blocking I/O

  • I/O : libuv가 지원하는 시스템 디스크나 네트워크와 상호작용하는 것
  • blocking : 해당 작업이 완료될 때까지 기다려야 함 (node.js가 멈춤)
  • nonblocking : 해당 작업이 끝나면 콜백으로 알려줌 (성능 향상)

var, let, const

  • var : function scope, 함수의 맨 위로 hoisting 되며 재선언 가능 (but, var로 선언된 변수는 호이스팅되지 않는다.)
  • let : block scope, 변수 재선언이 불가능하고, 값에 대한 변경이 가능하다.
  • const : block scopoe, 변수 재선언이 불가능하고, 값에 대한 변경 역시 불가능하다. (다른 언어와 마찬가지로 object 내의 필드 변경은 가능)
  • let,const 둘 다 블록 스코프로 hoisting 일어나지만, TDZ(Temporal Dead Zone)으로 인해 선언 전 변수 접근이 불가능하다.

NPM (Node Package Manager)

  • NPM 공식 사이트
  • 해당 기능을 통해 Node.js 오픈 라이브러리들을 쉽게 설치할 수 있다. (프라이빗 모듈도 토큰을 등록해 사용할 수 있음)
  • 특정 라이브러리를 install하는 경우 package.json에 저장
  • npm install을 칠 경우 package.json에 저장된 모듈들을 설치해준다.
  • typescript 라이브러리의 경우에는 타이핑을 따로 지원하는 경우가 많다 (@types/library_name) 을 통해 검색해보면 있는지 없는지 알 수 있다.

NVM (Node Version Manager)

  • 여러 버전의 Node를 설치, 관리하기 용이하게 해준다.
nvm i 10 # node 버전 10 설치

node -v # 사용 중인 버전 확인

nvm alias default 10 # 버전 10을 디폴트로 사용

nvm use 10 # 버전 10을 사용

출처 Node.js 공식 홈페이지

Categories:

Updated: