Cloudflare Workers에서 Python 앱을 기존 DB에 바로 연결하는 법

Cloudflare Workers의 Python 앱이 Hyperdrive로 기존 PostgreSQL·MySQL에 직접 연결합니다. 별도 브리지를 없앨 수 있는 조건부터 실제 비용 변화, 지원 드라이버와 ORM 제약, 캐시 동작, 안전한 연결 테스트 절차까지 한 번에 정리했습니다.

Wednesday, September 16, 2026Omid Saffari
Cloudflare Workers에서 Python 앱을 기존 DB에 바로 연결하는 법

2026년 9월 16일, Cloudflare는 Cloudflare Workers에서 실행되는 Python 앱이 Hyperdrive를 통해 PostgreSQL과 MySQL에 직접 연결할 수 있게 했습니다. 기존 데이터베이스에 접근하려고 별도의 HTTP 서비스까지 두어야 했던 Worker라면 이제 그 서비스를 없앨 수 있습니다. 아키텍처와 월 비용이 함께 달라지는 변화입니다.

기존 데이터베이스는 그대로 두고 Cloudflare Workers만 연결합니다

이번 릴리스의 핵심은 데이터베이스를 옮기지 않아도 된다는 데 있습니다.

Hyperdrive는 Cloudflare Worker와 기존 PostgreSQL 또는 MySQL 데이터베이스 사이를 잇는 관리형 연결 계층입니다. 새 데이터베이스가 아니며, 레코드를 Cloudflare로 복사하지도 않습니다. Python 코드는 Hyperdrive 바인딩이 제공하는 연결 정보와 일반 데이터베이스 드라이버를 사용해 TCP 연결을 엽니다. 그 뒤 데이터베이스까지 이어지는 장기 연결 풀은 Hyperdrive가 관리합니다.

이로써 흔히 쓰이던 우회 구조가 달라집니다. 데이터베이스에 직접 연결할 수 없던 Python Worker는 SQL 실행만을 담당하는 작은 API나 서버를 호출하곤 했습니다. 연결 경로는 다음과 같았습니다.

기존: Python Worker → 데이터베이스 브리지 → PostgreSQL 또는 MySQL

현재: Python Worker → Hyperdrive → PostgreSQL 또는 MySQL

Cloudflare는 Worker 가까이에서 연결 설정을 처리하고, 오리진 데이터베이스 가까이에는 풀링된 연결을 유지합니다. Hyperdrive 가이드에 따르면 일반적인 구성에서는 첫 쿼리를 보내기 전까지 일곱 번의 왕복이 필요합니다. TCP에 한 번, TLS에 세 번, 데이터베이스 인증에 세 번입니다. 짧게 실행되는 Worker가 호출될 때마다 이 설정 과정을 되풀이하는 대신 기존 풀을 재사용할 수 있습니다.

기존 데이터베이스 전용 브리지를 제거하고 Python Worker가 Hyperdrive를 통해 데이터베이스에 연결되는 구조
데이터베이스는 그대로 둡니다. 데이터베이스 트래픽 전달만 맡던 브리지는 Hyperdrive로 대체할 수 있습니다.

지원 조건은 명확합니다. Python Workers에는 2026-09-08 이후 호환성 날짜가 필요하며, 이 기능은 아직 베타입니다. PostgreSQL용으로는 asyncpg, pg8000, psycopg가, MySQL용으로는 aiomysql, pymysql이 Cloudflare의 테스트를 거쳤습니다. 권장 드라이버는 asyncpgaiomysql입니다.

Cloudflare는 다른 TCP 드라이버도 작동할 수 있다고 설명합니다. 그렇다고 모든 패키지, ORM, 기존 애플리케이션의 작동을 보장하는 것은 아닙니다. 데이터베이스 호환성은 마이그레이션의 첫 관문일 뿐, 전체 통과를 의미하지 않습니다.

Cloudflare Workers 비용에서 달라지는 항목

이미 Python 앱을 Workers에서 운영하면서 데이터베이스 연결 때문에 브리지 비용만 따로 내고 있다면 가장 분명한 절감 효과를 기대할 수 있습니다.

