Node.js

CH_Hwang·2021년 12월 21일
0

CS

목록 보기
7/10

Node.JS란?

node.js 는 Chrome V8 javaScript 엔진으로 빌드된 JavaScript 런타임이며,
Non-blocking I/O와 단일스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.

Blocking I/O vs Non-Blocking I/O

Blocking I/O

  • 하나의 쓰레드가 request를 받으면 모든 처리가 완료될때까지 기다리고 처리결과가 완료되면 다시 작업을 시작
  • 기존 업무 처리가 완료되기 전에 또다른 request가 있으면 새로운 쓰레드가 업무 처리
  • 동시 request가 많은 경우 많은ㅇ 쓰레드가 필요하게 되어 서버 과부하

Non-Blocking I/O

  • 하나의 쓰레드가 request 받으면 바로 다음 처리에 요청을 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝마녀 이벤트를 받아 응답을 보냄
  • 동시 request가 오더라도 처리가 완료될때까지 기다리지 않아도 되기 때문에 서버 부하가 적음.

싱글 스레드

싱글 스레드로 동작하지않지만 싱글 스레드인 노드

  • 노드를 실행하면 프로세스 하나가 생성되고 스레드 여러개를 생성함
  • 하지만 우리가 제어할 수 있는 스레드는 하나뿐
    • 노드가 싱글 스레드라고 여겨지는 부분
  • 블로킹이 심하게 일어나는 작업만 아니라면 스레드 하나로 충분하지만 블로킹이 심할 경우 논블로킹 방법으로 대기시간을 최대한 줄임.

예시

음식점에 점원이 한명이 있고 손님이 여러명 있는경우

  • 싱글스레드

점원 한명이 주문을 받고 주방에 넘긴 후 주방에서 요리가 나오면 손님에게 서빙을 함. 그 후 다음 손님의 주문을 받음

  • 싱글 스레드, 블로킹 모델

점원 한명이 주문을 받고 주방에 주문 내역을 넘긴 뒤 다음 손님의 주문을 받음. 요리가 완료되면 완료된 순서대로 손님에게 서빙함. 요리의 특성(블로킹인지 논블로킹인지)에 따라 완료되는 순서가 다를 수 있으므로 주문 순서와 서빙 순서는 일치하지 않을 수 있음

  • 싱글 스레드, 논블로킹 모델
  • 위 두방식은 점원 한명이 아파서 쓰러지거나(스레드 오류)
  • 요리하는데 시간이 오래 걸린다면(cpu를 많이 쓰는 작업)
    주문이 많이 들어왔을 때 버거울 수 있음

손님 한명이 올때마다 점원도 한명씩 붙어 주문을 받고 서빙함

  • 멀티 스레드
  • 손님 수가 늘어날수록 점원 수가 늘어남. 손님 수가 줄었을때 일하지 않고 노는 점원이 있을수도 있음.
  • 점원을 새로 고용하거나 기존 점원을 해고하는데 비용 발생
  • 멀티스레드에 논 블로킹 방식으로 받으면 좋지 않나?
    • 더 좋지만 프로그래밍 하는것이 상당히 어려워 멀티 프로세싱 방식을 대신 사용.
멀티스레딩멀티프로세싱
하나의 프로세스 안에서 여러 개의 스레드 사용여러개의 프로세스 사용
CPU 작업이 많을 때 사용I/O 요청이 많을 때 사용
프로그래밍이 어려움프로그래밍이 비교적 쉬움

서버로서의 노드

노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 사용하므로 싱글스레드, 논 블로킹 모델의 장단점과 크게 다르지 않다.즉,

  • 개수를 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합.
  • 네트워크나 데이터베이스, 디스크 작업 같은 I/O 작업에 특화되어 있음.
  • 실시간 채팅 애플리케이션이나 주식 차트, JSON 데이터를 제공하는 API서버가 노드를 많이 사용함
  • 이미지나 비디오 처리, 혹은 대규모 데이터 처리처럼 CPU를 많이 사용하는 작업을 위한 서버로는 권장되지 않음.(멀티스레드가 가능하지만 다른 언어에 비해 속도가 많이 느림)
  • 노드로 위와 같은 작업을 하고 싶다면 AWS 람다나 구글 클라우드 펑션스에 지원하는 기능을 사용

0개의 댓글