저번 글에서 잠시 언급한 Node.js의 특징을 정리하겠다.
Single Thread 기반
- Tread(스레드)란? : 하나의 프로세스안에서 다양한 작업을 담당하는 최소 실행단위이다.

- 싱글 스레드 : 프로세스 내부에 하나의 스레드로 작업하는것
- 싱글 스레드 장점 :
1. 문맥 교환 작업을 요구하지 않는다 (여러개의 프로세스가 하나의 프로세스 공유할때 발생하는 작업)
2. 자원 접근에 대한 동기화를 신경쓰지 않아도 된다 (스레드가 동일 자원에 동시에 접근 못하도록 제어)
3. cpu메모리 적게 사용사고, 스레드간 작업전환 시간이 없다.
- 싱글 스레드 단점 :
1. 여러개의 cpu를 활용하지 못한다.
2. 연산량이 많은 경우 해당 작업 완료시까지 다른 작업을 못한다.
그럼 nodejs = 싱글스레드 인가? 에 대한 답은 나머지 개념부터 정리한 후 하겠다.
Event Driven 아키텍처
이벤트 기반 아키텍처란 분산된 애플리케이션 서비스들이 이벤트를 기반으로 통신하고
서로의 동작을 야기하는 아키텍처 패턴이다.
여기서 이벤트란 사이트 방문, 결제, 등 비지니스 내외부에서 발생하는 사건을 의미한다.
(이벤트는 이미 일어난 일에대한 기록이므로 변경되지 않는다.)
Non Blocking I/O 모델
blocked란? : 작업이 중단 되었다. (조건이 충독되면 프로세스 제개)
non blocking I/O: 프로세스가 I/O(input/ouput) 작업을 호출 했을 때 I/O 작업이 완료될때 까지
프로세스의 작업을 중단하지 않고 다른 일을 수행할 수 있도록 하는 방식이다.
blocking I/O: I/O 작업 진행되는 동안 프로세스가 자신의 작업 중단한채 대기 하는 방식
여기서 동기(Sync), 비동기(Async) 개념을 추가로 알아야 한다.

동기 Sync : 작업 시간을 함께 맞춰 실행한다. 요청한 작업에 대해 완료 여부를 따져 순차대로 처리
비동기 Async : 요청한 작업에 대해 완료 여부를 따지지 않고 다음 작업 그대로 수행
Sync/Async vs Blocking/NonBlocking
동기/비동기 : 요청한 작업에 대해 완료 여부를 신경 써 작업을 순차적으로 수행할지 아닌지에 관점
블로킹/논블로킹 : 현재 작업이 block 되냐 아니냐에 따른 관점
각각의 내용은 아래 처럼 조합 되어 사용하는데 이 내용은 따로 정리하겠다.
- 동기 + 블로킹
- 비동기 + 블로킹
- 동기 + 논블로킹
- 비동기 + 논블로킹
nodejs는 결론적으론 비동기 + 논블로킹을 제공한다.
다른 작업이 진행되는 동안 자신의 작업을 처리하고(Non blocking) + 작업 완료 바로 처리x (Async)
웹 브라우져에서 파일을 다운 받는 경우를 예로 들 수 있다.
(여기선 이정도로만 간단히 정리)
싱글 스레드로 Non blocking
하지만 여기서 한 가지 문제가 생긴다.
다른 작업이 진행되는 동안 자신의 작업을 처리하는 Non blocking은 일반적으로 멀티 스레딩이나
멀티 프로세스와 같은 다중 스레딩환경을 활용한다.
그런데 nodejs의 첫번째 특징이 싱글 스레드 기반 이었다.
이 문제를 해결을 위해선 nodejs의 구조를 알아야한디.
이에 대해선 다음 글에 이어서 정리 해보겠다.
싱글스레드(Single thread) vs 멀티스레드 (Multi thread)
오늘은 싱글 스레드와 멀티 스레드가 무엇인가와 이 둘의 장단점에 대해서 알아보자!!일단, 시작에 앞서 이해를 돕기 위해 이 그림을 봐주길 바란다.=> 싱글 스레드와 멀티 스레드의 차이는 이
velog.io
https://velog.io/@youngeui_hong/Event-Driven-Architecture
이벤트 기반 아키텍처(Event-Driven Architecture)란?
이벤트 기반 아키텍처의 기본 개념에 대해 살펴보자 🚀
velog.io
👩💻 완벽히 이해하는 동기/비동기 & 블로킹/논블로킹
동기/비동기 & 블로킹/논블록킹 프로그래밍에서 웹 서버 혹은 입출력(I/O)을 다루다 보면 동기/비동기 & 블로킹/논블로킹 이러한 용어들을 접해본 경험이 한번 쯤은 있을 것이다. 대부분 사람들은
inpa.tistory.com
'Nest' 카테고리의 다른 글
| [Nest] nest guard (0) | 2024.02.29 |
|---|---|
| [Nest] 데코레이터, 메타데이터 (0) | 2024.02.26 |
| [Nest] NestJs 구조 (0) | 2024.01.29 |
| [Nest] NodeJs Event Loop (0) | 2024.01.26 |
| [NestJS] NestJs란? (0) | 2024.01.14 |