한국정보기술진흥원
한국정보기술신문
thumbnail

정보기술 · 클라우드 ·

클라우드플레어, Python Workers 성능 대폭 개선...AWS Lambda 대비 2.4배 빠른 콜드 스타트 달성

발행일
읽는 시간2분 48초

uv 기반 패키지 관리와 메모리 스냅샷 기술로 서버리스 플랫폼 경쟁력 강화

클라우드플레어가 Python Workers의 콜드 스타트 시간을 획기적으로 단축했다.

[한국정보기술신문] 클라우드플레어가 자사의 서버리스 플랫폼인 Python Workers의 성능을 대폭 개선했다고 12월 8일 발표했다. 이번 업데이트로 AWS Lambda보다 2.4배, Google Cloud Run보다 3배 빠른 콜드 스타트 성능을 달성했다.

클라우드플레어는 작년 Python Workers에 대한 기본 지원을 발표한 이후, 개발자 경험 개선과 성능 향상에 집중해왔다. 이번 업데이트의 핵심은 메모리 스냅샷 기술과 uv 기반의 패키지 관리 시스템 도입이다.

메모리 스냅샷으로 콜드 스타트 시간 대폭 단축

서버리스 플랫폼은 요청이 없을 때 코드 실행을 중단하고, 새 요청이 들어오면 다시 시작해야 한다. 이 과정에서 발생하는 지연 시간을 콜드 스타트라고 하는데, Python의 경우 런타임 부팅과 모듈 로딩에 많은 시간이 소요되는 것이 문제였다.

클라우드플레어는 이를 해결하기 위해 메모리 스냅샷 기술을 도입했다. Worker 배포 시 최상위 스코프를 실행한 후 메모리 스냅샷을 저장하고, 새로운 isolate를 시작할 때 이 스냅샷을 복원함으로써 Python 코드 실행 없이 즉시 요청을 처리할 수 있게 됐다.

실제 벤치마크 결과, httpx, fastapi, pydantic 세 가지 일반적인 패키지를 로딩할 때 클라우드플레어 Python Workers는 평균 1.027초의 콜드 스타트 시간을 기록했다. 반면 AWS Lambda는 2.502초, Google Cloud Run은 3.069초가 소요됐다. 스냅샷 없이는 10초가 걸리던 작업이 1초로 단축된 것이다.

WebAssembly 기반 Pyodide와 메모리 스냅샷의 시너지

클라우드플레어가 이러한 성능을 달성할 수 있었던 배경에는 WebAssembly 기반의 Pyodide 런타임이 있다. WebAssembly는 전체 선형 메모리를 쉽게 캡처하고 복원할 수 있어 메모리 스냅샷 구현에 유리하다.

다만 메모리 스냅샷 사용 시 엔트로피와 WebAssembly 상태 관리라는 기술적 과제가 있었다. 엔트로피 문제의 경우, 스냅샷으로 인해 난수 생성기의 시드 값이 고정되는 것을 방지하기 위해 배포 시점에는 고정된 시드를 사용하고, 런타임에 난수 생성기를 다시 시딩하는 방식을 채택했다.

WebAssembly 상태 관리를 위해서는 함수 포인터 테이블과 JavaScript 객체 참조 테이블을 스냅샷 복원 시 동일한 상태로 유지하는 메커니즘을 구현했다.

uv 기반 패키지 관리로 개발자 경험 개선

성능 개선과 함께 클라우드플레어는 패키지 관리 시스템도 전면 개편했다. 제한된 내장 패키지만 제공하던 기존 방식에서 벗어나, Pyodide가 지원하는 모든 패키지를 사용할 수 있도록 했다. 여기에는 순수 Python 패키지뿐만 아니라 동적 라이브러리를 사용하는 많은 패키지도 포함된다.

개발자 경험 개선을 위해 Python 생태계에서 빠르게 성장하고 있는 uv 패키지 관리자를 기반으로 pywrangler라는 도구를 개발했다. pywrangler는 pyproject.toml 파일에서 의존성을 읽어 Python Workers와 호환되는 방식으로 설치하고, 로컬 개발과 배포를 간소화한다.

개발자는 pywrangler dev와 pywrangler deploy 명령만으로 로컬 테스트와 전역 배포를 수행할 수 있다. 또한 pywrangler types 명령으로 바인딩에 대한 타입 힌트를 생성할 수 있어, Pylance나 mypy 같은 도구와의 통합도 원활하다.

2분 만에 전 세계 배포 가능한 FastAPI 앱

클라우드플레어는 Python Workers의 단순함을 강조한다. FastAPI를 사용한 간단한 Worker는 몇 줄의 코드만으로 구현할 수 있으며, pywrangler deploy 명령 한 번으로 125개국 330개 지역의 클라우드플레어 엣지 네트워크에 배포된다.

무료 플랜으로도 하루 10만 건의 요청과 호출당 10ms의 CPU 시간을 사용할 수 있어, 많은 사용 사례에서 완전히 무료로 운영이 가능하다. 인프라나 스케일링을 걱정할 필요 없이 코드만 작성하면 된다는 것이 클라우드플레어의 설명이다.

Durable Objects, Workflows 등 확장 기능도 지원

Python Workers는 단순한 HTTP 요청 처리를 넘어 다양한 기능을 지원한다. Cron 트리거를 설정해 정기적으로 실행하거나, Workflows for Python Workers를 통해 복잡한 워크플로우를 구현할 수 있다. Durable Objects를 사용하면 WebSocket 서버와 클라이언트도 장시간 실행할 수 있다.

활용 사례로는 Jinja 같은 라이브러리로 엣지에서 HTML 템플릿 렌더링하기, opengraph 태그를 동적으로 주입하기, Durable Objects와 WebSocket으로 채팅방 구축하기, Bluesky firehose 같은 WebSocket 연결에서 데이터 소비하기, Pillow 패키지로 이미지 생성하기 등이 있다.

클라우드플레어는 향후 더 개발자 친화적인 툴링, 더욱 빠른 콜드 스타트, 더 많은 패키지 지원, 네이티브 TCP 소켓 및 WebSocket 지원 등을 추가할 계획이다. 자세한 내용은 공식 문서와 GitHub의 예제 저장소에서 확인할 수 있다.

한국정보기술신문 클라우드분과 유민건 기자 news@kitpa.org