모든 고객을 위한 Cloudflare OAuth

2026-06-27 · 2026-06-27_cloudflare-self-managed-oauth-deep-analysis.md

#OAuth #Cloudflare #인증 #플랫폼 #개발자 #보안 #엔지니어링

원문 출처

모든 고객을 위한 Cloudflare OAuth

한 줄 요약

Cloudflare가 자체 관리 OAuth(self-managed OAuth)를 모든 고객에게 공개하면서 OAuth 엔진 Hydra를 1.X → 2.X로 대규모 업그레이드한 과정과 그에 따른 성능 개선(P95 45% 감소)을 상세히 공유했지만, Hacker News 커뮤니티에서는 OAuth의 복잡성·프라이버시 우려·Cloudflare의 제품 완성도 부족 등을 강하게 비판했다.

---

원문 핵심 내용

작동 방식: self-managed OAuth란 무엇인가?

Cloudflare는 그동안 API 토큰(API token) 방식만 개발자에게 제공했다. API 토큰은 관리가 까다롭고, 고객이 특정 앱에만 제한된 권한을 위임하는 ‘위임형 흐름(delegated flow)’에는 적합하지 않다. 이번에 공개한 self-managed OAuth를 쓰면 개발자가 자신의 앱을 Cloudflare OAuth 클라이언트로 등록하고, 고객이 직접 동의 화면(consent screen)에서 읽기/쓰기 등 범위(scopes)를 승인하는 표준 OAuth 2.0 흐름을 제공할 수 있다. 주요 사용 사례는 SaaS 통합, 내부 개발자 플랫폼, 에이전트 도구(agentic tool)다.

구체적인 수치: 업그레이드 전후 성능 변화

업그레이드 전후 Hydra 성능을 비교한 표가 핵심이다:

지표 (평균) 이전 이후 변화율
API P95 응답 시간 185ms 101ms -45%
RSS 메모리 888MB 763MB -14%
Go heap 할당 449MB 271MB -40%
고루틴(Goroutines) 4015 3076 -23%
CPU (코어 수) 1.07 0.67 -37%

또한 데이터베이스 마이그레이션 도중 약 1억 3,250만 개 행(row) 이 업데이트되고, 1억 1,470만 개 행이 삽입되었으며, 임시 바이트가 136.97GB, 트랜잭션 커밋이 2만 2,200회 발생했다.

트레이드오프: 업그레이드 중단을 피하기 위한 전략

Cloudflare는 Hydra 1.X에서 2.X로의 업그레이드가 수 시간이 걸리므로, 단순한 in-place 업그레이드 대신 blue-green 전략을 선택했다. 주요 고려 사항은 쓰기 손실철회(revocation) 이벤트 유실이었다.

  • 쓰기 손실 최소화: 업그레이드 전에 토큰 만료 시간을 여러 시간으로 늘려 새 토큰 생성 요청을 줄였다.
  • 철회 이벤트 재생 큐: Cloudflare Queues를 이용해 업그레이드 중 발생한 철회 이벤트를 큐에 기록한 뒤, green 데이터베이스로 전환 후 큐를 비워 재생(replay)했다. 만약 이 과정이 실패하면 사용자가 철회한 앱의 접근이 의도치 않게 복원될 수 있었다.

구체적인 시행 과정과 예상치 못한 문제

  1. 1.X 업그레이드: SQL 마이그레이션에서 기존 SELECT * 문제를 해결하기 위해 명시적 컬럼을 선택하는 커스텀 Hydra 빌드를 만들었다. 컷오버 후 refresh token 재사용으로 인한 체인 무효화 오류가 급증했다. Wrangler나 MCP 클라이언트는 요청량이 많아 한 번의 재사용으로 전체 세션이 무효화될 위험이 있었다. Cloudflare는 Worker에 refresh token coalescing(일시 캐싱 후 재시도 감지 시 단축 응답)을 추가해 해결했다.
  1. 2.X 업그레이드: 실제 전환에는 데이터베이스 복사, 데이터 정리, Hydra 서비스와 두 핵심 내부 시스템의 동시 컷오버, 사후 모니터링이 필요했다. 순수 실행 시간은 약 3시간이었다. 컷오프 직후 authorization service가 OAuth policy 데이터를 과도하게 삭제하는 현상이 발생했는데, 원인은 Hydra 마이그레이션 중 하나가 유효한 OAuth 세션 상태를 손상시킨 것이었다(유효 세션을 무효로 표시). 이로 인해 403 오류가 증가했고, Cloudflare는 데이터 복원으로 대응했다.

---

Hacker News 커뮤니티 반응

