Node.js 24 LTS로 마이그레이션하면서 겪은 이슈들

배경

운영 중인 백엔드 서비스를 Node.js 22에서 24 LTS로 업그레이드했다. 보안 패치와 성능 개선이 주된 목적이었지만, 몇 가지 예상치 못한 이슈가 있었다.

주요 이슈

1. punycode 모듈 제거

URL 파싱 로직에서 punycode 모듈을 사용하고 있었는데, Node.js 24에서 완전히 제거되었다.

// Before
const punycode = require('punycode');
const domain = punycode.toASCII('한글도메인.com');

// After
const domain = new URL('https://한글도메인.com').hostname;

내장 URL API로 충분히 대체 가능했다.

2. crypto.DEFAULT_ENCODING 변경

암호화 관련 코드에서 기본 인코딩 동작이 변경되어 일부 해시 값이 달라졌다. 명시적으로 인코딩을 지정하도록 수정했다.

const hash = crypto
  .createHash('sha256')
  .update(data)
  .digest('hex'); // 명시적 지정

3. 네이티브 테스트 러너 활용

Jest에서 Node.js 네이티브 테스트 러너로 일부 전환을 시도했다. 아직 완전히 대체하지는 않았지만, 단순한 유닛 테스트는 충분히 빠르고 안정적이었다.

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

describe('User Service', () => {
  test('should create user', async () => {
    const user = await createUser({ name: 'test' });
    assert.strictEqual(user.name, 'test');
  });
});

성능 개선

V8 엔진 업데이트로 JSON 파싱 속도가 약 15% 향상되었다. API 응답 시간이 평균 20ms 감소했다.

결론

대부분의 이슈는 deprecated API 정리 과정에서 발생했다. 주요 변경사항을 미리 파악하고 점진적으로 마이그레이션하는 것이 중요하다.