[JS] Node.js란 무엇인가?

Byron·2021년 8월 3일
1

Node.js

목록 보기
1/2

Node.js

공식 문서에서는 Node.js란 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이라고 나와있다. 런타임이면 실행환경을 뜻하는 것일 텐데, 여기 나온 세 가지 생소한 단어에 대해 짚고 넘어가자.

Chrome V8?
V8은 웹 브라우저를 만드는 데 기반을 제공하는 오픈 소스 자바스크립트 엔진으로,
구글 크롬 브라우저와 안드로이드 브라우저에 탑재되어 있다. C++로 만들어져 있으며 싱글 스레드를 제공한다.
JavaScript Engine?
자바스크립트 엔진은 자바스크립트 코드를 실행하는 프로그램 또는 인터프리터이다. 
전통적인 인터프리터일 수도 있고, 바이트코드와 같은 특정한 방식으로 JIT 컴파일할 수 있다. 
여러 목적으로 자바스크립트 엔진을 사용하지만, 대체적으로 웹 브라우저에서 사용된다. 
대표적인 예시는 Google V8 엔진이 있다.
JavaScript Runtime?
런타임이란 프로그래밍 언어가 구동되는 환경으로, 
자바스크립트 런타임은 자바스크립트 엔진, Web API, 콜백 큐, 이벤트 루프, 렌더 큐로 구성된다.

Node.js의 특징

1. 비동기 I/O 처리와 빠른 속도.
Node.js는 앞서 알아본 V8 JS 엔진과 비동기 작업을 처리하는 libuv 라는 라이브러리로 이뤄져있다고 한다. 
Node.js 라이브러리의 모든 API는 비동기식(async)이며 
Node.js 기반 서버는 API가 실행되었을때 데이터를 반환할때까지 기다리지 않고 다음 API 를 실행한다.
그리고 이전에 실행된 API가 결과값을 반환할 시 Node.js의 이벤트 알림 메커니즘을 통해 결과값을 받아온다고 한다. 
=> 싱글 스레드 비동기 방식

또한, V8엔진을 통해 빠른 코드 실행이 가능하다. 
2. 단일 스레드와 우수한 확장성  
Node.js는 이벤트 루프와 함께 단일 스레드 모델을 사용한다. 
이벤트 메커니즘은 서버가 멈추지 않고 반응하도록 해주어 서버의 확장성을 키워주며, 서버의 무리가 적다.

일이 아무리 많아도 스레드는 1개이기 때문에 메모리 사용량과 시스템 리소스 사용량에는 변화가 거의 없다. 
따라서 대규모 네트워크 프로그램을 개발하기 적합한 형태이지만, 이 스레드 하나가 무너진다면 
프로그램 전체에 문제가 발생하게 된다.

**아파치(Apache)같은 일반적인 웹서버는 요청을 처리하기 위하여 제한된 쓰레드를 생성하는데,
Node.js 는 쓰레드를 한개만 사용하면서도 아파치(Apache)같은 웹서버보다 훨씬 많은 요청을 
처리할 수 있다고 한다.
3. JavaScript라는 프론트엔드 필수 언어로 백엔드까지 작성할 수 있다는 것.

Node.js의 작동방식

Node.js를 쓰기 적합한 곳과 적합하지 않은 곳

적합한 곳:
간단한 로직(알림 등) 
대용량(동시에 여러 request를 처리)
빠른 응답시간 요구(알림, 실시간 대화 등)
빠른 개발을 요구
비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)
적합하지 않은 곳:
단일 처리가 오래 걸리는 경우 -> 싱글 쓰레드이기 때문
서버 체크로직이 많은 경우 -> 비동기방식이기 때문에 CallBack Hell에 빠지지 않기 위해
업무 복잡도/난이도가 높은 경우 -> 에러가 나면 서버가 죽기 때문에 코드 품질 중요

**복잡한 데이터 처리를 하기 위한 목적으로는 Django가 더 적합함
profile
step by step

0개의 댓글