Node.js 18 LTS 마이그레이션 후기

마이그레이션 배경

회사 프로젝트가 Node.js 14 LTS를 사용 중이었는데, 2023년 4월이면 EOL이라 18 LTS로 업그레이드를 진행했다. 10월에 LTS로 전환된 지 얼마 안 됐지만, 개발 환경부터 먼저 적용해보기로 했다.

주요 변경 사항

1. fetch API 내장

가장 반가운 변화였다. 이제 axios나 node-fetch 없이도 HTTP 요청이 가능하다.

// 기존
const axios = require('axios');
const data = await axios.get('https://api.example.com/data');

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

당장 모든 코드를 바꾸진 않았지만, 새로 작성하는 코드는 fetch를 사용하기로 했다.

2. 실험적 Test Runner

node:test 모듈이 추가됐다. Jest 대체는 아직 무리지만, 간단한 유틸 함수 테스트는 충분했다.

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

test('calculateTotal', () => {
  const result = calculateTotal([100, 200, 300]);
  assert.strictEqual(result, 600);
});

3. OpenSSL 3.0 업그레이드

일부 레거시 암호화 알고리즘이 동작하지 않아 이슈가 있었다. --openssl-legacy-provider 플래그로 임시 해결했지만, 근본적으로 코드를 수정할 계획이다.

성능 개선

V8 엔진 업데이트로 평균 5~10% 정도 성능 향상이 있었다. 특히 JSON 파싱 속도가 체감될 정도로 빨라졌다.

마무리

큰 문제 없이 마이그레이션을 완료했다. fetch API 내장이 가장 실용적인 변화였고, 프로덕션 배포는 연초에 진행할 예정이다. 의존성 패키지들의 호환성은 미리 확인해두는 게 좋다.