일간

Cloudflare Workers, Node.js 호환을 기본으로 켜고 크기 한도를 64MiB로

원문 Cloudflare Blog ↗

Cloudflare가 9월 9일 Workers의 모듈 레지스트리를 다시 만들었다고 발표했습니다. 저자 이름은 글에 없습니다(Cloudflare 공식 블로그).

무엇이 바뀌나

모듈을 URL로 다룹니다. 기존에는 import 지정자를 파일시스템 경로처럼 처리했는데, 이제 new URL()과 같은 규칙으로 해석합니다. 그래서 다음이 됩니다.

  • import.meta.url — 현재 모듈의 URL
  • import.meta.main — 진입점 모듈에서만 true
  • import.meta.resolve() — 지정자를 URL로 변환(추가 검증은 하지 않는 "순수 문자열 변환")
  • node:, cloudflare: 같은 프로토콜 지정자를 정식 지원
  • 쿼리스트링이 다르면 별개 모듈 인스턴스. ./counter.js?a와 ./counter.js?b는 상태를 공유하지 않는 두 복사본

지연 컴파일. 번들 전체를 미리 컴파일하는 대신 모듈이 처음 import될 때 컴파일합니다.

공유 코드 캐시. 기존에는 V8 isolate마다 컴파일 결과를 따로 들고 있었는데, Cloudflare가 여러 isolate를 복제해 띄우는 구조에 맞춰 캐시를 공유하게 설계했습니다.

에러 정리. 어떤 경로로 로드해도 같은 오류 클래스와 메시지를 냅니다. 파싱 불가한 지정자는 TypeError, 모듈 없음과 순환 의존성은 Error.

한도. 압축 번들 크기 한도가 모든 요금제에서 64MiB로 올라갑니다. 이전 한도는 글에 명시되지 않았습니다.

Node.js 호환 "기본"의 정확한 범위

글은 Node.js 호환성이 "이제 기본값으로 켜진다"고 하는데, 설정 절에서는 새 모듈 레지스트리를 쓰려면 new_module_registry compatibility flag를 명시적으로 추가하라고 안내하고, 이 플래그에 "아직 기본 활성화 날짜가 없다"고 씁니다. 즉 지금 시점에서는 선택해 켜는 기능이고, 기존에 배포된 Worker는 그대로 동작합니다. 신규·기존 Worker 구분은 글에 없습니다.

깨질 수 있는 것

  • 최상위 await가 있는 ESM을 require()로 불러오면 동기 반환이 불가능해 에러
  • import attributes 검증이 엄격해져 지원하지 않는 속성은 명시적으로 거부

글에 없는 것

콜드 스타트 개선 시간, 번들 크기 감소량, 벤치마크 같은 성능 수치가 하나도 없습니다. 지연 컴파일과 공유 캐시가 좋아 보이는 건 설계상 그렇다는 것이고, 얼마나 빨라지는지는 글이 말하지 않습니다. 아직 미지원인 Node.js API 목록과 기본 활성화 일정도 없습니다.

실무에서 할 일

Workers를 쓰고 있다면 개발 환경에서 new_module_registry 플래그를 켜고 기존 코드가 그대로 도는지, 특히 require()로 ESM을 부르는 곳이 있는지 확인해 보면 됩니다. Node.js 패키지 때문에 Workers를 피했던 팀은 다시 볼 만한 시점입니다. 다만 성능은 직접 재야 합니다.

2026년 9월 14일에 올라온 글

그날 대시보드 →
  1. ·OpenAI 에이전트가 RubyGems를 공격했다는 보고서, 그리고 아직 모르는 것
  2. ·Rust가 Microsoft 안에서 C++·C#·TypeScript와 같은 급이 됐다
  3. ·Shopify가 React Native를 버리고 Swift·Kotlin으로 돌아간다
  4. ·Tailwind CSS가 Shopify에 인수됐다 — 라이선스는 MIT 그대로

댓글

불러오는 중…