3P by neo 3달전 | favorite | 댓글 1개

Python을 Cloudflare Workers에 통합하기: Pyodide와 WebAssembly 사용

  • Cloudflare Workers에서 이제 Python을 사용할 수 있음.
  • 이전의 JavaScript 이외의 언어 지원과는 다르게 Python 구현체가 workerd 런타임에 직접 통합됨.
  • Vectorize, Workers AI, R2, Durable Objects 등의 모든 바인딩이 지원됨.
  • FastAPI, Langchain, Numpy 등 인기 있는 Python 패키지의 일부를 가져올 수 있음.
  • 별도의 빌드 단계나 외부 툴체인이 필요하지 않음.

WebAssembly로 컴파일하는 것 이상의 작업

  • Cloudflare Workers는 2018년부터 WebAssembly를 지원함.
  • 언어를 WebAssembly나 JavaScript로 컴파일하는 것만으로는 충분하지 않음.
  • 개발자가 익숙한 패키지 생태계를 지원해야 함.

Python Worker의 생명주기

  • Pyodide가 workerd에 내장되어 있어 Python 코드 작성이 가능함.
  • Wrangler.toml 파일을 통해 .py 파일을 지정하고, npx wrangler@latest dev를 실행하면 런타임이 Pyodide를 자동으로 주입함.

Workers 런타임에 내장된 Python 인터프리터

  • CPython은 Python의 참조 구현체이며, Pyodide는 CPython을 WebAssembly로 포팅한 것임.
  • Pyodide는 대부분의 Python 표준 라이브러리를 제공하며, JavaScript API를 직접 호출할 수 있는 FFI를 제공함.

Pyodide와 외부 함수 인터페이스(FFI)의 마법

  • Pyodide의 FFI는 Python에서 JavaScript 기능에 접근할 수 있게 해줌.
  • 이를 통해 FastAPI와 Langchain과 같은 패키지를 바로 사용할 수 있음.

동적 링킹이 필수적인 이유, 정적 링킹으로는 부족함

  • Python 패키지 중 많은 수가 C FFI를 사용하여 네이티브 라이브러리를 가져옴.
  • 동적 링킹을 통해 Pyodide가 네이티브 라이브러리 의존성이 있는 많은 Python 패키지를 지원할 수 있음.

서버 및 클라이언트 라이브러리 지원

  • Python에는 httpx, urllib3, requests 등 인기 있는 HTTP 클라이언트 라이브러리가 많지만, Pyodide에서는 기본적으로 작동하지 않음.
  • 비동기 클라이언트 라이브러리는 Fetch API를 사용하여 요청을 수행할 수 있음.

Python 패키지 가져오기

  • Python Workers는 Pyodide에서 직접 제공하는 Python 패키지의 부분 집합을 지원함.
  • requirements.txt 파일에 패키지를 추가하기만 하면 됨.

메모리 스냅샷을 사용하여 냉동 시작 시간 단축

  • Pyodide를 Worker에 주입하고 Cloudflare에 업로드하는 과정에서 메모리 스냅샷을 생성하여 냉동 시작 시간을 단축함.

Pyodide 버전과 호환성 날짜에 대한 미래 증명

  • 호환성 날짜와 호환성 플래그를 사용하여 새로운 동작과 잠재적으로 하위 호환성이 없는 변경 사항을 명시적으로 선택할 수 있게 함.

Python Workers에서 바인딩 작동 방식

  • Pyodide는 JavaScript에 대한 FFI를 제공하여 Python에서 직접 JavaScript 객체, 메소드, 함수 등을 사용할 수 있게 함.

Python Workers 시작하기

  • 새로운 프로그래밍 언어에 대한 진정한 지원은 "hello world"를 넘어서는 큰 투자가 필요함.
  • Python은 JavaScript 다음으로 인기 있는 프로그래밍 언어이며, Cloudflare는 Python 패키지 지원을 확대하고 성능을 개선하기 위해 지속적으로 노력하고 있음.

