피드로 돌아가기
Node.js 0.12.0 (Stable)
Node.js BlogNode.js Blog
Backend

Node.js가 v0.10에서 v0.12로 메이저 업그레이드하며 Streams 3, HTTP maxSockets 무제한 확대, Cluster 라운드로빈 도입으로 동시성 및 메모리 효율성 대폭 개선

Node.js 0.12.0 (Stable)

2015년 2월 6일10intermediate

Context

Node.js v0.10은 스트림이 "old mode"에 갇힐 수 있고 HTTP maxSockets이 5로 제한되어 동시 연결 수가 부족했으며, 메모리 할당 방식이 비효율적이어서 GC 오버헤드가 컸다.

Technical Solution

  • Streams 3 구현: 스트림이 flowing 또는 not flowing 상태로만 존재하도록 단순화하고 cork/uncork 메커니즘 추가로 배치 쓰기 성능 향상
  • HTTP maxSockets 제한 제거: 기본값을 Infinity로 변경하고 KeepAlive 지원으로 소켓을 타임아웃까지 유지
  • Cluster 라운드로빈 모드 도입: Master가 새 연결을 받아 Worker에 배분하는 기본 동작 방식 변경
  • TLSWrap 메커니즘 도입: JavaScript와 C++ 간 왕복 횟수를 줄여 TLS 성능 개선
  • Buffer 메모리 할당 개선: 더 정확한 메커니즘으로 작은 Buffer 슬라이스 보유 시 오버헤드 감소
  • spawnSync/execSync 추가: 동기식 자식 프로세스 생성 지원
  • Crypto 확장: RSA 공개/개인키 암호화/복호화, 커스텀 엔진 로딩, 패스프레이즈 공급 API 추가
  • VM 모듈 개편: Contextify 기반으로 샌드박스 값을 부모 컨텍스트와 동기화
  • ECMA-402 (ECMAScript Internationalization API 1.0) 기본 지원: 영어 데이터 포함

Impact

Buffer 메모리 할당 개선으로 GC 실행 시간 단축 및 CPU 사용률 감소로 레이턴시 저감을 달성했으나 구체적 수치는 문서화되지 않음. 모든 테스트가 지원 플랫폼에서 통과한 것이 이번 릴리스의 첫 성과.

Key Takeaway

스트림, 연결 풀, 메모리 할당, 프로세스 분배 등 여러 하위 시스템을 동시에 개선하면 동시성, 메모리 효율, 응답 시간을 종합적으로 향상시킬 수 있다. 릴리스 전 전체 테스트 통과를 의무화하는 것이 안정성 기준을 세우는 핵심이다.


Node.js 기반 고동시성 애플리케이션 개발 시 cork/uncork로 배치 쓰기를 구성하고 KeepAlive를 활용한 연결 재사용으로 소켓 오버헤드를 줄일 수 있으며, Cluster 라운드로빈 모드를 기본으로 설정하면 Worker 간 로드 밸런싱을 간소화할 수 있다.

원문 읽기