계산은 간단합니다.

현재 월 비용 = 데이터베이스 + Worker + 브리지 호스트

가능한 월 비용 = 데이터베이스 + Worker

데이터베이스 비용은 그대로 남습니다. Hyperdrive의 기본 커넥션 풀링과 쿼리 캐싱은 Workers Paid에서 별도 요금이 없으며, Hyperdrive에는 이그레스 요금도 없습니다. 계정이 이미 Workers 기본 제공량 안에서 운영된다면 이 연결 경로 때문에 늘어나는 Cloudflare 비용은 $0입니다. 실제로 줄일 수 있는 현금 지출은 사라지는 브리지 호스트의 비용입니다.

유지보수도 같은 계산에 넣어야 합니다. 브리지를 제거하면 배포 하나, 상태 검사 하나, 시크릿 묶음 하나, 로그 스트림 하나, 장애 경계 하나도 함께 사라질 수 있습니다. 누가 관리하고 얼마나 자주 문제를 일으키는지 확인하기 전에는 그 작업에 임의의 금액을 매기지 않는 편이 좋습니다.

새 유료 계정의 Workers Paid는 계정당 월 $5부터 시작합니다. 매월 요청 1,000만 건과 CPU 시간 3,000만 밀리초가 포함됩니다. 초과분은 요청 100만 건마다 $0.30, CPU 시간 100만 밀리초마다 $0.02입니다. 이 플랜에서 Hyperdrive 데이터베이스 쿼리는 무제한으로 표시됩니다.

Free 플랜으로도 소규모 개념 검증을 진행할 수 있습니다. 하루 Worker 요청 100,000건과 Hyperdrive 데이터베이스 쿼리 100,000건이 포함되고, 호출당 CPU 시간은 10밀리초입니다. 두 항목은 별도로 집계됩니다. 요청 하나에서 SQL 문을 여러 번 실행하면 데이터베이스 쿼리도 여러 건 차감될 수 있습니다.

당장 적용할 수 있는 세 가지 사례

FastAPI 서비스를 운영하는 1인 창업자

관리형 PostgreSQL 데이터베이스 앞에 FastAPI Worker를 두고, HTTP 호출을 받아 SQL만 실행하는 작은 컨테이너를 함께 운영하는 상황을 가정해 보겠습니다. 그 컨테이너에 비즈니스 로직이 없다면 asyncpg 테스트로 Hyperdrive가 이를 대체할 수 있는지 확인할 수 있습니다.

새 데이터베이스를 얻는 것이 핵심은 아닙니다. 현재 스키마와 백업, 제공업체는 유지하면서 연결 어댑터 역할만 하던 서비스를 지우는 것이 이점입니다. 먼저 라우트 하나를 옮겨 결과와 지연 시간을 비교하고, 운영 환경의 동작이 일치한 뒤 브리지를 제거해야 합니다.

고객별 MySQL 데이터베이스를 관리하는 소규모 에이전시

소규모 에이전시는 각 고객의 MySQL 데이터베이스를 바라보는 작은 Python API 여러 개를 관리할 수 있습니다. 이제 조건에 맞는 앱마다 데이터베이스 프록시를 따로 배포하는 대신 Worker 안에서 aiomysql이나 pymysql을 테스트할 수 있습니다.

이점은 운영 방식을 통일할 수 있다는 데 있습니다. Worker 배포 경로는 하나로 맞추고, 데이터베이스마다 Hyperdrive 구성 하나를 둘 수 있습니다. 다만 브리지가 테넌트 권한 검증, 스키마 변환, 감사처럼 쿼리 전달 이상의 일을 한다면 그대로 유지해야 합니다.

읽기 요청이 많은 엔드포인트 하나만 옮기는 플랫폼 팀

플랫폼 팀이 백엔드 전체를 마이그레이션할 필요는 없습니다. 읽기 비중이 높은 공개 Python 엔드포인트 하나만 Workers로 옮기고 리전 데이터베이스는 유지한 채, Hyperdrive가 오리진 연결을 풀링하도록 구성할 수 있습니다.

