피드로 돌아가기
Blocking vs Non-Blocking Code in Node.js
Dev.toDev.to
Backend

Event Loop 기반 Non-blocking I/O를 통한 서버 처리 효율 극대화

Blocking vs Non-Blocking Code in Node.js

Shivam Yadav2026년 5월 10일6beginner

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 활용

원문 읽기