backend
Node.js 22 LTS 새 기능 완벽 정리 — 내장 fetch, ESM, 성능 개선
2024년 LTS로 지정된 Node.js 22의 주요 신기능과 기존 프로젝트에 적용할 때 알아야 할 변경사항을 상세히 분석하였다.
- ·Node.js 22 LTS 지정: 2024년 10월
- ·V8 엔진: 12.4 버전 탑재
- ·내장 fetch API: 실험적 플래그 없이 기본 활성화
- ·ESM Loaders API 안정화
Node.js 18에서 22로 업그레이드하면서 require()로 ESM 패키지를 직접 로드할 수 있게 된 점이 가장 반가웠다. 기존에는 ESM only 패키지를 사용하기 위해 파일 확장자를 .mjs로 바꾸거나 dynamic import()를 쓰는 우회책이 필요했는데, 이 제약이 해소되면서 의존성 관리가 훨씬 단순해졌다. 내장 테스트 러너도 간단한 유틸리티 함수 테스트에는 충분히 활용할 만한 수준으로 성숙해졌다.
Node.js 22의 핵심 신기능
내장 fetch와 Web Streams API 안정화
Node.js 22에서는 fetch API가 실험적 플래그(--experimental-fetch) 없이 기본적으로 활성화되었다. Node.js 18부터 실험적으로 도입된 fetch가 마침내 안정 상태가 된 것이다. node-fetch, axios 같은 서드파티 HTTP 클라이언트 없이 네이티브 fetch를 사용하면 번들 의존성이 줄어들고 브라우저와의 코드 공유가 용이해진다. Web Streams API(ReadableStream, WritableStream, TransformStream)도 함께 안정화되어, 대용량 파일 처리나 스트리밍 응답 구현이 표준 API로 가능해졌다.
require()로 ESM 모듈 로드 지원
Node.js 22의 가장 획기적인 변화 중 하나는 CommonJS 환경에서 require()로 ES Module을 로드할 수 있게 된 것이다. 그동안 CJS와 ESM의 상호 운용성 문제는 Node.js 생태계의 고질적인 통증이었다. ESM only 패키지(chalk, got, node-fetch v3 등)를 CJS 프로젝트에서 사용하려면 동적 import()를 써야 했는데, Node.js 22부터는 require()가 동기적으로 ESM을 로드할 수 있어 이 문제가 해소된다. 단, 최상위 await를 사용하는 ESM 파일은 여전히 동적 import()가 필요하다.
성능 개선과 V8 업데이트
V8 12.4와 새 JavaScript 기능
Node.js 22에 탑재된 V8 12.4는 Array.fromAsync(), Object.groupBy(), Map.groupBy() 같은 ES2024 기능을 네이티브로 지원한다. Array.fromAsync()는 비동기 이터러블을 배열로 수집하는 유틸리티로, 스트리밍 데이터를 처리할 때 유용하다. V8 엔진의 JIT 최적화가 개선되어 CPU 집약적 JavaScript 코드의 실행 속도가 Node.js 20 대비 평균 10~15% 향상되었다. WebAssembly 컴파일 속도도 개선되어 WASM 모듈을 활용하는 앱의 초기 로딩이 빨라졌다.
내장 테스트 러너 개선
Node.js 18부터 실험적으로 도입된 내장 테스트 러너(node:test)가 Node.js 22에서 완전히 안정화되었다. describe, it, beforeEach, afterEach API를 Jest와 유사하게 사용할 수 있으며, --test-reporter 옵션으로 TAP, spec, JUnit 형식의 리포트를 생성한다. 소규모 프로젝트나 라이브러리에서 Jest나 Vitest 없이 내장 테스트 러너만으로 충분한 테스트 환경을 구성할 수 있게 되었다.
Node.js 22로 마이그레이션 가이드
Node.js 18·20에서 업그레이드 시 주의사항
Node.js 22로 업그레이드할 때 가장 많이 마주치는 문제는 npm 패키지의 Node.js 엔진 버전 제한이다. package.json의 engines 필드를 확인하고, node 18 이상에서 동작을 보장하는 패키지는 대부분 22에서도 문제없이 동작한다. crypto 모듈의 일부 레거시 알고리즘이 제거되었으므로 MD5, SHA1 같은 취약한 해시 함수를 사용하는 코드는 SHA-256 이상으로 교체해야 한다. 프로덕션 전환 전에 .node-version 또는 .nvmrc 파일을 22로 업데이트하고 CI에서 충분히 검증하는 것을 권장한다.
자주 묻는 질문
Node.js 22 LTS의 지원 종료 일정은 어떻게 되나요?+
Active LTS: 2025년 10월까지, Maintenance: 2027년 4월까지입니다. 새 프로젝트는 Node.js 22 LTS 사용을 권장합니다.
Node.js 22에서 Bun이나 Deno로 전환을 고려해야 하나요?+
Node.js 22는 여전히 가장 성숙한 생태계를 보유하고 있습니다. 성능 요구사항이 극단적이거나 올인원 런타임을 원한다면 Bun을 검토할 수 있지만, 일반적인 서버 앱에서는 Node.js 22가 충분합니다.
관련 글
Deno 2 완벽 가이드 — Node.js 호환성과 npm 생태계 통합
Deno 2에서 대폭 강화된 Node.js 호환성, npm 패키지 사용 방법, 보안 모델, Deno Deploy를 이용한 엣지 배포를 실무 중심으로 정리하였다.
Bun 런타임 완벽 가이드 — Node.js를 대체하는 올인원 JavaScript 도구
Bun의 런타임, 패키지 매니저, 번들러, 테스트 러너 기능과 Node.js 대비 성능 차이, 실전 마이그레이션 전략을 상세히 정리하였다.
TypeScript 5.5 신기능 완벽 정리 — 추론된 타입 가드와 정규식 검사
TypeScript 5.5에서 도입된 추론된 타입 가드, 정규식 구문 검사, const 타입 매개변수 개선, 성능 향상을 실무 예제와 함께 정리하였다.