본문 바로가기

#2 Framework ✍️/2-2 Node.js

[Node.js] Node.js 란??

  • JavaScript 런타임(프로그래밍 언어가 실행되는 환경), 브라우저가 아닌 곳에서 JS를 실행하게 해주는 어플리케이션
  • 서버 측 프로그래밍
  • Node.js는 V8을 사용
    • V8: 구글에서 개발한 JavaScript 엔진, JavaScript를 브라우저에서 실행해줌

  • nodejs runtime 은 몇 가지 dependency 가 있는데 그 중 가장 중요한 것이 v8 engine과 libuv
  •  v8 engine이 없다면 nodejs는 javascript를 이해할 수 없음
  •  v8 engine이 javascript 코드를 컴퓨터가 이해할 수 있는 머신 코드로 변환해주기 때문
  • libuv는 비동기 IO를 집중적으로 개발하는 오픈소스 라이브러리
  • libuv를 통해 노드는 파일시스템과 네트워킹 등의 컴퓨터 운영체제의 기능들에 접근할 수 있음
  • 또한 libuv에는 nodejs에서 굉장히 중요한 기능인 이벤트루프와 쓰레드풀이 구현되어 있음
  • 이벤트루프는 콜백 실행, network IO와 같은 가벼운 일을 처리해주고 쓰레드풀은 파일에 접근하거나 파일을 압축하는 등의 무거운 일을 처리
  • libuv는 C++로 만들어졌고 v8 engine은 javascript 와 c++로 만들어짐
  • nodejs의 역할은 순수 자바스크립트 코드를 통해 이 모든 기능들을 실행시킬 수 있도록 해주는 것
  • nodejs는 v8 engine과 libuv 뿐만 아니라 http-parser, c-ares, OpenSSL, zlib 등의 라이브러리에도 의존성이 있음

 

Node.js 특징 요약
  • Chorme V8 JavaScript 엔진 기반
  • Single Thread(단일 쓰레드)와 이벤트 기반
  • 비동기 I/O 처리 (Non-Blocking I/O)
  • 고성능 네트워크 서버
  • 개발 생산성 향상
  • 방대한 모듈 제공 (NPM)
Node.js 특징 설명
  • Node.js는 Single Thread의 Non-Blocking I/O 이벤트 기반 비동기 방식으로 작동함
  • 사용자의 요청은 한 곳(단일 쓰레드)에서 받지만, 실질적인 작업은 멀티 쓰레드로 운영하여 결과를 구현(Thread Pool)
    • 입출력은 이벤트 루프 기반 싱글 쓰레드
    • 실질적인 작업은 멀티 쓰레드
  • 단일 쓰레드이기에 메모리 사용량의 변화가 크지 않음
  • 하지만 쓰레드 하나가 오류가 발생되면 전체가 문제가 생김
  • 단일 쓰레드이기에 메모리나 리소스 등이 많이 필요한 작업을 수행하는 웹 서비스에 맞지 않음
Node.js를 사용하면 좋은 웹 서비스
  • 간단한 로직
  • 대량의 클라이언트가 접속하는 서비스 - 입출력이 많음
  • 빠른 개발 요구
  • 빠른 응답시간 요구
  • 비동기 방식에 어울리는 서비스 (ex. 스트리밍 서비스, 채팅 서비스)
Node.js가 어울리지 않는 웹 서비스
  • 단일 작업이 오래 걸리는 서비스
  • 로직 복잡도가 높은 경우
LIST

'#2 Framework ✍️ > 2-2 Node.js' 카테고리의 다른 글

Buffer (버퍼)  (1) 2023.03.13
[Node.js] NPM vs NPX  (0) 2022.12.09