이 경우 캐싱 정책을 명시적으로 결정해야 합니다. Hyperdrive는 기본적으로 조건에 맞는 읽기 결과를 60초 동안 캐시하며, 재검증 중에는 오래된 결과를 추가로 15초간 제공할 수 있습니다. 공개 카탈로그나 콘텐츠 조회라면 허용할 수 있습니다. 반면 인증, 권한, 결제 상태, 쓰기 직후의 읽기에는 캐시를 끈 별도 Hyperdrive 구성을 사용해야 합니다.

기존의 Django와 FastAPI 비교는 프레임워크 선택에도 여전히 도움이 됩니다. 이번 릴리스로 달라진 것은 판단 기준 중 한 부분입니다. PostgreSQL 또는 MySQL을 유지하는 방식이 이제 Python Worker의 공식 경로가 됐지만, 그렇다고 Django나 FastAPI 애플리케이션의 나머지 부분까지 인증된 것은 아닙니다.

가장 작은 안전 연결 테스트 만들기

운영용이 아닌 MySQL 데이터베이스와 권한이 제한된 테스트 사용자를 씁니다. 목표는 고객 데이터로 전체 마이그레이션을 예행연습하는 것이 아니라 SELECT 1로 연결 경로를 검증하는 것입니다.

첫 테스트에서 캐시를 거치지 않은 데이터베이스 왕복 시간을 측정할 수 있도록 캐시가 꺼진 Hyperdrive 구성을 만듭니다.

Bash
npx wrangler hyperdrive create python-db-test --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name" --caching-disabled

Wrangler가 반환한 구성 ID를 wrangler.toml에 복사합니다. 아래 날짜는 필수 기준인 2026-09-08보다 늦습니다.

TOML
name = "python-hyperdrive"
main = "src/main.py"
compatibility_date = "2026-09-16"
compatibility_flags = ["python_workers"]

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<HYPERDRIVE_CONFIG_ID>"

pyproject.toml에 드라이버를 추가합니다.

TOML
[project]
dependencies = [
    "aiomysql",
]

이제 src/main.py에 Cloudflare가 문서로 안내한 연결 테스트를 작성합니다.

Python
import aiomysql
from workers import Response, WorkerEntrypoint


class Default(WorkerEntrypoint):
    async def fetch(self, request):
        hd = self.env.HYPERDRIVE
        connection = await aiomysql.connect(
            host=hd.host,
            port=int(hd.port),
            user=hd.user,
            password=hd.password,
            db=hd.database,
            ssl=None,
        )
        try:
            cursor = await connection.cursor()
            await cursor.execute("SELECT 1")
            result = await cursor.fetchone()
            return Response.json({"result": result[0]})
        finally:
            connection.close()

문서에 나온 Python Workers 명령으로 배포합니다.

Bash
uv run pywrangler deploy

ssl=None은 언뜻 잘못된 설정처럼 보일 수 있습니다. Cloudflare 예시에서 이는 Worker와 Hyperdrive 사이의 드라이버 연결에 적용됩니다. Hyperdrive에서 오리진 데이터베이스로 이어지는 연결에는 여전히 TLS가 필요하며, 안전하지 않은 평문 오리진 연결은 지원되지 않습니다.

브리지는 선택 사항이 됐을 뿐, 저절로 쓸모없어지지는 않습니다

이번 출시는 연결 경로를 바꿨습니다. Python Workers를 제약 없는 CPython 서버로 바꾼 것은 아닙니다.

Python 패키지 지원 범위는 순수 Python 패키지, PyEmscripten 휠, Pyodide에 포함된 패키지입니다. Cloudflare는 WebAssembly 패키지 지원이 아직 초기 단계라고 밝히고 있어, 필요한 의존성 하나가 없으면 마이그레이션이 중단될 수 있습니다. 현재 드라이버 및 ORM 문서는 동기 SQLAlchemy만 지원합니다. Workers 환경에서 greenlet을 지원하지 않기 때문에 비동기 SQLAlchemy는 지원되지 않습니다.

