본문 바로가기
FRONTEND/Node.js

[Node.js] Node.js 정리 및 설치

by LAY CODER 2021. 4. 17.

NVM & Node 설치

 

NVM(Node Version Manager) 맥OS에서 설치 & 사용하기

NVM(Node Version Manager) 맥OS에서 설치 & 사용하기. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

Node.js

 

크롬의 JavaScript 엔진(V8 Engine)으로 빌드 된 JavaScript 런타임.

 

JavaScript는 일반적으로 크롬(Chrome)과 같은 브라우저에 내장되어 있다.

 

그래서 그 동안 JavaScript는 브라우저에 종속되어 있었다.

 

javaScript를 크롬(Chrome)같은 브라우저에서만 쓰는 것이 아닌 브라우저 밖.

 

즉, 내 컴퓨터에서 다양한 용도로 확장하기 위해 만들어진 것이 바로 Node.js 이다. 

 

Node.js를 이용하여 Express같은 라이브러리를 이용해서 서버를 만들곤하지만, Node.js 자체는 웹서버가 아니다.

 

Node.js는 자바스크립트 런타임(JavaScript Runtime)으로 Node.js는 웹 서버를 만들 수 있는 하나의 방법에 불과하다.

 

 

자바스크립트 엔진(JavaScript Engine)

 

자바스크립트 엔진은 파싱과 JIT 컴파일을 하는 머신을 제공해야 한다.

 

자바스크립트로 쓰여진 스크립트로 기계가 실행가능한 과정을 제공해야 한다.

 

자바스크립트 런타임(JavaScript Runtime)

 

크롬(Chrome)과 Node.js는 같은 엔진(Google의 V8 엔진)을 공유하지만,

 

다른 런타임(runtime) 환경, 즉 크롬(Chrome)과 Node.js라는 다른 실행 환경을 가지고 있다고 할 수 있다.

 

만약 컴퓨터 내에서 프로그램이 가동되면, 컴퓨터가 그 프로그램의 런타임 이다.

 


 

특징

 

  • 비동기 I/O 처리 : Node.js 라이브러리의 모든 API는 비동기식(async)이고 멈추지 않는다(Non-blocking). Node.js 기반 서버는 API가 실행되었을때, 데이터를 반환할때까지 기다리지 않고 다음 API 를 실행한다. 그리고 이전에 실행했던 API가 결과값을 반환할 시, Node.js의 이벤트 알림 메커니즘을 통해 결과값을 받아온다.
  • 빠른 속도 : 구글 크롬(Google Chrome)의 V8 자바스크립트 엔진(JavaScript Engine)을 사용하여 빠른 코드 실행을 제공한다.
  • 단일 쓰레드와 뛰어난 확장성 : Node.js는 이벤트 루프와 함께 단일 쓰레드 모델을 사용한다. 이벤트 메커니즘은 서버가 멈추지않고 반응하도록 해주어 서버의 확장성을 키워준다. 반면, 아파치(Apache)같은 일반적인 웹서버는 요청을 처리하기 위하여 제한된 쓰레드를 생성한다. Node.js 는 쓰레드를 한개만 사용하고 아파치(Apache)같은 웹서버보다 훨씬 많은 요청을 처리할 수 있다.
  • 버퍼링이 없다 : Node.js 어플리케이션엔 데이터 버퍼링이 없고, 데이터를 chunk로 출력한다.
  • 라이센스 : Node.js 는 MIT License가 적용되어 있다.

 


 

장점

 

  • 자바스크립트를 동일하게 사용해서 서버단 로직을 처리할 수 있다.새로운 언어를 습득하지 않고도 자바스크립트를 활용해 서버기술을 빨리 개발/응용할 수 있다.
  • 개발이 빠르고 쉽다. 서버 설치부터 화면 띄우는 것까지 금방 처리 됩니다.
  • Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능
  • 로컬에서 서버만 켜봐도 얼마나 가볍게 돌아가는지 알 수 있다.
  • 이벤트 기반 비동기방식이라 서버 무리가 적다.
  • java(jsp)는 쓰레드에 의한 동기방식이라 요청이 오면 반드시 결과를 받은 후에 다음 로직이 처리될 수 있다.
  • npm(node package manager)을 통한 다양한 모듈(패키지) 제공npm을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 개발속도와 효율성이 크게 향상

 


 

단점

 

  • 이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다. 예를 들어, 한번의 요청에 대해 DB에서 조회한 결과값에 따라 다른 로직을 처리해야 하며, 이런 로직이 여러개인 경우 콜백함수 늪 (Callback Hell) 에 빠진다.
  • 코드를 순차적으로 실행하는 것이 아니라 비동기 방식으로 이벤트를 보내고, 응답(이벤트)이 오면 처리하는 방식이기 때문에 java 개발을 했던 방식으로 설계하고 프로그래밍하면 큰 문제가 발생한다. 
  • 단일 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않다. 게시판형태와 같이 가벼운 I/O가 많은 웹서비스에 어울린다. 
  • 코드가 수행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 엄청 중요하다. 반드시 모든 케이스에 대해 소스코드를 검증해야 한다.

 


 

서비스

 

어울리는 웹서비스

  • 간단한 로직.
  • 대용량(동시에 여러 request를 처리)
  • 빠른 응답시간 요구
  • 빠른 개발 요구
  • 비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)

 

어울리지 않는 웹서비스

  • 단일 처리가 오래 걸리는 경우 : 싱글 쓰레드이기 때문
  • 서버 체크로직이 많은 경우 : 비동기방식이기 때문에 CallBack Hell에 빠지지 않기 위해
  • 업무 복잡도/난이도가 높은 경우 : 에러가 나면 서버가 죽기 때문에 코드 품질 중요

 


 

실제 Node.js를 사용한 회사

 

Netflix, Linkedin, Paypal, Uber, Facebook 같은 회사들 역시 자신의 서비스에 적극적으로 Node.js를 사용

 

References


junspapa-itdev.tistory.com/3

geonlee.tistory.com/92

'FRONTEND > Node.js' 카테고리의 다른 글

[Mac/VSCODE] ESLint, Prettier, Husky, Lint-staged 설정  (0) 2021.04.19

댓글