본문 바로가기
Etc./Node.js

[Node.js] Node 간략 정리

by ahj 2022. 1. 11.

런타임(Runtime)이란?

  • 프로래밍 언어가 구동되는 환경. JavaScript는 Node 전에는 크롬 등과 같이 브라우저 내에서만 사용할 수 있는 한계 때문에 확장성이 좋지 못한 언어였다.
  • Node는 브라우저 뿐만 아니라 서버, 머신러닝, 데스크탑 앱과 같은 여러 분야에서 JS가 활용 될 수 있도록 해줬다.

이벤트 루프(Event Loop)

이벤트 루프는 세 가지로 이루어져 있다.

  1. 호출 스택(call stack)
  2. 백그라운드(background)
  3. 태스크 큐(task queue)

순서

  1. 실행 순서대로 호출 스택에 쌓기
  2. 백그라운드 필요 작업은 백그라운드로 이동
  3. 백그라운드에서 작업이 완료되면 태스크 큐로 이동
  4. 호출 스택이 다 완료되면 이벤트 루프태스크 큐호출 스택으로 이동

논블록킹 I/O?

  1. 이전 작업이 완료될 때까지 기다리지 않고, 다음 작업들을 수행
  2. 오래 걸리는 작업은 백그라운드에서 처리

싱글 스레드

주어진 작업을 한 개의 스레드가 처리하는 방식

스레드?

작업을 실행하는 단위

여러 브라우저가 있을 때 모든 브라우저의 요청과 응답을 스레드 하나에서 처리하게 되고

멀티 스레드 같은 경우 여러 브라우저 요청과 응답에 있어서 브라우저 하나당 스레드가 하나 있어서 처리해주는 방식 정도로 이해해보자

싱글 스레드

  1. 주어진 작업을 혼자 처리하는 방식
  2. 스레드에 문제가 생길 시 전체에 문제가 생길 가능성이 있음
  3. 메모리나 기타 자원을 효율적으로 사용 가능

vs 멀티 스레드

  1. 여러개의 스레드가 일을 나눠 처리
  2. 하나의 스레드가 문제 생겨도 다른 스레드로 대체 가능
  3. 스레드간의 작업 전환 비용, 놀고 있는 스레드 문제 발생

Node.js

장점

  1. 싱글스레드, 논블로킹 I/O에 따른 빠른 속도
  2. 컴퓨터 자원을 덜 낭비
  3. I/O 작업이 많은 서버로 적합(채팅, 스트리밍)
  4. JavaScript를 사용하기에 FE 사용 용이
  5. 생산성이 높음

단점

  1. 싱글 스레드 기반이라 자원을 많이 잡아 먹는 작업이 오면 부하가 크게 걸린다.
  2. 싱글 스레드는 CPU 코어 1개만 사용 => CPU 작업 많은 서버로 부적합(게임 등)
  3. 로직이 복잡한 경우 콜박 함수 늪에 빠질 수 있다.
  4. 에러 발생시 프로세스 자체가 죽어버린다.

댓글