@ Node.js란?
- Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임
- 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적
- Node.js 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계다.
- 다시 정리하자면 JavaScript를 브라우저가 아닌 컴퓨터에서 브라어저 없이 실행하게 도와주는 환경
@ Node.js를 사용해야 하는 이유...?
- 논 블로킹(Non-blocking) I/O, 싱글 스레드(Single Thread), 이벤트 루프(Event Loop)의 특성이 있다.
- 기존 블로킹(Blocking) I/O
- I/O는 데이터 입력(Input) / 출력(Output)을 뜻한다.
- Blocking - Linear programming, 코드하기 쉽고 제어 영역이 적다.
- 프로그램 내부에서 함수를 호출하면 호출된 함수가 작업을 마칠 때까지 대기하는 방식
- I/O가 끝날때까지 block되어 다른 작업을 처리할 수 없다.
- 논 블로킹(Non-blocking) I/O
- Non-blocking - Parallel programming, 코드하기 어렵고 제어 영역이 많다.
- 함수가 실행되는 중에도 다른 작업을 동시에 진행할 수 있다.
- 시스템의 호출 종료를 기다리지 않고 다음 처리로 넘어갈 수 있다. 사용자 프로세스는 다른 일을 처리할 수 있다.
- 싱글 스레드(Single Thread)
- 스레드(Thread)란? - 프로그램이 동작할 때, CPU 또는 프로세서를 사용하는 단위
- 싱글 스레드(Single Thread)는 스레드 하나를 사용, 동시에 하나의 작업만을 처리할 수 있다.
- 싱글 스레드는 스레드 생성 부하 및 스레드 유지에 대한 부담이 없다.
- 스레드들이 공유하는 자원에 대한 동시접근 문제, Race condition 상황이 발생하지 않는다. 따라서 여러 스레드가 하나의 오류로 인해 모두 문제를 일으키는 상황이 발생하지 않는다. 이런 특징으로 연결 요청의 부하에 따른 서버 확장이 매우 자유롭다.
- But 멀티 스레드의 연산 효율에 비춰보면 단점이 드러난다. 따라서 Node.js는 CPU intensive한 작업에는 효율적이지 않다. 이런 단점을 극복하기 위한 방법들도 있다.
- 이벤트 루프(Event Loop)
- JavaScript가 가지고 있던 싱글 스레드의 약점을 극복하기 위해 효율적으로 작업을 처리할 수 있는 특성
'JavaScript Dev. > Node.js' 카테고리의 다른 글
Package Manager 란? (0) | 2023.04.22 |
---|---|
HTTP / Web Server (0) | 2023.04.22 |
JavaScript 란? (0) | 2023.04.22 |
RESTful (0) | 2023.04.20 |
Express 미들웨어 (0) | 2023.04.20 |