Node.js 18 LTS 전환 준비 - 주요 변경사항 정리

배경

회사 프로젝트들이 아직 Node 14, 16을 사용 중이다. Node.js 18이 다음달 LTS가 되면서 마이그레이션 계획을 수립하게 되었다. 주요 변경사항들을 미리 파악해두기로 했다.

주요 변경사항

1. Fetch API 내장

드디어 node-fetchaxios 없이 네이티브 fetch를 사용할 수 있게 되었다.

const response = await fetch('https://api.example.com/data');
const data = await response.json();

기존 프로젝트들의 의존성을 줄일 수 있을 것 같다. 다만 axios의 인터셉터 같은 기능이 필요한 곳은 당분간 유지해야 할 듯하다.

2. Test Runner 추가

실험적 기능이지만 Jest 없이 테스트를 작성할 수 있게 되었다.

import { test } from 'node:test';
import assert from 'node:assert';

test('간단한 테스트', () => {
  assert.strictEqual(1 + 1, 2);
});

아직 프로덕션에 도입하기엔 이르지만, 작은 유틸리티 프로젝트에서는 시도해볼 만하다.

3. V8 10.1 업그레이드

  • findLast(), findLastIndex() 배열 메서드 지원
  • 성능 개선

4. 주의사항

  • OpenSSL 3.0으로 업그레이드되어 일부 레거시 암호화 알고리즘 사용 불가
  • --openssl-legacy-provider 플래그로 임시 대응 가능

마이그레이션 계획

  1. 개발 환경에서 먼저 테스트 (9월)
  2. CI/CD 파이프라인 검증 (10월)
  3. 스테이징 배포 및 모니터링 (11월)
  4. 프로덕션 순차 적용 (12월)

특히 native fetch 도입으로 번들 크기를 줄일 수 있을 것으로 기대된다.