댓글 처리 기록: HN 댓글 약 150개(원댓글 + 대댓글)를 worker가 2개 chunk로 압축한 중간 요약 기반.

OAuth 복잡성 논쟁: zaptheimpaler의 "API 키면 충분하다"

핵심 주장: OAuth는 너무 복잡하고 엔터프라이즈 지향적이다. 개인 개발자나 소규모 프로젝트는 "그냥 API 키 하나면 된다(I just want a damn API key)."

근거/사례: OAuth 스펙은 위원회 설계로 과도하게 많은 부분을 규정하며, 실제로는 잘못 구현되는 경우가 많다. iririririr는 "직접 20줄로 구현해도 더 안전할 것"이라고 주장했고, rockskon은 "OAuth 2.0은 보안에 대한 증오 범죄"라는 표현까지 썼다.

반론/대댓글: cad는 API 키 관리 실패 가능성(키 유출 시 전체 권한 노출)을 지적했고, tasuki는 "개인의 비밀 관리 능력이 더 문제"라고 반박했다. matja는 OAuth가 최종 사용자(개발자가 아닌)가 API 키를 몰라도 되도록 설계된 것임을 강조하며 "소수 개발자의 불평"이라고 일축했다.

내 판단: API 키와 OAuth는 사용 사례가 다르다. 단순한 자동화 스크립트에는 API 키가 더 간편하지만, SaaS 통합이나 다중 사용자 앱에는 OAuth의 위임 및 철회 기능이 필수적이다. 다만 OAuth의 복잡성은 인정할 만하며, 특히 작은 프로젝트에서 오버엔지니어링이 될 위험이 있다.

프라이버시 우려: willtemperley의 "로그인 추적 악몽"

핵심 주장: OAuth 제공자(Cloudflare)는 어떤 사용자가 언제 어떤 앱에 로그인했는지 모두 알 수 있다. 이는 프라이버시 악몽(privacy nightmare)이다.

근거/사례: 사용자가 GitHub, Slack 등 여러 앱을 Cloudflare OAuth로 연결하면, Cloudflare는 모든 로그인 시간과 리소스 접근을 기록할 수 있다.

반론/대댓글: spaghettifythis는 "대부분 이미 Gmail이나 Outlook을 사용하므로 Cloudflare가 추적하지 않아도 구글이나 마이크로소프트가 알고 있다"고 반박했다. 그러나 willtemperley는 "로그인 시간까지는 알 수 없다"고 재반박하며, 시간 정보까지 포함하면 더 민감한 정보가 될 수 있다고 주장했다.

내 판단: OAuth가 프라이버시에 위험이 있는 것은 사실이지만, Cloudflare가 단순한 인증 제공자(authorization server) 역할만 한다면 접근 기록만 알 뿐 사용자 콘텐츠 자체는 볼 수 없다. 다만 사용자는 어느 정도 신뢰를 해야 하므로, 분산 인증(IndieAuth, 자체 호스팅 OIDC)이 대안으로 떠오른다.

Cloudflare 플랫폼화 비판: utopiah의 "중앙화로 분산 인터넷을 해친다"

핵심 주장: Cloudflare는 모든 것을 중앙화하고 있으며, 이는 분산 인터넷의 이상을 훼손한다.

근거/사례: shimman도 동의하며, CDN, DDoS 보호, Workers, R2, 그리고 이제 OAuth까지 — 점점 모든 것이 Cloudflare 안에서 해결된다. swyx가 "공정한 거래(fair trade)"라고 반박하자, utopiah는 "분산 인터넷을 중시하는 사람에게는 문제"라고 재반박했다.

반론/대댓글: lumafsfasfd는 중앙 집중식 인증이 일반 사용자에게 더 안전하고 편리하다는 입장을 보였다. 비밀번호 재사용 문제를 해결하고, 비밀번호 관리자를 강제할 필요가 없어진다는 장점을 강조했다. tossitawayplz는 프라이버시 비용을 지적하며 양측의 타협점을 찾아야 한다고 주장했다.

내 판단: Cloudflare가 점점 하나의 거대한 플랫폼이 되는 것은 명백하다. 이는 편의성과 보안을 높이지만, 단일 장애점(single point of failure) 위험도 커진다. 분산 인터넷 지지자들은 벤더 락인(vendor lock-in)을 경계해야 한다.

블로그 게시물 평가: xyzzy_plugh의 "평범하고 진부하다"

핵심 주장: 이 블로그 게시물은 6~7년 전에 했어야 할 일을 지금 하는 내용이며, 엔지니어링 블로그 치고는 너무 진부하다.

