2026년 4월 런던에서 Bloomberg가 주최한 첫 번째 Node.js Collaboration Summit의 주요 논의와 세션을 정리한 보고서입니다.
Chengzhong Wu, Joyee Cheung
이번 4월, 2026년 첫 번째 Node.js Collaboration Summit이 런던에서 Bloomberg의 주최로 열렸습니다. 이번 행사에는 현장 참석자 40여 명이 함께했고, 원격으로도 약 12명이 추가로 참여했습니다.
서밋 녹화 영상은 이 재생목록에서 확인할 수 있습니다. 아래는 이번 서밋에서 있었던 내용을 정리한 요약입니다.
이 세션에서 Jacob Smith는 Collaborator Health 설문조사 결과를 검토하고 2025년과 2026년의 상태 지표를 비교했으며, 2025년 사용자 설문조사의 주요 하이라이트도 함께 살펴봤습니다. 여기에는 일반적으로 사용 방식이 다른 새로운 영역도 포함되었습니다. 그는 Marco Ippolito와 함께 현장에서 2026년 Next-10 설문조사에 포함될 질문들을 검토했고, 기존 질문에 대한 제안, 추가하거나 제거할 질문 및 선택지, 최근 AI 관련 논의도 함께 다뤘습니다.
Rafael Gonzaga는 청중에게 Node.js v27부터 적용될 새로운 릴리스 일정을 설명했습니다. 요약하면, Node.js v27부터 Node.js 버전 번호는 해당 버전이 처음 Current 릴리스가 되는 달력 연도와 일치하게 됩니다.
이는 현재 Node.js의 자원봉사 기반 유지보수 현실을 반영한 것이며, 장기적으로 Node.js 프로젝트의 지속 가능성을 유지하려는 노력의 일환입니다. 보안 취약점 대응 측면에서 보면, 활성 릴리스 라인 네 개 또는 다섯 개에 걸쳐 보안 릴리스를 관리하는 일은 현재의 Node.js 자발적 작업 모델에서 지속하기 점점 어려워졌습니다. 동시에 유지되는 릴리스 라인 수를 줄임으로써, 프로젝트는 사람들이 실제로 사용하는 릴리스를 더 잘 지원하는 데 집중할 수 있습니다.
새 릴리스 일정에 대한 자세한 내용은 이 블로그 글에서 확인할 수 있습니다.
James Snell은 Web과 Node.js를 위한 새롭고 더 통합된 Streams API를 소개했습니다. 역사적으로 Node.js는 고도로 최적화된 node:stream에 의존해 왔습니다. 최근 몇 년 동안 Node.js는 브라우저, Deno, Bun, 그리고 엣지 환경(예: Cloudflare Workers)과의 크로스 플랫폼 호환성을 보장하기 위해 WHATWG Web Streams도 구현했습니다. 하지만 서로 다른 두 개의 스트림 생태계를 관리하는 일은 개발자들에게 마찰을 만들어 왔습니다.
Web Streams API는 상당한 promise 및 allocation 오버헤드를 가집니다. 이 API는 주로 브라우저를 위해 설계되었고, 이를 높은 처리량의 백엔드 환경에 적용하면 아키텍처 비용이 분명하게 드러납니다.
제안된 New Streams API는 현대 JavaScript의 Async Iteration을 활용하여 스트림을 기본적으로 async iterable로 다루며, 현대 개발자들이 자연스럽게 코드를 작성하는 방식인 async/await와 for await...of 루프에 크게 기대고 있습니다. 데이터 버퍼가 가득 찼을 때 이를 처리하는 방식은 역사적으로 혼란스러운 블랙박스였습니다. 새 API는 버퍼가 가득 찼을 때 어떤 backpressure 전략을 사용할지 개발자가 명시적으로 선택하도록 강제하는 방안도 제안합니다.
새로운 stream/iter API는 이미 Node.js 코어에 반영되었고, v25.9.0에서 실험적 기능으로 배포되었습니다. 서밋에서는 설계에 대한 피드백, 기존 stream API와의 호환성, 성능 영향, 추가 활용 사례, 새 제안이 기존 API의 일반적인 문제 일부를 해결하는 데 도움이 될 수 있는지, 그리고 이 새로운 Streams API를 Web에서도 구현할 수 있는지에 대해 논의했습니다.
Jacob Smith는 Node.js 코어에 기여하고자 하는 개발자들의 진입 장벽을 낮추는 방안을 탐색하는 세션을 이끌었으며, 이를 통해 프로젝트가 새로운 인재에게 계속 열려 있도록 하는 방법을 논의했습니다.
이슈를 분류하고 pull request를 검토하는 일은 유지관리자의 상당한 역량과 시간을 요구합니다. 이 세션에서는 collaborators가 더 많은 리뷰 작업을 맡도록 장려하기 위해 코드 소유권을 강제하는 아이디어를 논의했습니다. 다만 Node.js의 자발적 작업 모델에서는 이것이 어려움을 수반할 수 있기 때문에, collaboratorship을 commit 권한과 분리하는 방안과 working group/team 구성원에게 reviewership을 확장하는 아이디어도 함께 브레인스토밍했습니다. 이를 통해 non-collaborator도 리뷰에 참여하고 신뢰를 쌓을 수 있도록 장려하려는 목적입니다. 이 논의는 GitHub에서 계속 이어갈 예정입니다.
Chengzhong Wu는 CNCF OpenTelemetry 프로젝트를 소개했습니다. 이 세션은 Bryan English가 Node.js 내장 OpenTelemetry 지원을 추가하기 위해 올린 pull request를 계기로 마련되었습니다. OpenTelemetry는 Cloud Native Computing Foundation에서 Kubernetes 다음으로 가장 활발한 프로젝트 중 하나입니다. OpenTelemetry는 traces, metrics, logs라는 세 가지 축을 중심으로 observability 분야의 사실상 표준으로 자리 잡았습니다. 이 프로젝트는 계측을 위한 벤더 중립적 API와 데이터 처리 파이프라인을 포함한 SDK를 정의합니다. OpenTelemetry API와 SDK 외에도, Semantic Conventions(SemConv)과 백엔드로 telemetry 데이터를 전송하기 위한 네이티브 데이터 형식인 OpenTelemetry Protocol(OTLP)을 정의하려는 노력도 진행되고 있습니다. OpenTelemetry는 개방형 거버넌스 프로젝트이며 벤더와 사용자 양쪽의 기여자들로 구성되어 있습니다.
Stephen Belanger는 Node.js observability 인프라를 개선하기 위한 생각과 작업을 공유했습니다. 발표에서는 AsyncLocalStorage를 위한 using 문법 지원과 새로운 diagnostic_channel API인 BoundedChannel을 다뤘습니다. 또한 Stephen은 metrics와 traces를 위한 새로운 Node.js 내장 모듈에 대한 아이디어와, OpenTelemetry OTLP 데이터 프로토콜에 대한 내장 지원을 추가해 OpenTelemetry 직렬화 성능을 개선할 가능성도 제시했습니다.
서밋 몇 주 전, AI 코딩 에이전트의 도움을 받아 Node.js에 VFS를 구현한 대규모 pull request가 Node.js 코어에서 AI 사용을 둘러싼 논쟁을 촉발했습니다. 이 세션에서 Jacob Smith는 이 논란의 배경, OpenJS foundation의 법률 의견, 그리고 다른 OSS 프로젝트에서의 현재 AI 사용 현황을 청중에게 설명했습니다.
이후 우리는 회고 보드를 사용해 Node.js 코어에서 AI를 사용하는 것의 장단점, 우려 사항, 그리고 여러 생각을 정리하기 시작했습니다. 이 주제에 대해서는 매우 다양한 의견이 나왔습니다. 세션에서는 AI 사용으로 더욱 심화되는 리뷰어 역량 부족 문제, AI에 대한 윤리적 우려, 금지가 실현 가능하거나 바람직한지 여부, AI 사용에 대한 공개가 도움이 될지 아니면 추가적인 법적·윤리적 우려를 불러올지, AI가 유지보수를 돕고 진입 장벽을 낮출 수 있는 방식, 그리고 AI 사용으로 인해 발생하는 노이즈를 줄이는 아이디어를 논의했습니다.
또한 우리는 현대 시대에 맞게 오픈 소스 거버넌스를 어떻게 적응시킬지에 대해서도 브레인스토밍했습니다. 논의된 전략에는 간단한 설계 문서, RFC, 대규모 PR 이전의 명시적인 유지관리자 동의, 그리고 코드를 제출한 인간 기여자가 그 품질, 보안, 통합에 대해 전적인 책임을 지겠다는 약속을 요구하는 절차를 강제하는 방안이 포함되었습니다. 정책 문서에 대한 논의와 개선은 GitHub에서 계속 이어갈 예정입니다.
Jacob Smith와 Bruno Rodrigues는 userland migrations의 사용 증가를 소개했습니다. Node.js 22.x에서 24.x로 넘어가며 발생하는 deprecation에 대한 마이그레이션은 거의 완료되었습니다. Node.js 25.9.0에서는 새로 도입된 deprecation과 함께 codemod도 게시되었습니다.
Joyee Cheung은 module loader hooks와 vm Module API의 안정화를 논의하는 세션을 진행했습니다.
module.register()는 유지보수 문제 때문에 25 이하에서는 문서상 deprecated될 예정이고, 26 이상에서는 런타임 deprecated될 예정이므로, 우리는 생태계가 module.registerHooks() API로 마이그레이션할 수 있도록 지원하는 방안을 모색하고 있습니다. 아이디어에는 module.registerHooks()를 사용해 module.register() 기능 대부분을 다시 구현하는 userland ponyfill을 제공하는 것과, 마이그레이션을 돕기 위한 일부 userland-migration 자동화 도구를 마련하는 것이 포함됩니다.
Joyee는 또한 알려진 문제를 해결하고 마침내 안정화하기 위해 9년 동안 실험적 상태였던 vm Module API를 위한 새로운 설계도 소개했습니다. 우리는 표준화 기구에서 진행 중인 ESM 통합 제안들과의 미래 호환성을 보장하기 위해 이를 WebAssembly 모듈과 어떻게 통합할지에 대한 피드백을 수집했습니다. 설계에 대한 개선은 GitHub 이슈에서 계속 이어갈 예정입니다.
Santiago Gimeno는 version 1에서 10년 이상을 보낸 뒤, 코드베이스를 정리하고, 레거시 API를 제거하며, 크로스 플랫폼 일관성을 개선하기 위해 필요한 호환성 깨짐 변경을 도입하는 libuv v2를 출시하려는 움직임이 다시 활발해졌다고 공유했습니다. 이러한 기능은 이미 Julia에서 활용되고 있습니다.
libuv v2로 마이그레이션하면 ABI가 깨질 수 있기 때문에, 이를 완화할 수 있는 아이디어도 논의했습니다. 예를 들어 Node-API를 활용하는 방식이 있으며, 이 접근법의 세부 사항도 함께 다뤘습니다. 예를 들어 napi_get_uv_event_loop는 여전히 libuv ABI 변경의 영향을 받을 수 있지만, 그 사용은 제한적이고 ABI 안정성에 대한 경고가 문서에 명시되어 있습니다. 우리는 또한 제한된 기간 동안 보안 패치와 함께 v1 유지보수를 도울 방법, io_uring을 다시 도입하는 문제, 그리고 어떤 Node.js 버전부터 libuv v2를 포함해 배포할 수 있을지에 대해서도 논의했습니다. 매우 잠정적인 일정으로는 27이 될 수 있습니다.
Matteo Collina는 Node.js 내장 Virtual File System 제안을 소개했습니다. 이전에 userland 라이브러리(예: @platformatic/vfs)에서 탐색되었던 개념을 표준화하여 코어 node:vfs 모듈로 가져오면, Node.js는 표준 파일시스템 호출을 가로채어 가상화된 메모리 기반 계층을 통해 이를 라우팅할 수 있습니다. 개발자는 메모리 내의 특정 데이터 소스(provider)를 정의하고 이를 “마운트”하여 런타임이 이를 로컬 디렉터리와 정확히 동일하게 다루도록 할 수 있습니다. 또한 이 제안은 가상 파일시스템을 서로 겹쳐 올리는 기능이나, 물리 디스크 바로 위에 가상 계층을 배치해 파일을 안전하게 모의하거나 재정의하는 기능도 제공합니다.
이 세션에서 Matteo는 이 기능의 동기를 설명했습니다. 즉, 단일 실행 파일 애플리케이션과 테스트를 위한 파일 시스템 가상화를 더 쉽게 만들고, 현재 user-land monkey-patching으로 이를 구현하는 취약한 관행을 대체하는 것입니다. 구현 아키텍처와 설계 선택에 대한 간단한 개요에 이어, 우리는 PR에 대한 추가 피드백도 수집했습니다. 여기에는 stack trace 가시성, observability, 보안, worker thread 전파, 특정 경로에서 이를 토글할 수 있는 기능, 그리고 네이티브 코드 지원이 포함되었습니다. 이 PR에 대한 개선은 GitHub에서 계속 이어갈 예정입니다.
Rafael Gonzaga는 보안 팀이 최근 정교해진 위협 모델, 개선된 권한 모델, 향상된 릴리스 자동화, 그리고 보안 스캐너의 false positive를 줄이기 위해 작업 중인 새로운 VEX(Vulnerability Exploitability eXchange) 파일을 통해 생태계를 진전시켜 왔다고 공유했습니다.
하지만 이러한 노력은 현재 AI가 생성한 취약점 보고서의 대규모 유입에 가려지고 있습니다. 주로 CVE 등록과 금전적 보상을 노리는 사용자들에 의해 촉발된 이 업계 전반의 급증은, 재현 단계가 없거나 일반적인 버그를 심각한 보안 위협으로 잘못 분류하는 경우가 많은 중복적이고 노이즈가 큰 제출물로 인해 유지관리자 역량에 심각한 부담을 주고 있습니다. 버그 바운티 일시 중지, HackerOne 신호 요구사항 상향, 가이드라인 명확화 같은 완화 시도가 있었음에도 불구하고, 압도적인 물량으로 인해 해결 시간은 크게 증가했습니다. 이 병목 현상에 대응하기 위해 팀은 사전 테스트를 위한 조기 접근 확보, 보고 에이전트의 동작을 바꾸려는 시도, 그리고 엠바고를 우회하고 CI 테스트를 가속화하기 위한 공개 보안 흐름 도입 같은 전략을 검토하고 있습니다.
세션에서는 AI 시대에 잘못된 안정감이 생기는 것을 막고 CI 엠바고로 인해 비효율적이 된 테스트를 개선하기 위해, 보안 분류와 버그 수정 과정을 완전히 공개하는 도발적인 제안을 다시 검토했습니다. 또한 몇 가지 중간 지점의 해결책도 논의했는데, 여기에는 조직 내 더 많은 구성원에게 가시성을 계속 확대하는 것, 심각도에 따라 서로 다른 가시성 설정으로 취약점을 처리하는 것, 그리고 AI 에이전트가 false positive 보고서를 생성하지 않도록 더 나은 문서를 만드는 것이 포함되었습니다.
모든 참석자분들께 감사드립니다! 특히 Bloomberg가 서밋을 주최하고 Node.js 커뮤니티를 위한 환영받는 공간을 마련해 준 데 대해 특별한 감사를 전합니다.
또한 Thomas Chetwin (@tchetwin), Chengzhong Wu, Matteo Collina, Joyee Cheung, 그리고 OpenJS Foundation이 이 행사를 기획하고 가능하게 해 준 데에도 큰 감사를 드립니다.
Node.js Collaboration Summit 녹화 영상은 이제 YouTube에서 볼 수 있습니다.