본문 바로가기
Web/backend

Node.js - introduction

by yongmin.Lee 2020. 10. 24.

노드란?

  • Node.js는 크롬 자바스크립트 엔진으로 빌드된 "자바스크립트 런타임"이다. 

    * 런타임 : 특정언어로 만든 프로그램들을 실행할 수 있는 "환경"

  • Node.js는 이벤트 기반, non-blocking I/O, single-thread 모델을 사용
  • Node.js의 패키지 생태계인 npm (Node package manager)이 존재한다.

 

Event-driven

  • 이벤트가 발생하면 이벤트리스너에 등록한 콜백함수가 호출. 이벤트가 다 처리되면 다음 이벤트를 대기
  • event-loop : 이벤트 발생 시 호출되는 콜백함수들을 관리, 콜백함수들의 실행 순서 결정. 노드가 종룔될 때까지 이벤트 처리를 위한 작업을 반복하므로 이벤트루프라고 불림
  • task-queue : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간. 이벤트루프가 정한 순서대로 큐에서 대기
  • background : 타이머, I/O 작업 콜백, 이벤트리스너들이 대기하는 곳

 

Non-blocking I/O

블로킹 vs 논블로킹

노드는 입출력과 같이 오래걸리는 작업을 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 작업이 다시 태스크 큐를 거쳐 호출 스택으로 올라오는 방식의 논블로킹 방식으로 처리

파일 시스템, 네트워크 요청과 같은 I/O 작업은 논블로킹으로 동작

 

Single-thread 

  • 노드는 내부적으로는 스레드를 여러개 가지고 있지만 사용자가 제어할 수 있는 스레드는 하나 뿐이므로 싱글 스레드라고 부른다.
  • 즉, 이벤트루프만 싱글스레드라서 요청과 응답 처리가 싱글스레드일뿐, 백그라운드에서 동작하는 워커(io처리)들은 멀티쓰레드이다.
  • 싱글 스레드 이벤트 루프의 장점
    • 점점 더 많은 동시에 발생하는 클라이언트의 요청을 처리하는 것이 쉽다.
    • 동시에 발생하는 클라이언트의 요청이 증가할 때, 이벤트 루프를 이용하기 때문에 많은 스레드를 이용하지 않는다.
    • 멀티 스레드 방식보다 스레드를 덜 이용하기 때문에 메모리 또는 자원 소모가 작다.

 

 

 

'Web > backend' 카테고리의 다른 글

AWS django 배포  (0) 2020.10.24
Django - select_related() & prefetch_related()  (0) 2020.10.24
인증(Authentication) & 인가(Authorization)  (0) 2020.10.24
Django polls 앱  (0) 2020.10.24
HTTP, RESTful API  (0) 2020.10.24