피드로 돌아가기
Node.js 21 is now available!
Node.js BlogNode.js Blog
Backend

Node.js 21이 V8 11.8 업그레이드, fetch/WebStreams 안정화, 실험적 WebSocket 클라이언트 추가로 웹 표준 호환성과 성능 향상

Node.js 21 is now available!

2023년 10월 17일10intermediate

Context

Node.js는 JavaScript 런타임으로서 웹 표준과의 호환성 격차를 줄여야 했고, HTTP 청킹 인코딩에서 불필요한 오버헤드가 발생하고 있었으며, 모듈 시스템 기본값 설정에 유연성이 부족했다.

Technical Solution

  • V8 JavaScript 엔진을 11.8 버전(Chromium 118)으로 업그레이드하여 성능 개선 및 새로운 언어 기능 추가
  • fetch 및 WebStreams(FormData, Headers, Request, Response 포함)를 실험 단계에서 안정 상태로 전환
  • --experimental-websocket 플래그로 브라우저 호환 WebSocket 클라이언트 구현 추가
  • --experimental-default-type=module 플래그 도입으로 파일 명시성 없을 시 ES 모듈을 기본값으로 해석 가능하게 변경
  • HTTP/1.1 응답 청킹 시 cork/uncork 메커니즘으로 여러 write() 호출을 단일 청크로 병합
  • fs.writeFile 계열 함수에 'flush' 옵션 추가하여 쓰기 후 데이터를 강제로 디스크에 플러시
  • 테스트 러너에서 --test 파라미터 사용 시 글로브 표현식(예: **/*.test.js) 지원
  • globalPreload 모듈 커스터마이제이션 훅 제거 후 register와 initialize 훅으로 대체
  • HTTP 파서에서 엄격한 모드 기본 활성화(\r\n 헤더 필수, Connection: close 이후 데이터 전송 차단)
  • 전역 navigator 객체 추가 및 navigator.hardwareConcurrency로 하드웨어 동시 처리 능력 정보 제공
  • Writable/Readable 스트림에서 비트맵 활용 및 콜백 스케줄링 최적화

Impact

HTTP/1.1 청킹 응답에서 단일 청크 병합 시 클라이언트 및 서버 측 오버헤드 제거(구체적 수치 미기재).

Key Takeaway

런타임 메이저 버전 릴리스는 기본값 변경과 모듈 시스템 개선을 통해 웹 표준 호환성을 점진적으로 높이되, 후방 호환성 유지를 위해 --insecure-http-parser 같은 래그 옵션을 함께 제공해야 한다.


Node.js 기반 애플리케이션 개발팀에서 V21 마이그레이션 시 --experimental-default-type=module 플래그를 활용하면 명시적 파일 확장자 없이도 ES 모듈을 기본값으로 처리할 수 있으며, cork/uncork 패턴으로 HTTP 응답 쓰기를 그룹화하면 네트워크 오버헤드를 감소시킬 수 있다.

원문 읽기