"Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다."
=> 웹애플리케이션을 개발할 때 JavaScript를 사용하는데 모든 브라우저가 JavaScript 코드를 해석하기 위해 JavaScript Engine을 내장하고 있다.
(Chrome - V8, Firefox - SpiderMonkey, Safari - Webkit 등)
=> Node.js는 Chrome의 V8엔진을 이용하여 브라우저에서 JavaScript를 해석하듯이 서버에서 JavaScript를 동작할 수 있도록 하는 환경(플랫폼)이다. -> 버퍼가 없고 빠른 코드 실행을 제공해준다.
Node.js는 서버를 직접 구현해 주어야 한다.
Node.js 자체 모듈인 http모듈을 import하여 서버를 생성해 준다.
Node.js 라이브러리 내의 API는 모두 비동기식이다.
(API를 실행하고 완료되기까지 기다리지않고 바로 다음 API를 실행)
단일 쓰레드(single thread), 이벤트 루프 기반(event loop)
=> 이벤트 메커니즘을 통해 서버가 멈추지 않고 반응할 수 있어 확장성을 키워준다.
쓰레드 기반 동기방식(Blocking I/O)
- 하나의 쓰레드가 request를 받으면 모든 처리가 완료될때까지 기다리다가 처리결과가 완료되면 다시 응답을 보냄
- 기존 업무 처리가 완료되기 전에 또다른 request가 있으면 새로운 쓰레드가 업무를 처리함.
- 동시 request가 많은 경우 많은 쓰레드가 필요하게 되어 서버 과부하
단일쓰레드 이벤트 루프 기반 비동기방식( Non-Blocking I/O)
- 하나의 쓰레드가 request를 받으면 바로 다음 처리에 요청을 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다.
- 동시 request가 오더라도 처리가 완료될때까지 기다리지 않아도 되기 때문에 서버 부하가 적다.
📌 단일 쓰레드 기반 비동기방식이 node.js의 가장 큰 특징이다
참고 :
https://medium.com/@yeon22/node-js-node-js%EB%9E%80-410ae3749c56
https://junspapa-itdev.tistory.com/3