데이터베이스 프로토콜에도 제약이 있습니다. Hyperdrive는 PostgreSQL 9.0부터 17.x, MySQL 5.7부터 8.x, 그리고 MariaDB를 지원합니다. SQL Server와 MongoDB는 지원하지 않습니다. PostgreSQL advisory lock과 LISTEN, NOTIFY도 사용할 수 없습니다. MySQL의 multi-statement query와 protocol-level prepared statement 역시 지원 범위 밖입니다. Free와 Paid 모두 쿼리 최대 실행 시간은 60초입니다.

풀링을 적용하면 세션에 대한 전제도 달라집니다. Hyperdrive는 트랜잭션 풀링을 사용하므로 트랜잭션이 끝나면 오리진 연결이 풀로 돌아갑니다. 트랜잭션 사이에도 세션 상태가 유지된다고 가정하는 코드는 검토가 필요합니다. 긴 트랜잭션은 풀을 소진해 동시성 이점을 없앨 수도 있습니다.

월요일에 할 일

월요일부터 애플리케이션 전체를 마이그레이션하지 마십시오. 데이터베이스 연결만 담당하는 브리지가 정말 필요한지부터 증명해야 합니다.

  1. 폐기해도 되는 경로 하나 고르기

    권한이 제한된 사용자로 운영용이 아닌 데이터베이스나 복제본을 만듭니다. 민감하지 않은 레코드를 읽고 세션 상태, 잠금, 쓰기 직후 데이터의 최신성에 의존하지 않는 라우트 하나를 선택합니다.

  2. 연결 스모크 테스트 실행하기

    위의 작은 Worker를 배포하고 Hyperdrive를 통한 SELECT 1이 성공하는지 확인합니다. Worker 오류율, CPU 시간, 경과 시간, 데이터베이스 연결 수를 기록합니다.

  3. 실제 드라이버와 쿼리 시험하기

    스모크 쿼리를 해당 라우트에서 실제로 쓰는 드라이버와 대표 쿼리 하나로 바꿉니다. 반환 데이터, 트랜잭션 동작, 캐시 설정, 풀 사용량을 현재 브리지와 비교합니다.

  4. 삭제로 절감할 비용 계산하기

    브리지의 월 호스트 요금과 배포, 패치, 모니터링, 복구에 드는 시간을 적습니다. 추가 Workers 사용량과 지속적인 Hyperdrive 운영 비용을 뺍니다. 이 계산과 호환성 테스트가 모두 긍정적일 때만 브리지를 삭제합니다.

브리지가 데이터베이스 연결만 담당하고, 앱이 PostgreSQL 또는 MySQL을 사용하며, 검증된 드라이버로 해당 라우트를 처리할 수 있다면 이번 주에 움직일 수 있습니다. 비동기 SQLAlchemy, 사용할 수 없는 패키지, 지원되지 않는 SQL 동작에 의존하거나 엄격한 쓰기 후 읽기 일관성을 아직 분리하지 못했다면 기다려야 합니다. 앱을 현재 서버에 그대로 둘 예정이거나 브리지에 Hyperdrive가 대신할 수 없는 비즈니스 로직이 있다면 이번 변화의 영향을 받지 않습니다.

다음 플랫폼 변화도 월요일에 바로 실행할 판단으로 정리해 받아보려면 뉴스레터를 구독하세요.

마지막 업데이트
2026년 9월 16일
카테고리
Explained

Google에서 이 사이트를 우선하기

Google 검색에서 omidsaffari.com을 선호 소스로 추가

omidsaffari.com을 선호 소스로 지정하면 Google이 Top Stories, AI Overviews, AI Mode에서 우선적으로 보여 줍니다.

Gemini API 백그라운드 툴 호출로 통화를 이어가는 법

Gemini API 백그라운드 툴 호출로 통화를 이어가는 법

Gemini 3.8 Live의 비동기 함수 호출로 음성 에이전트가 조회 중에도 대화를 이어가는 방식을 살펴봅니다. Gemini API의 오디오 비용, 완료 신호, 구현 코드와 운영 체크리스트를 통해 예약·주문·지원 전화에서 중복 실행 없이 완료율을 측정하는 방법까지 정리했습니다.2026년 9월 16일Explained
Cloudflare Workers 권한, 클라이언트별 배포 경계를 만든다

