피드로 돌아가기
Dev.toBackend
원문 읽기
Event Loop 기반 Non-blocking I/O를 통한 서버 처리 효율 극대화
Blocking vs Non-Blocking Code in Node.js
AI 요약
Context
JavaScript의 Single-thread 특성으로 인해 CPU 집약적 작업이나 I/O 대기 시 전체 실행 흐름이 정지되는 Blocking 문제 발생. 요청 처리 중 스레드가 점유되어 후속 요청이 누적되는 병목 현상으로 인해 서버 응답성 저하 및 성능 하락 초래.
Technical Solution
- I/O 작업 시 스레드 대기를 제거하고 즉시 다음 코드를 실행하는 Non-blocking 아키텍처 채택
- 무거운 작업의 처리를 Background Worker로 위임하여 메인 스레드의 실행 연속성 확보
- 작업 완료 후 Callback 함수를 큐에 적재하여 순차적으로 처리하는 Event Loop 메커니즘 적용
- Parallelism 대신 Concurrency 모델을 통해 단일 스레드로 다수의 요청을 효율적으로 관리
- fs.readFileSync 대신 fs.readFile과 같은 Asynchronous API를 사용하여 I/O 병목 지점 제거
실천 포인트
- Request Handler 내부에서 CPU 집약적인 무한 루프나 동기식 파일 시스템 API 사용 여부 검토 - 대규모 트래픽 처리 시스템 설계 시 Blocking I/O 호출을 비동기 Callback 또는 Promise/async-await 패턴으로 전환 - 애플리케이션 시작 단계의 Startup Script 등 성능 영향이 적은 구간에 한해서만 Sync API 활용