근거/사례: xyzzy_plugh는 큰 회사의 배경 지식을 알 수 있다는 점에서 흥미롭지만, 내용 자체는 특별할 게 없다고 평가했다.

반론/대댓글: parsadotsh는 "대규모 회사에서 실제로 업그레이드를 어떻게 실행했는지 자세히 보여주는 점이 유용하다"며 반론했다. 특히 blue-green 전략의 세부사항과 데이터 정리 문제 등은 다른 엔지니어에게 교훈을 준다고 주장했다.

내 판단: 두 의견 모두 일리가 있다. 내용의 novelty는 낮지만, 실제 운영 경험을 투명하게 공유한 점은 높이 평가할 만하다. 특히 중간 규모 이상의 회사에서 비슷한 리스크를 안고 업그레이드할 때 참고할 만한 사례다.

제품 완성도 비판: CommonGuy, aroman의 "신규 프로젝트만 발표하고 기존 제품은 방치"

핵심 주장: Cloudflare는 새 프로젝트를 자주 발표하지만, 기존 제품의 기능 완성도는 낮고 개선에 인색하다.

근거/사례 (CommonGuy): Web Analytics(2020년 출시)가 UTM 파라미터와 커스텀 이벤트를 아직 지원하지 않고, wrangler CLI로 Cloudflare Page를 undeploy할 수 없다. 근거/사례 (aroman): Wrangler는 신규 명령어만 계속 추가하고, GA(General Availability) 상태인 Workflows를 몇 달간 삭제 기능 없이 출시했다. 대시보드·API·CLI 어디에서도 delete를 제공하지 않았다.

반론/대댓글: dust-jacket는 "당신이 원하는 개선이 아니라고 해서 개선을 안 한다고 말할 수는 없다"고 반박했다. aroman은 재반박하며 "개선 자체를 부정한 게 아니라, 신규 제품 확장에 비해 기존 제품 개선의 우선순위가 낮다는 점을 지적한 것"이라고 명확히 했다.

내 판단: 이 논쟁은 스타트업의 전형적인 딜레마다. 신규 기능으로 성장을 유지하는 것과 기존 제품을 안정화하는 것 사이에서 균형을 잡아야 한다. 하지만 GA를 선언한 제품에서 기본적인 CRUD조차 미완성인 것은 사용자 신뢰를 떨어뜨릴 수 있다. Cloudflare는 Workflows 사례를 반면교사로 삼아야 한다.

OAuth/OIDC 운영 경험: hmokiguess의 "충분히 해결된 문제"

핵심 주장: OAuth/OIDC는 이미 해결된 문제(solved problem)이며, 유지보수 부담도 적다.

근거/사례: 자체 호스팅 Identity Server로 월 수십억 요청을 3인 팀으로 운영한 경험을 공유했다. Scott Brady 블로그를 통해 개념을 명확히 이해했다고 추천했다.

반론/대댓글: littlecranky67는 "그 Identity Server가 지금은 Duende Software라는 상용 제품으로 바뀌어 연간 6,000달러부터 시작한다"고 지적했다. hmokiguess는 상용화 전에 벗어났다고 답했고, 이후 보안 패치 유지 문제가 논의되었다.

내 판단: OAuth/OIDC가 프로토콜 수준에서 안정화된 것은 맞지만, 구현과 운영은 여전히 복잡하다. hmokiguess의 경험은 훌륭하지만, 대부분의 조직이 3인 팀을 투입할 여력이 없다는 점에서 클라우드 managed 서비스(Cloudflare OAuth, Auth0 등)의 매력이 있다.

MCP와 OAuth DCR 보안: avemg의 피싱 위험 경고

핵심 주장: OAuth DCR(Dynamic Client Registration)은 MCP 환경에서 피싱 위험을 높인다.

근거/사례: 임의의 callback URL로 클라이언트를 등록할 수 있어, 공격자가 악성 리다이렉트를 통해 토큰을 탈취할 수 있다. OAuth 스펙은 이 문제를 제대로 다루지 않는다(spec handwaves around this). adeptima는 allowlist 기반 redirect 패턴 제한이나 앱 스토어 같은 장치가 필요하다고 동의했다.

반론/대댓글: avemg의 주장은 구체적인 시나리오(예: 사용자를 가짜 callback URL로 유도)를 들어 강력하게 설득력을 얻었다. 특별한 반론은 없었으며, 대신 "MCP는 죽었다, Skills는 영원하다"라는 슬로건이 인용되며 MCP 생태계의 미래에 대한 회의론이 나타났다.