Cloudflare Workers 권한, 클라이언트별 배포 경계를 만든다

Cloudflare Workers의 개별 Worker 권한으로 클라이언트 CI 배포 범위를 좁히는 방법을 설명합니다. Editor 역할, 계정 소유 API 토큰, 바인딩과 Durable Objects의 숨은 권한까지 실제 인계 절차에 맞춰 점검합니다.2026년 9월 15일Explained
npm ci를 실행할 때만 네트워크를 여는 Claude Code 권한 설정

npm ci를 실행할 때만 네트워크를 여는 Claude Code 권한 설정

Claude Code 2.1.271이 샌드박스 자동 모드에 명령 단위 네트워크 접근을 추가했습니다. npm ci 설치에만 레지스트리를 열고 이후 빌드와 테스트 단계에서는 다시 닫는 설정법, 상시 허용 목록과의 차이, 실제 보안 경계를 구체적으로 정리합니다.2026년 9월 15일Explained
Claude Code 구독으로 Vercel AI SDK 에이전트 비용 줄이기

Claude Code 구독으로 Vercel AI SDK 에이전트 비용 줄이기

기존 Claude Code 구독을 Vercel AI SDK 에이전트 실행에 연결하면 어떤 계정에 모델 비용이 잡히는지 설명합니다. auto·direct·ai-gateway 인증 우선순위부터 공유 사용량 한도, 별도로 남는 Sandbox 비용, 팀별 운영 선택까지 한 번에 정리했습니다.2026년 9월 15일Explained
Playwright 자동화에 Cloudflare 승인 호스트와 읽기 전용 검토 적용하기

Playwright 자동화에 Cloudflare 승인 호스트와 읽기 전용 검토 적용하기

Cloudflare Browser Run의 세션 가드레일과 읽기 전용 Live View를 고객 프로젝트에 적용하는 법을 설명합니다. Playwright 설정, 승인 호스트 목록, 차단 테스트, 검토 링크 보안과 Browser Sessions 요금까지 실무 기준으로 확인합니다.2026년 9월 14일Explained
음성 AI 통화 비용, GPT-Live-1의 $0.05가 전부는 아닙니다

음성 AI 통화 비용, GPT-Live-1의 $0.05가 전부는 아닙니다

음성 AI 모델 GPT-Live-1의 분당 $0.05 요금만 보면 실제 통화 비용을 놓치기 쉽습니다. 음성 세션, 백엔드 추론과 툴, 통신사 비용을 합쳐 처리가 완료된 통화 한 건의 총비용을 계산하는 법과 90초 예약 전화 사례, 도입 전 점검할 기준을 정리했습니다.2026년 9월 14일Explained
ChatGPT 윈도우 Appshots 활용법: 컨텍스트 복사 시간을 줄이는 방법

ChatGPT 윈도우 Appshots 활용법: 컨텍스트 복사 시간을 줄이는 방법

ChatGPT 윈도우 Appshots로 이메일, 오류 창, 설정 화면을 채팅에 바로 첨부하는 방법을 정리했습니다. 두 Alt 키 단축키와 대상 채팅 설정, 보이지 않는 텍스트의 공유 범위, Google 앱의 한계, 실제 업무 시간이 줄었는지 측정하는 기준까지 확인하세요.2026년 9월 14일Explained
Vercel 요금 절감: FastAPI 정적 파일이 Function을 건너뛴다

Vercel 요금 절감: FastAPI 정적 파일이 Function을 건너뛴다

Vercel이 FastAPI의 app.frontend()와 StaticFiles 요청을 CDN에서 직접 처리하기 시작했습니다. Function 호출·컴퓨팅 사용량은 줄지만 CDN 요청과 전송량은 남습니다. 적용 조건, 보안 예외, 실제 Vercel 요금 절감 범위를 정리합니다.2026년 9월 13일Explained
뉴스레터

매주 일요일, 한 통의 편지.뜨거운 의견이 아닌, 돌아가는 시스템.

주간 발행. 스팸 없음. 언제든 해지 가능합니다.