Node.js 26.10.0 바뀐 점 10가지와 LTS 전환일

Node.js 26.10.0 바뀐 점 10가지와 LTS 전환일

발행 2026.10.02읽는 시간 약 16분

Node.js 26.10.0이 9월 22일 공개됐지만 곧바로 적용해도 되는지는 따져 볼 일입니다. 바뀐 항목은 10가지이고, 26 계열은 현재 Current 단계여서 10월 28일에 LTS로 전환될 예정입니다.

공개일 — 2026년 9월 22일(릴리스 글 본문 날짜)
대상 버전 — Node.js 26.10.0 (Current)
변경점 — 새 API·옵션 10가지(Notable Changes)
LTS 일정 — 26은 2026년 10월 28일 예정(바뀔 수 있음)
근거 — nodejs.org 릴리스 글, 2026년 10월 2일 확인

Node.js 26.10.0에서 새로 들어온 것

util.throttle을 포함해 모두 10가지가 새로 들어왔습니다.

9월 22일 릴리스, 바뀐 점 10가지 카드

릴리스 글의 변경 목록(Notable Changes)에는 총 12줄이 있고, 기능이 실제로 바뀌는 것은 10개입니다. 나머지 두 줄은 협력자 추가와 테스트 보강입니다.

모듈 바뀐 것 문서 표기
util throttle·debounce 등 3개 Stable
crypto parsePKCS12() Stable
fs openAsBlobSync() Stable
perf_hooks 히스토그램 2종 Stable
net BoundSocket 넘기기 Stable
sqlite undefined → NULL Release candidate
ffi VFS 안 라이브러리 Experimental
출처: Node.js v26.10.0 API 문서의 모듈 안정성(Stability) 표기를 그대로 옮김 · 2026년 10월 2일 읽음

이 중 활용도가 높아 보이는 것은 util 모듈입니다. util.throttle()은 지정한 시간 동안 허용하는 호출 횟수를 제한하며, 초과한 호출은 폐기하지 않고 순서대로 대기시킵니다.

짝이 되는 debounce는 마지막으로 불린 뒤 정해진 시간이 지나야 실행됩니다. 두 함수 모두 프로미스(나중에 값이 채워지는 객체)를 반환합니다. 나머지 하나가 markPromiseAsHandled입니다.

인증서 쪽에서는 .p12나 .pfx 묶음 파일에서 개인 키와 인증서를 꺼내 주는 parsePKCS12가 들어왔습니다. 파일 쪽에서는 기존 openAsBlob의 동기 방식인 openAsBlobSync가 생겼습니다.

perf_hooks 쪽 신규 항목은 SlidingWindowHistogram(최근 구간의 값만 유지)과 histogram.qrde()입니다. BoundSocket 클래스는 26.4.0에 처음 나왔는데, 이제는 다른 스레드나 자식 프로세스에도 건네줄 수 있습니다.

출처: Node.js · Node.js 26.10.0 (Current) 릴리스 글


올릴 사람과 LTS에 머물 사람

운영 서버에 올릴 버전으로 공식 안내가 허용하는 것은 Active LTS와 Maintenance LTS뿐입니다.

LTS는 오래 지원받는 버전을, Current는 새 기능이 제일 먼저 들어가는 최신 계열을 말합니다. 현재 Current는 26, Active LTS는 24입니다.

버전 지금 다음 날짜
22 (Jod) Maintenance LTS 2027-04-30 지원 종료
24 (Krypton) Active LTS 2026-10-20 Maintenance
26 Current 2026-10-28 Active LTS
출처: nodejs/Release 일정표(“Dates are subject to change”) · 2026년 10월 2일 읽음
지금 상태와 다음 날짜 카드

26.10.0이 어울리는 쪽은 다음과 같습니다.

  • 라이브러리 개발자 — Current 6개월은 라이브러리 쪽이 새 버전에 맞출 여유를 주려고 마련한 기간입니다.
  • 위 API를 개발 PC나 테스트 환경에서 미리 써 보려는 사람.

반면 운영 중인 서비스에는 맞지 않습니다. 내려받기 페이지가 가장 먼저 보여 주는 것도 26이 아니라 v24.21.0 LTS입니다.

22는 Maintenance LTS 단계라서 중대한 버그와 보안 패치는 계속 받습니다. 그러니 22를 쓴다고 서두를 이유는 없습니다.

출처: Node.js · Node.js Releases 안내

먼저 내 PC에 어떤 버전이 깔려 있는지 확인해 보겠습니다.


바로 해 보기, 버전 확인부터 설치까지

node -v로 버전을 확인하고, typeof 한 줄이면 새 API의 존재 여부를 알 수 있습니다.

새 API는 없는 버전에서 호출하면 오류가 납니다. 그래서 먼저 존재하는지 확인합니다. 아래 파일을 check.mjs라는 이름으로 저장하세요.

import util from 'node:util';
import crypto from 'node:crypto';
import fs from 'node:fs';