내 판단: DCR의 보안 허점은 실제로 심각하다. Cloudflare가 self-managed OAuth를 공개하면서 DCR을 허용한다면, 기본적으로 callback URL을 검증하는 allowlist 기능을 반드시 제공해야 한다. 현재 문서에서는 이 부분이 충분히 강조되지 않아 우려된다.

Hydra 업그레이드 버그: zvolsky의 마이그레이션 손상 질문

핵심 주장: 원문에서 언급된 "Hydra 마이그레이션이 OAuth 세션 상태를 손상시킨" 문제가 오픈소스 Hydra의 마이그레이션 파일 때문인지, Cloudflare의 커스텀 수정 때문인지 궁금하다.

근거/사례: zvolsky는 자신이 Hydra 2.0 마이그레이션 코드를 작성한 경험이 있으며, upstream에서 이미 수정되었는지 확인하려는 의도였다.

반론/대댓글: 이 질문에 대한 직접적인 답변은 댓글 스레드에 없었으나, Cloudflare의 엔지니어가 추후 설명할 가능성이 있다.

내 판단: 오픈소스 소프트웨어의 마이그레이션 버그는 흔한 일이다. Cloudflare가 커스텀 Hydra를 사용했기 때문에 문제를 특정하기 어렵다. 이 댓글은 엔지니어링 커뮤니티에서의 협업과 투명성의 중요성을 보여준다.

SPA 토큰 노출: littlecranky67의 보안 경고

핵심 주장: SPA(Single Page Application)에서 OAuth access token을 JavaScript에 노출하는 것은 미친 짓(madness)이다.

근거/사례: PKCE code flow를 사용하더라도, 토큰을 브라우저의 JavaScript 메모리에 저장하면 XSS 공격에 취약하다. HttpOnly·SameSite 쿠키에 저장해야 JS 기반 공격을 막을 수 있다고 주장했다.

반론/대댓글: 이 의견에 특별한 반론은 없었다. 대부분의 개발자가 BFF(Backend for Frontend) 패턴을 권장하지만, Cloudflare Workers를 BFF로 사용할 수 있다는 점이 논의되었다.

내 판단: 매우 중요한 지적이다. Cloudflare가 self-managed OAuth를 제공할 때, 특히 SPA를 대상으로 한 모범 사례(예: BFF, 쿠키 기반 토큰 저장)를 문서에 명확히 안내해야 한다. 그렇지 않으면 보안 사고로 이어질 수 있다.

무료 요금제 논란: rozenmd vs asdfsa32

핵심 주장 (rozenmd): Cloudflare의 무료 요금제는 비즈니스 모델의 일부이며, 앞으로도 유지될 것이다.

반론 (asdfsa32): 역사적으로 좋은 의도였던 회사들이 결국 악용된 사례가 많다. 무료 요금제가 언제든 유료화되거나 축소될 수 있다는 회의적 시각.

내 판단: Cloudflare는 공개적으로 'Free plan will stay free'라고 약속하지는 않았다. 사용자는 벤더 의존성을 피하기 위해 오픈소스 대안(예: ORY Hydra self-hosted)을 고려해야 한다.

성능 개선에 대한 반응

핵심 주장: 대부분의 댓글은 성능 지표 자체보다는 "이 정도면 인상적이다"라는 짧은 동의가 대부분이었다.

근거/사례: P95 185ms → 101ms, CPU 37% 감소 등 수치에 대해 특별한 이견은 없었다.

내 판단: 성능 개선은 분명하지만, 이는 Hydra 버전 업그레이드의 자연스러운 결과일 수도 있다. Cloudflare가 인프라 최적화를 잘했다는 증거다.

대안 제시: raxxorraxor의 자체 호스팅 OIDC

핵심 주장: 복잡성이 필요하면 OAuth도 괜찮지만, 자체 호스팅 OIDC를 추천한다.

근거/사례: notpushkin이 IndieAuth와 Tailscale의 OIDC 구현을 소개했다. IndieAuth는 분산형 인증을 목표로 하며, Tailscale은 자체 CA와 OIDC를 결합한 사례다.

반론/대댓글: aeneas_ory는 Ory Hydra 같은 도구로 적절히 사용하면 OAuth2도 효율적이라고 반박했다. 단순한 사례에는 Ory Talos(API 키 관리)도 제공하고 있다.

내 판단: 자체 호스팅은 통제력과 프라이버시를 원하는 조직에 좋은 선택이지만, 운영 부담을 감수해야 한다. Cloudflare의 managed OAuth는 그 부담을 없애주지만, 벤더 락인을 감수해야 한다. 사용 사례에 따라 결정할 문제다.

---

새로운 시각

