피드로 돌아가기
Dev.toBackend
원문 읽기
Single-thread 기반 Non-blocking I/O를 통한 고가용성 시스템 설계
The Node.js Event Loop Explained
AI 요약
Context
전통적인 서버 모델의 Thread-per-request 구조로 인한 I/O Blocking 현상과 리소스 낭비 문제 발생. 단일 스레드 환경에서 대규모 동시 요청을 효율적으로 처리하기 위한 메커니즘 필요.
Technical Solution
- libuv 라이브러리를 통한 OS 수준의 Asynchronous I/O 위임 구조 채택
- Call Stack과 Task Queue를 분리하여 Synchronous 코드와 Asynchronous 콜백의 실행 시점 제어
- Event Loop를 통한 지속적인 Queue 모니터링 및 Stack 공백 시 콜백 주입으로 CPU 유휴 시간 제거
- Timers, I/O, Check, Close 등 단계별 Phase 설계를 통한 콜백 실행 우선순위 관리
- I/O 작업의 Background 처리와 메인 스레드의 Non-blocking 실행을 통한 처리량 극대화
실천 포인트
- CPU 집약적 작업이 Event Loop를 점유하여 I/O 콜백 실행이 지연되는 'Event Loop Block' 현상 주의 - setTimeout(0)을 활용해 무거운 동기 작업의 실행 시점을 뒤로 미뤄 응답성 확보 검토 - 비동기 작업의 콜백 함수 내부 로직을 최대한 경량화하여 메인 스레드 체류 시간 단축