console.log('node', process.versions.node);
console.log('util.throttle', typeof util.throttle);
console.log('util.debounce', typeof util.debounce);
console.log('crypto.parsePKCS12', typeof crypto.parsePKCS12);
console.log('fs.openAsBlobSync', typeof fs.openAsBlobSync);
console.log('fs.openAsBlob', typeof fs.openAsBlob);

직접 실행함 (환경: Windows 10 · Node 22.22.0) · 새 API가 있는지 찍어 보는 스크립트

node -v
node -p "process.release.lts"
node check.mjs

직접 실행함 (환경: Windows 10 · Node 22.22.0) · 버전과 LTS 코드명을 묻고 스크립트를 돌리는 명령

v22.22.0
Jod
node 22.22.0
util.throttle undefined
util.debounce undefined
crypto.parsePKCS12 undefined
fs.openAsBlobSync undefined
fs.openAsBlob function

직접 실행함 (환경: Windows 10 · Node 22.22.0) · 앞의 세 명령이 화면에 남긴 결과 전체

22.22.0 환경에서 새로 생긴 함수 네 개를 찍어 보니 모두 undefined였습니다. 기존 openAsBlob만 function으로 나왔습니다.

26.10.0에서는 네 개 모두 function이어야 합니다. 다만 이 값은 실행 결과가 아니고, 문서의 네 항목에 “Added in: v26.10.0″이라는 표기가 있다는 사실에서 도출한 것입니다.

버전을 올리는 방법은 공식 내려받기 페이지에 나와 있습니다. 윈도우용으로는 버전 관리 도구 fnm을 쓰는 절차가 실려 있습니다.

# Download and install fnm:
winget install Schniz.fnm

# Download and install Node.js:
fnm install 26

# Verify the Node.js version:
node -v # Should print "v26.10.0".

공식 예시를 줄임 · 내려받기 페이지의 fnm 안내 중 윈도우 부분만 쓰고, 버전은 26으로 지정

설치 파일(msi)을 직접 받으려면 릴리스 글 하단의 node-v26.10.0-x64.msi 주소를 쓰면 됩니다. 한편 nvm-windows는 공식 내려받기 페이지에 오르지 않은 도구입니다.

26이 준비됐다면 util.throttle()은 다음처럼 호출합니다. 공식 예시로, 1초 동안 시작되는 요청을 최대 두 건으로 묶어 둡니다.

import { throttle } from 'node:util';
const request = throttle(async (id) => {
  const response = await fetch(`https://example.com/items/${id}`);
  return response.json();
}, 2, 1_000);
// At most two requests begin during each one-second interval. All other calls
// remain queued and retain their original arguments.
const results = await Promise.all([
  request(1),
  request(2),
  request(3),
  request(4),
]);

공식 문서 예시 · util 문서의 util.throttle 예제 그대로(실행해 보지 않음)

인증서 묶음을 읽는 코드는 더 간단합니다.

import { parsePKCS12 } from 'node:crypto';
import { readFileSync } from 'node:fs';
const { privateKey, certificate, additionalCertificates } = parsePKCS12(
  readFileSync('bundle.p12'),
  { passphrase: 'secret' },
);

공식 문서 예시 · crypto 문서의 parsePKCS12 예제 그대로(실행해 보지 않음)

출처: Node.js · Download Node.js 내려받기


바꿀 때 걸리는 것

ffi 모듈은 Experimental 단계, sqlite 모듈은 Release candidate 단계입니다.

모듈마다 다른 문서 표기 카드

각 기능에는 문서가 안정성 등급을 달아 둡니다. Experimental 등급은 시맨틱 버저닝(버전 번호 규칙)이 약속하는 범위 밖에 있어서, 곧 나올 릴리스에서 하위 호환이 깨지거나 아예 빠질 가능성이 있습니다.

Experimental 기능은 운영 환경에 쓰지 말라는 것이 문서의 당부입니다. node:ffi 쪽에는 “This API is unsafe.”라는 문구까지 붙어 있습니다.

FFI는 자바스크립트가 C 라이브러리의 함수를 부를 수 있게 하는 통로입니다. 이번에는 가상 파일 시스템(VFS)에 들어 있는 라이브러리도 읽도록 확장됐습니다.

VFS는 --experimental-vfs 옵션을 줘야 켜지는 실험 단계 모듈입니다.

sqlite는 달라지는 동작이 있습니다. 26.10.0부터 undefined를 값으로 주면 NULL로 기록됩니다. 문서에서는 { $a: undefined }와 {}를 같은 입력으로 설명합니다.

문제가 생겨 되돌리려면 같은 방식으로 24를 설치하면 됩니다. fnm을 쓴다면 fnm install 24입니다.

출처: Node.js v26.10.0 문서 · Stability index


언제 올릴까, 확인할 것 6가지

26의 Active LTS 승격은 2026년 10월 28일로 잡혀 있으나 일정은 달라질 수 있습니다.

