pile·
백엔드·cloudflare-blogCloudflare Blog·

Workers RPC로 Python과 JavaScript 간 언어 경계 넘기

Cloudflare가 Workers RPC 시스템을 확장해 Python과 JavaScript Workers 간 직접 메서드 호출을 지원한다. API 정의, 스키마, 직렬화 코드 없이 두 언어 사이에서 객체와 메서드를 투명하게 교환할 수 있게 됐다.

핵심 포인트
  • Python Worker에서 정의한 메서드를 JavaScript에서 직접 호출하고, 그 반대도 가능 — Service Binding이 두 언어를 RPC 브리지로 연결한다.
  • Pyodide FFI와 커스텀 타입 변환 레이어를 결합해 Python ↔ JavaScript 기본 타입 자동 변환을 구현했다.
  • int/float → Number, bool → Boolean, dict → Object, list → Array 매핑이 자동으로 처리된다.
  • Request, Response, Blob 같은 Web API 객체는 runtime SDK가 RPC stub으로 래핑해 Python 네이티브 형으로 변환한다.
  • Worker 간 RPC 호출은 네트워크를 거치지 않아 지연이 거의 없다.
상세 정리
  • 배경: 기존 Workers RPC는 동일 언어 Worker 간에만 동작해, Python 생태계(Pygments 등)를 JavaScript 워크플로우에 통합하려면 별도 HTTP API 레이어가 필요했다.
  • 핵심 구현: workers-runtime-sdk Python 패키지 안에 Pyodide FFI와 타입 변환 레이어를 추가해, RPC 경계에서 언어별 타입 변환을 자동화했다.
  • 타입 매핑: Python int/float → JS Number, bool → Boolean, dict → Object, list → Array. 역방향도 동일하게 처리된다.
  • Web API 객체 처리: Request, Response, Blob처럼 Web 표준 타입은 runtime SDK가 RPC stub을 Python 네이티브 equivalent로 래핑해 개발자가 따로 변환할 필요가 없다.
  • 실용 예시: JavaScript Worker가 Pygments(Python 라이브러리)를 사용해 문법 강조를 처리할 때, 커스텀 HTTP API 없이 Python Worker 메서드를 직접 호출하면 된다.
  • 성능: RPC 호출은 같은 데이터센터 내 Worker 간 통신으로, 네트워크 경유 없이 처리돼 오버헤드가 최소화된다.
왜 읽나Python 라이브러리를 Workers 서버리스 환경에 통합하거나, 다언어 마이크로서비스 간 경계 없는 RPC를 구현하려는 엔지니어에게 유용하다.
cloudflare-blog
Cloudflare Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·github-engGitHub Engineering·

    조기 종료를 없애야 벡터화된다 — 메모리 속도 소스 코드 케이스 폴딩

    GitHub의 코드 검색 엔진 Blackbird는 480TB 이상의 소스 코드를 인덱싱하기 전 모든 바이트에 case folding을 적용한다. 이 글은 Rust로 구현한 case folding을 메모리 대역폭 한계(45+ GiB/s)까지 끌어올린 두 가지 반직관적 최적화를 상세히 다룬다. 핵심은 루프 조기 종료(break) 제거로 LLVM 벡터화를 유도하고, UTF-8을 디코딩하지 않고 바이트 공간 산술만으로 fold를 수행하는 것이다.

    #rust#unicode#simd+2
  2. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    트랜잭션 스크립트에서 숙소 메타 + 가격 계산 모듈로 — 전시 아키텍처 개선기 (2/3)

    여기어때 전시개발팀이 숙소 상세(PDP) API를 해부한 결과, 코드상으로는 DB 호출 3번처럼 보이던 요청이 실제로는 MongoDB $lookup 체인으로 컬렉션을 19회 접근하는 구조였다. 이 트랜잭션 스크립트 방식의 핵심 문제는 "aggregation이 I/O를 가린다"는 점으로, 독립적인 쿼리 10개가 단일 파이프라인에 직렬화되어 병렬화 기회를 잃고, 가격 때문에 거의 안 바뀌는 이미지까지 매 요청마다 읽어야 하는 읽기 증폭이 발생했다. V3에서는 "조회 시점 조립"을 "쓰기 시점 사전 조립"으로 전환하고, 화면별로 복제되던 가격 계산 로직을 goodsprice 단일 모듈로 수렴했다. 4개 API(PLP/PDP/RDP/ILP)의 반복 마이그레이션은 Claude Code skill로 절차를 고정하고 쉐도잉 + 동일성 검증으로 안전망을 마련하는 방식으로 진행됐다.

    #architecture#migration#caching+2