피드로 돌아가기
Node.js BlogBackend
원문 읽기
Node.js 18.0.0이 fetch API, Web Streams API, 내장 테스트 모듈을 글로벌 스코프에 추가하고 V8 엔진을 10.1로 업그레이드
Node.js 18.0.0 (Current)
AI 요약
Context
Node.js 17 이전까지는 HTTP 클라이언트 기능을 위해 외부 라이브러리에 의존해야 했으며, 테스트 코드 작성을 위해 Jest, Mocha 등 별도 프레임워크를 설치해야 했다. 또한 HTTP 서버의 타임아웃 기본값이 명시되지 않아 클라이언트의 느린 요청이나 악의적 연결로 인한 리소스 고갈 위험이 존재했다.
Technical Solution
- fetch API를 undici HTTP/1.1 클라이언트 기반으로 글로벌 스코프에 기본 제공: FormData, Headers, Request, Response 등 4개 글로벌 객체 추가
- node:test 모듈로 TAP 형식 테스트 리포팅 기본 지원: 별도 테스트 프레임워크 설치 없이 assert와 조합해 부모-자식 테스트 구조 구현 가능
- HTTP 서버 타임아웃 기본값 설정: headersTimeout 60000ms, requestTimeout 300000ms로 기본값 설정하여 408 응답 후 연결 종료
- V8 엔진을 10.1로 업그레이드: Chromium 101에 포함된 새로운 기능들 반영
- 직렬화 API 데이터 형식 변경(v8.serialize): 역직렬화는 이전 형식 지원하는 하위호환성 유지
- 플랫폼 요구사항 상향: Linux glibc 2.28 이상, macOS 10.15 이상, AIX Power 8 이상, 32비트 Windows는 V8 빌드 문제로 일시 제공 중단
Impact
HTTP 서버의 headersTimeout이 60초, requestTimeout이 5분으로 기본 설정되어 DoS 공격 방어 기본값 제공.
Key Takeaway
Node.js 18은 웹 표준 API(fetch, Web Streams)를 런타임에 통합함으로써 브라우저 코드와의 호환성을 높이고, 내장 테스트 모듈로 의존성을 줄이며, 명시적 타임아웃 기본값으로 프로덕션 배포 시 보안 기본값을 강제한다.
실천 포인트
Node.js 18 이상으로 업그레이드하는 서비스는 fetch API를 import 없이 즉시 사용 가능하므로 node-fetch 등 외부 라이브러리 제거 가능하고, node:test 모듈로 테스트 러너 설치를 생략할 수 있으며, HTTP 서버 구성 시 headersTimeout과 requestTimeout을 명시적으로 0이 아닌 값으로 설정해야 DoS 공격 방어가 적용된다.