GN⁺의 의견

  • Cloudflare의 Python Workers 지원은 서버리스 아키텍처에서 Python의 사용을 확장하는 중요한 발전임. 이는 Python 개발자들에게 더 많은 유연성과 선택권을 제공하며, JavaScript에 의존하지 않고도 클라우드 기반의 애플리케이션을 구축할 수 있는 기회를 열어줌.
  • Pyodide를 통한 Python의 WebAssembly 통합은 브라우저와 서버리스 환경에서 Python 코드를 실행할 수 있는 새로운 가능성을 제시함. 이는 Python 생태계에 큰 영향을 미칠 수 있으며, 특히 데이터 과학과 머신 러닝 분야에서 JavaScript가 지배적이지 않은 영역에서 Python의 사용을 촉진할 수 있음.
  • 동적 링킹과 메모리 스냅샷 기술은 초기 로딩 시간을 단축시키고, 리소스를 효율적으로 공유할 수 있는 방법을 제공함. 이는 특히 대규모 분산 시스템에서 중요한 성능 개선을 의미함.
  • 호환성 날짜와 플래그를 통한 버전 관리는 기존 코드의 안정성을 유지하면서도 새로운 기능과 업데이트를 수용할 수 있는 유연한 방법을 제공함. 이는 장기적으로 서비스를 운영하는 기업에게 중요한 요소임.
  • Cloudflare가 Python Workers에 대한 지원을 확대함에 따라, Python 개발자들은 기존의 클라우드 서비스와 통합하거나 새로운 서비스를 개발할 때 더 많은 옵션을 가질 수 있음. 이는 Python이 서버리스 컴퓨팅 분야에서 중요한 역할을 할 수 있음을 보여줌.
Hacker News 의견
  • Cloudflare가 Edge에서 WebAssembly를 통해 Python을 실행하는 데 더 많은 관심을 기울이고 있어 기쁘다는 긍정적인 반응.

    • Pyodide를 사용하여 Python을 WebAssembly로 컴파일하고, Workerd에 번들링하여 V8 스냅샷을 사용해 시작 시간을 가속화하려고 시도함.
    • Python의 Cloudflare Workers에서의 차가운 시작(cold start) 시간은 최선의 경우 약 1초임.
    • 이번 발표는 Edge에서 Python 실행에 대한 관심을 측정할 수 있게 해주지만 몇 가지 단점이 있음:
      • 하나의 Python/Pyodide 버전에만 국한됨.
      • 패키지 해결이 workerd에 의존적이고 까다로움.
      • JS/V8 세계에 구조적으로 의존하고 있어, 차가운 시작 시간을 줄이는 데 도전이 될 수 있음.
    • 이러한 단점에도 불구하고, 이러한 시도를 환영하며, 이를 통해 만들어질 멋진 앱들을 기대함.
  • Cloudflare는 호스팅과 데이터베이스에 대한 훌륭한 기능을 제공하지만 개발자 플랫폼으로서 자신들을 마케팅하는 데 큰 성공을 거두지 못했다는 의견.

    • Cloudflare가 Google Cloud Run과 같은 언어에 구애받지 않는 컨테이너 호스팅 서비스를 제공하는지에 대한 질문이 있음.
  • Cloudflare를 통해 JS workers를 사용해본 경험이 있으며 사용하기 쉽고 매우 빠르다는 긍정적인 평가.

    • 자신의 Django 앱을 Cloudflare의 D1 데이터베이스를 사용하여 포팅하고 싶어함.
  • JS worker와의 성능 비교가 도움이 될 것이라는 의견.

    • 여러 계층에 걸쳐 있어서 속도가 느릴 수 있다는 우려와 함께 대략적인 트레이드오프를 알고 싶어함.
  • Pyodide가 심각한 지원을 받으면서, Python이 프론트엔드에서 JavaScript의 진정한 대안이 될 수 있는 희망이 보인다는 의견.

  • lzma를 사용한 데모가 의도적인지, 아니면 단순히 우연인지에 대한 질문이 있음.

    • 이는 최근 기술 뉴스와 관련이 있음.
  • Cloudflare에서 AI 관련 작업을 실행하는 것에 대한 게임 체인저라고 평가하며, 이를 오랫동안 기대해왔다는 의견.

  • Cloudflare가 JS workers에 국한되지 않고 WASM을 일급 시민으로 취급하는 workers를 구현하기를 바라는 의견.

    • 현재는 JS 컨텍스트 내에서 WASM 코드가 실행되지만, 향후에는 컨테이너를 거치지 않고 직접 WASM 런타임으로 배포될 것이라는 전망.
  • CF Pages를 사용하여 정적 사이트를 만드는 데 좋은 결과를 얻었으며, Cloudflare의 오픈 소스 LLM-as-a-service 제안에 매료됨.

    • Python 지원 부족이 Cloudflare에서 더 많은 작업을 구축하지 못하는 주된 문제라고 언급하며, 이번 업데이트를 시도해보고 싶어함.
  • Pyodide 패키지만 사용하는 제한이 비트리비얼하지 않은 빌드에 어떤 영향을 미칠지 궁금하다는 의견.

    • 비순수 Python 코드가 많아 수동으로 재구축해야 하는 경우를 생각하며, Cloudflare의 채택이 더 많은 패키지를 포함시키는 데 도움이 될 수 있음을 기대함.