Node.js에서 worker_threads로 성능 향상 및 라우트 블로킹 방지
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Node.js 애플리케이션 개발자, CPU 인텐시브 작업 처리에 관심 있는 개발자
난이도: 중급 (비동기 프로그래밍 및 worker_threads 이해 필요)
핵심 요약
worker_threads
모듈 사용으로 메인 스레드 블로킹 방지- CPU 인텐시브 작업을 병렬 처리하여 성능 향상 (7.63초 → 1.56초)
Promise.all
과 여러 워커 분산 처리로 병렬성 극대화
섹션별 세부 요약
1. 문제 상황: 라우트 블로킹
/compute
라우트에서 무거운 계산 작업 수행 시, 메인 스레드가 블로킹되어/
라우트에 접근 불가calculate(100_000_000)
함수는 배열 생성 및 홀수/짝수 합산으로 CPU 리소스 소모worker_threads
사용 전, 동시 요청 시 응답 지연 발생
2. worker_threads 모듈 소개
worker_threads
는 별도 스레드에서 JavaScript 실행 가능- 메인 스레드는 라우트 처리, 워커 스레드는 계산 수행
parentPort.postMessage
로 워커와 메인 스레드 간 통신 가능
3. 코드 수정 및 워커 생성
worker.js
파일 생성:workerData
로 입력값 전달,parentPort.postMessage
로 결과 전송main.js
에서Worker
생성,workerData
로 파라미터 전달calculate
함수를Promise
로 리팩토링하여 비동기 처리
4. 병렬 처리를 통한 성능 개선
Promise.all
로 작업 분할: 100_000_000 → 4개의 25_000_000 작업- 4개 워커 병렬 처리로 실행 시간 7.63초 → 1.56초 감소
try/catch
로 에러 처리 강화
결론
worker_threads
는 CPU 인텐시브 작업 시 메인 스레드 블로킹 방지 및 성능 향상에 효과적- 작업 분할과 병렬 처리로 최대 5배 성능 향상 가능
Promise.all
과try/catch
사용을 통해 안정성 확보 및 실무 적용 권장