- 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 |