피드로 돌아가기
Node.js BlogBackend
원문 읽기
Node.js 21이 V8 11.8 업그레이드, fetch/WebStreams 안정화, 실험적 WebSocket 클라이언트 추가로 웹 표준 호환성과 성능 향상
Node.js 21 is now available!
AI 요약
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 응답 쓰기를 그룹화하면 네트워크 오버헤드를 감소시킬 수 있다.