Node.js가 싱글스레드 서버라는 미신과 대용량 데이터 처리
Node.js는 JS 실행은 단일 스레드지만, I/O와 스케일아웃으로 실무에선 멀티스레드처럼 쓴다.
Node.js는 JavaScript 실행과 이벤트 루프가 하나의 메인 스레드에서 돌아가지만, 오래 걸리는 I/O 작업은 libuv와 워커 스레드에 넘겨 처리한다. 그래서 개발자 입장에서는 싱글스레드처럼 보이면서도, 실제 아키텍처는 멀티스레드 요소를 적극 활용한다.
반대로 CPU를 많이 쓰는 작업은 메인 스레드를 직접 막는다. 이미지·비디오 인코딩, 대규모 JSON 파싱, 정렬, 암호화 같은 작업이 들어오면 다른 요청이 밀려나고, Node.js의 단점이 분명하게 드러난다.
실무 사례로 네이버페이 타임라인 서버의 60억 건 마이그레이션이 소개된다. Hive에서 뽑아온 데이터를 Node.js가 JSON으로 파싱하고 변환해 MongoDB에 넣는 과정에서, 병목은 MongoDB가 아니라 Node.js의 파싱 단계였다. kubectl top pods 기준으로 Node.js Pod가 1020~1030m 수준의 CPU를 쓰며 코어 하나를 거의 꽉 채웠고, 한 대로 돌리면 25일이 걸리는 계산이 나왔다.
해결책은 스케일아웃이었다. k8s에서 Node.js Pod를 여러 개 띄워 병렬로 돌리자 병목이 Node.js에서 MongoDB로 이동했고, 대용량 마이그레이션도 감당 가능한 수준으로 바뀌었다. 일반적인 API 서버에서도 Node.js는 가벼운 메모리 사용량과 컨테이너 친화적인 구조 덕분에, 목적에 맞게 쪼개서 확장하기 좋은 선택지라는 결론으로 이어진다.
핵심은 Node.js를 단순히 "싱글스레드냐 아니냐"로 재단하는 대신, 메인 스레드의 단순함과 뒤에서 받쳐주는 비동기·스케일아웃 구조를 함께 이해하는 것이다. 그 관점에서는 Node.js의 "싱글스레드처럼 동작하도록 설계된 철학"이 오히려 실무에서 강점이 된다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.