OAuth 공개가 플랫폼 생태계에 미치는 장기적 영향

Cloudflare가 OAuth를 공개함으로써, 이제 누구나 Cloudflare API를 기반으로 한 SaaS 앱을 만들 수 있게 되었다. 이는 마치 AWS IAM이 퍼블릭 서비스로 전환된 것과 유사하다. 장기적으로 Cloudflare는 '인터넷의 운영 체제'가 되려는 움직임을 보인다. 모든 웹 서비스가 Cloudflare를 통한 인증/권한 부여를 표준으로 삼는다면, 이는 인터넷의 단일 인증 계층(single authentication layer)을 형성하게 된다. 이는 편리하지만, 동시에 khalic이 농담으로 말한 "Cloudflare 장애로 인증 세션 절반이 죽는 날"이 현실이 될 수도 있다.

보안과 사용자 경험의 균형: OAuth의 진화 방향

OAuth는 본래 리소스 소유자(사용자)가 제3자 앱에 제한된 접근을 위임하기 위해 설계되었다. 하지만 실제 사용성은 떨어진다. 동의 화면이 사용자에게 혼란을 주고, 철회 기능이 잘 숨겨져 있기 때문이다. Cloudflare의 개선 노력(동의 화면 명확화, 대시보드 철회)은 좋은 방향이지만, 여전히 사용자가 '무엇에 동의하는지' 완전히 이해하기는 어렵다. 진정한 발전은 사용자 중심의 동의 UI머신 리더블 권한 설명(machine-readable permission descriptions)이 결합될 때 가능할 것이다. 예를 들어, AI가 "이 앱은 당신의 Cloudflare DNS 레코드를 읽을 수 있습니다"를 평문으로 자연어 요약해주는 것.

의료 분야에서의 OAuth 적용 가능성

의료 분야에서는 HIPAA, GDPR 등 규제로 인해 데이터 접근이 엄격히 통제된다. 환자 데이터(예: 내시경 이미지, 종양학 기록)를 제3자 분석 서비스에 안전하게 제공하는 전형적인 시나리오에 OAuth가 적합하다. 하지만 Cloudflare OAuth는 아직 의료 규제를 충족한다고 공개된 바 없고, 데이터 주권(data sovereignty) 문제가 남아 있다. 향후 의료용 OAuth는 환자 동의의 명확한 기록(consent receipt), 감사 로그, 데이터 최소화(minimization) 원칙을 충족해야 한다. Cloudflare의 플랫폼이 이 요구를 충족할 수 있다면, 의료 분야에서 중요한 인프라가 될 수 있다.

---

자녀와 미래에 대한 시사점

다음 세대에게 필요한 디지털 리터러시

OAuth와 인증 개념은 이제 모든 디지털 시민이 이해해야 할 기본 소양이 되었다. 자녀들에게 "비밀번호만 중요하지 않다. 어떤 앱에 내 계정 접근 권한을 주는지, 그 권한을 어떻게 철회하는지"를 가르쳐야 한다. 특히 학교에서 소셜 로그인(Google, Apple)을 사용할 때, 어떤 정보가 공유되는지 인지하도록 교육하는 것이 중요하다.

교육 방향: 분산 vs 중앙화 인증의 철학적 차이

Cloudflare OAuth는 중앙화된 인증의 대표적인 예이다. 반면 IndieAuth, ActivityPub 기반의 분산형 소셜 웹은 반대 방향을 지향한다. 아이들이 성장할 때 이 두 가지 접근법의 장단점을 비교할 수 있는 사고력을 길러주는 것이 필요하다. "누군가가 내 데이터를 대신 관리해주는 것이 편리한가, 아니면 내가 직접 관리하는 것이 안전한가?"라는 질문을 던져볼 수 있다.

의료 분야 함의

사용자가 의료 분야 종사자라는 점에서, 미래의 의료 시스템은 환자 데이터 접근에 OAuth를 광범위하게 사용할 것이다. 환자는 자신의 진료 기록을 특정 병원, 연구 기관, AI 진단 서비스에 일시적으로 공유할 수 있게 된다. 이 과정에서 동의 철회가 얼마나 쉬운지가 환자 신뢰의 핵심이 될 것이다. Cloudflare의 사례에서 철회 재생 큐의 중요성을 배웠듯이, 의료 OAuth도 철회 이벤트가 유실되지 않도록 설계되어야 한다. 또한, DCR의 보안 위험(avemg 지적)은 의료처럼 민감한 분야에서는 치명적일 수 있으므로, allowlist 기반의 엄격한 클라이언트 등록이 필수적이다.

---