framwork/nodejs

[NodeJS] Nodejs란?

닉네임없음ㅎ 2024. 7. 10. 20:59

 

 

 

Nodejs는 Chrome V8 Javascript엔진으로 빌드된 Javascript 런타임이다! 


 

Nodejs는 단일 스레드, 단일 프로세스 아키텍처를 사용하며, 
이를 통해 비동기식 I/O작업을 효율적으로 처리할 수 있음. 

 


1. 하나의 프로세스 
Nodejs는 하나의 프로세스에서 실행됨. 
이는 애플리케이션이 단일 프로세스에서 실행된다는 의미.
일반적인 웹 서버 환경에서는 여러 프로세스나 스레드를 사용해 동시 요청을 처리하는 반면, Nodejs는 단일프로세스로도 많은 동시 요청을 처리할 수 있음. 

 


2. 하나의 스레드
Nodejs는 단일 스레드를 사용함. 
일반적으로 다중 스레드를 사용하는 환경에서는 동시성문제 (예: 데드락)가 발생할 수 있는데 
Nodejs는 이러한 문제를 피하기 위해 단일 스레드에서 모든 작업을 처리함. 

 


3. 이벤트 루프
이벤트 루프는 Nodejs의 핵심! 
비동기 작업의 콜백을 처리하고, 이벤트가 발생할 때 이를 적절히 처리하는 역할을 함. 

3-1. 이벤트 큐 
-> 비동기작업(예: 파일 읽기, 네트워크 요청 등)은 이벤트 큐에 들어감. 이벤트 큐는 FIFO(First In, FIrst Out)방식으로 동작함.
3-2. 이벤트 루프
-> 이벤트 루프는 이벤트 큐에서 작업을 하나씩 꺼내어 처리함. 
이때 처리할 수 있는 작업(예:콜백 함수)이 있다면 이를 실행.
3-3. 블로킹 작업 피하기 
-> 이벤트 루프가 블로킹되지 않도록 모든 I/O작업은 비동기적으로 처리됨. 
즉 I/O 작업이 완료될 때까지 가디리지 않고, 그 동안 다른 작업을 처리할 수 있음. 

 


* 장점
1. 비동기 처리 
-> Nodejs는 비동기 방식으로 I/O 작업을 처리하여, 많은 동시 요청을 효율적으로 처리함
2. 높은 성능
-> 단일 스레드와 이벤트 루프를 사용하여, 스레드 간 문맥 전환 비용이 적어 성능 높음. 

* 단점 
1. CPU intensive한 작업에 부적합
-> 단일 스레드를 사용하기 때문에, cpu 집약적인 작업에는 적합하지 않음. 
그러나 이러한 경우 워커스레드나 클러스터 모듈을 사용하여 멀티스레드를 구현할 수 있음 ! 


=> Nodejs의 단일 프로세스, 단일 스레드, 이벤트 루프 아키텍쳐는 I/O 중심의 작업에 최적화 되어 있어, 웹서버나 API서버 등에서 아주 효율적이지만, CPU 집약적인 작업이나 비동기 코드의 복잡성은 고려해보아야 한다 ! 

 

 


참고

 

https://nodejs.org/en

 

Node.js — Run JavaScript Everywhere

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

'framwork > nodejs' 카테고리의 다른 글

[NodeJS] pnpm 사용하기  (0) 2024.11.12
[Nodejs / PM2] PM2(Process Manager) 사용법  (0) 2024.03.15