업그레이드 전에 확인할 항목만 추리면 다음과 같습니다.

  • node -v로 현재 버전을 확인했다.
  • 서비스용 서버의 Node가 Active LTS, Maintenance LTS 어느 쪽 줄에 속해 있다.
  • 사용할 API의 문서 표기가 Stable인지 확인했다.
  • 새 API를 호출하기 전에 typeof로 존재 여부를 검사한다.
  • sqlite에 undefined를 전달하는 코드가 있는지 살펴봤다.
  • 22를 쓰는 경우 지원 종료 예정일 2027-04-30을 메모해 두었다.
올리기 전에 확인할 것 카드

미정인 부분도 있습니다. 26의 LTS 코드명은 일정표에서 비어 있습니다. 22는 Jod, 24는 Krypton이 들어간 바로 그 칸입니다.

일정 파일에는 같은 10월 28일에 27의 알파 단계가 시작된다고도 쓰여 있습니다.

출처: nodejs/Release · Release schedule 일정표


Node.js 26.10.0, 자주 묻는 질문

Q. 26.10.0에 들어 있는 npm은 몇 버전인가요?
A. 공식 배포 목록을 보면 npm 11.19.1과 V8 14.6.202.34가 들어 있습니다. 이 값은 26.9.0과 동일합니다.

Q. Node.js 27부터 릴리스 주기가 바뀌나요?
A. 예. 공식 안내상 27부터는 1년에 한 번 릴리스되며 모든 메이저 버전이 LTS가 됩니다. 먼저 알파 6개월과 Current 6개월을 지납니다.

Q. 홀수 버전은 왜 LTS가 안 됐나요?
A. 26까지는 홀수와 짝수가 달랐습니다. 홀수 버전은 6개월이 지나면 지원이 끝났고, 짝수 버전만 Active LTS로 승격됐습니다. 25는 이미 지원이 종료됐습니다.

서두를 이유는 없는 릴리스입니다. 제 개인적 취향으로는 표준 모듈에 throttle이 들어온 대목이 제일 마음에 듭니다.

수정 기록: 2026년 10월 2일 최초 작성

출처: Node.js 릴리스 글 26.10.0 2026.9.22 · Node.js Releases 안내 · nodejs/Release 일정표 · Node.js 내려받기 · Node.js 문서 Stability index · Node.js 문서 util · Node.js 문서 crypto(10월 2일 16시 읽음)

공식 릴리스 글과 문서를 읽고 간추린 글입니다. Node 22.22.0 환경(Windows 10)에서 실행한 결과를 실었고, 26.10.0의 값은 공식 문서 기준입니다.

출처

Node.js 26.10.0 관련해 더 궁금한 점이 있으신가요? 댓글로 알려주세요.

🌏 English — Node.js 26.10.0 바뀐 점 10가지와 LTS 전환일

  • Node.js 26.10.0 was released on September 22, but whether to adopt it right away is worth thinking through. There are 10 changes, and since 26 is currently at the Current stage, it is scheduled to move to LTS on October 28.
  • A total of 10 new items arrived, including util.throttle.
  • The change list in the release post (Notable Changes) has 12 lines in total, and 10 of them actually change functionality. The other two lines add collaborators and strengthen tests.
  • The item that looks most useful is in the util module. util.throttle() limits how many calls are allowed during a set time, and it queues the excess calls in order instead of discarding them.
  • Its counterpart, debounce, runs only after a set time has passed since the last call. Both functions return a promise, an object that gets its value filled in later. The remaining one is markPromiseAsHandled.

🇯🇵 日本語 — Node.js 26.10.0 바뀐 점 10가지와 LTS 전환일

  • Node.js 26.10.0は9月22日に公開されましたが、すぐに導入してよいかは検討が必要です。変更点は10個で、26系は現在Current段階のため、10月28日にLTSへ移行する予定です。
  • util.throttleを含め、全部で10個が新しく加わりました。
  • リリース記事の変更一覧(Notable Changes)は全部で12行あり、機能が実際に変わるのは10個です。残りの二行は協力者の追加とテストの強化です。
  • 活用しやすそうなのはutilモジュールです。util.throttle()は、指定した時間内に許可する呼び出し回数を制限し、超えた呼び出しは破棄せずに順番に待たせます。
  • 対になるdebounceは、最後に呼ばれてから決まった時間が過ぎて初めて実行されます。どちらの関数もプロミス(後から値が入るオブジェクト)を返します。残りの一つがmarkPromiseAsHandledです。

🇨🇳 中文 — Node.js 26.10.0 바뀐 점 10가지와 LTS 전환일

  • Node.js 26.10.0 已于9月22日发布,但是否立刻采用还需要斟酌。共有10项变更,26 系列目前处于 Current 阶段,计划在10月28日转为 LTS。
  • 包括 util.throttle 在内,一共新增了10项。
  • 发布文章的变更列表(Notable Changes)共有12行,其中真正改变功能的有10项。其余两行是添加协作者和加强测试。
  • 看起来最实用的是 util 模块。util.throttle() 会限制规定时间内允许的调用次数,超出的调用不会被丢弃,而是按顺序排队等待。
  • 与之成对的 debounce 要等到最后一次调用之后过了规定时间才会执行。两个函数都返回 Promise(稍后才填入值的对象)。剩下的一个是 markPromiseAsHandled。

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다