Node.js 싱글스레드? k8s로 확장하면 OK!

by DD
11개월 전
조회수 8

Node.js는 싱글스레드처럼 보이지만, libuv를 활용하여 비동기 I/O를 처리한다.

CPU 연산이 많은 작업 시, 싱글스레드 구조로 인해 성능 병목 발생 가능성을 지닌다.

k8s 스케일 아웃을 통해 Node.js 서버 확장60억 건 데이터 마이그레이션 성공

Node.js 싱글스레드 구조의 이해

Node.js는 싱글 스레드 위에서 이벤트 루프를 통해 비동기 작업을 처리한다. libuv는 I/O 작업을 워커 스레드에 위임하여 메인 스레드를 블로킹하지 않는다. 따라서, 개발자는 멀티스레드 환경의 복잡성 없이 비동기 프로그래밍을 할 수 있다.

CPU 병목 현상과 스케일 아웃 전략

CPU 연산이 많은 작업은 싱글 스레드에서 처리되어 성능 병목을 유발한다. k8s 스케일 아웃을 통해 여러 Node.js 인스턴스를 실행하여 트래픽을 분산한다. 결과적으로, CPU 자원 활용도를 높이고 전체 시스템 성능을 향상시킬 수 있다.

실무 적용: 60억 건 데이터 마이그레이션

네이버페이 타임라인 서버에서 60억 건 데이터 마이그레이션 시 Node.js의 CPU 병목을 경험했다. k8s 스케일 아웃을 통해 여러 Pod를 배포하여 병렬 처리했다. 그 결과, 마이그레이션 시간 25일 -> 1일로 단축하고 시스템 안정성을 확보했다.

Node.js가 싱글스레드 서버라는 미신(feat. Node.js의 대용량 데이터 처리)