Node.js란?
node 공식 사이트의 설명에 따르면 Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이라고 설명하고 있다.
즉, Javascript를 브라우저가 아닌 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경을 의미한다.
❓ Node.js를 굳이 사용해야 하는 이유가 있을까요?
Node.js는 논 블로킹(Non-blocking) I/O, 싱글 스레드(Single Thread), 이벤트 루프(Event Loop)의 특성이 있습니다.
블로킹(Blocking) / 논 블로킹(Non-blocking) I/O
I/O는 데이터의 입력(Input) / 출력(Output)을 뜻하며 어떤 프로세스에서 입력과 출력이 이뤄지는 프로세스는 모두 I/O라고한다.

블로킹(Blocking)이란 I/O 작업이 진행되는 동안 유저 프로세스는 자신의 작업을 중단한 채 대기하는 방식이며 예시를 들자면 카페 직원이주문을 받고 커피가 나올 때까지 기다리다가 커피가 나오면 주문을 완료 처리하고 다음 주문을 받는다.
특징
Linear programming, 코드 하기 쉽고 , 제어가 영역이 적습니다. I/O가 끝날떄까지 대기 하여 block되어 다른 작업을 처리할수없다.

논 블로킹(Non-Blocking)이란 I/O 작업이 진행되는 동안 유저 프로세스의 작업을 중단시키지 않는 방식이며 예시를 들자면 카페 직원이 주문을 받고 커피가 나올 때까지 기다리지 않고 다음 주문을 계속해서 받다가 커피가 나오면 그때그때 고객들의 주문을 완료 처리한다.
특징
Parallel programming, 코드하기 어렵지만, 제어 영역이 더 많다. 시스템의 호출 종료를 기다리지않고 다음 처리로 넘어갈수있어 사용자 프로세스는 다른일을 처리할수있지만 데이터를 입력할 때만 전송하는 게 아니라 주기적으로 계속 반복하기에 시스템 호출이 반복적으로 발생하기에 자원 낭비가 된다.
싱글 스레드(Single Thread)
스레드(Thread)란 프로그램이 동작할 때, CPU 또는 프로세서를 사용하는 단위이다.

싱글 스레드란 스레드 하나를 사용하는 것이며, 동시에 하나의 작업만을 처리할 수 있다.
❓ Node.js가 싱글 스레드를 고집하는 이유
연결 요청마다 스레드를 생성하는 체계에 비해 스레드 생성 부하 및 스레드 유지에 대한 부담이 없어 같은 컴퓨팅 리소스라도 조금 더 효율적으로 사용할 수 있는 특징이 있으며 스레드가 하나라는 것은 스레드들이 공유하는 자원에 대한 동시접근 문제, 즉 Race condition 상황이 발생하지 않는다는 것을 의미한다.
또한 Node.js는 차라리 새로운 프로세스를 생성해 확장을 도모하기에 프로세스는 여러개라도 서로에 대해 스레드에 비해 독립적이므로 하나의 프로세스가 문제를 일으키더라도 다른 프로세스까지 모두 종료될 확률은 상대적으로 낮다.
이러한 특징때문에 연결 요청의 부하에 따른 서버 확장이 매우 자유롭다. 즉, Node.js는 특히 웹 서버에 특화된 철학이 녹아있는 언어이다.
ps) 정확하게 따지자면 Node.js는 싱글 스레드가 아닌 여러개의 스레드를 가질 수 있으나 JS를 실행하는 스레드가 하나이기때문에 Node 또한 싱글 스레드라 말하며 그 싱글스레드가 이벤트 루프이다.
'TIL' 카테고리의 다른 글
| 객체 리터럴(object literal), Error handling, 클래스(Class) (0) | 2022.11.26 |
|---|---|
| 동기(Sync) & 비동기(Async) & Promise (0) | 2022.11.25 |
| 11일차 - Application Programming Interface (API) (0) | 2022.11.20 |
| 11일차 - JSON Web Token (0) | 2022.11.20 |
| 10일차 프로그래밍 기초 - 과제 (0) | 2022.11.18 |