Cloudflare 11월 18일 장애: 지속적 배포(CD) 관점에서의 분석

Cloudflare's November 18 Outage – A Continuous Delivery Perspective

작성자
HackerNews
발행일
2025년 11월 27일

핵심 요약

  • 1 Cloudflare의 대규모 장애는 데이터베이스 권한 변경으로 인한 설정 파일 크기 증가와 프록시 패닉으로 발생했습니다.
  • 2 지속적 배포(CD) 원칙을 적용하여 설정 파일을 코드처럼 관리하고, 시스템 간 계약을 명시하며, 빠른 피드백 루프를 구축함으로써 유사한 장애를 방지할 수 있습니다.
  • 3 점진적 배포, 우아한 성능 저하 설계, 그리고 플랫폼 변경 사항에 대한 엄격한 CI/CD 테스트는 대규모 시스템의 안정성을 확보하는 데 필수적입니다.

도입

2025년 11월 18일, Cloudflare는 2019년 이후 최악의 서비스 중단을 경험했습니다. 이 장애는 사이버 공격이나 대규모 하드웨어 오류가 아닌, 데이터베이스 권한 변경이라는 사소해 보이는 원인에서 시작되었습니다. 본 문서는 Cloudflare의 사후 분석 보고서를 바탕으로, 지속적 배포(Continuous Delivery, CD)의 관점에서 이번 장애의 원인과 재발 방지를 위한 교훈을 심층적으로 분석합니다.

Cloudflare 장애는 다음과 같은 일련의 사건으로 전개되었습니다.

장애 발생 과정

  • 권한 변경: Cloudflare는 ClickHouse 데이터베이스 클러스터의 권한 및 메타데이터 가시성을 변경했습니다. 이로 인해 시스템 메타데이터 쿼리 결과에 이전보다 더 많은 행(다른 스키마의 테이블 포함)이 반환되었습니다.

  • 설정 파일 생성: Bot Management 기능 파일 생성기는 system.columns를 쿼리하여 봇 점수 모델에 사용되는 기능 목록을 생성합니다. 변경 후 이 쿼리는 약 두 배의 컬럼을 반환하여 훨씬 더 큰 기능 파일을 생성했습니다.

  • 프록시 패닉: 이 기능 파일은 Cloudflare의 엣지 네트워크로 전송됩니다. 코어 프록시의 봇 모듈은 기능 수가 하드 리미트(200개) 미만일 것으로 예상하고 메모리를 사전 할당합니다. 새로운 대형 파일은 이 제한을 초과했고, Rust 코드는 패닉 상태에 빠져 5xx 오류를 유발했습니다.

  • 파급 효과: 코어 프록시에 의존하는 Workers KV 및 Access와 같은 다운스트림 시스템도 영향을 받았습니다.

지속적 배포(CD)의 중요성

생산 환경 장애의 주요 원인은 ‘변경’입니다. 지속적 배포는 이러한 변경을 안전하고 예측 가능하게 만드는 것을 목표로 합니다.

1. 설정 파일(Config)은 코드이다

장애를 일으킨 기능 파일은 단순한 데이터가 아니라 실행 가능한 동작을 정의합니다. 이는 애플리케이션 코드와 동일한 규율로 다루어져야 합니다.

  • 소스 제어 시스템에 저장 및 버전 관리

  • 파이프라인에서 유효성 검사

  • 소비자(프록시 모듈)와의 계약 테스트 적용

2. 시스템 간의 계약

생산자(기능 파일 생성기)와 소비자(프록시 모듈) 사이에는 “200개 이하의 기능을 안전하게 처리할 수 있다”는 암묵적인 계약이 존재했습니다. 이 계약은 명시적으로 강제되지 않았고, 위반 시 소비자는 단순히 패닉 상태에 빠졌습니다.

  • CD 환경에서는 이러한 계약을 테스트로 인코딩해야 합니다. 예: “기능 파일이 200개를 초과하면 파이프라인 실패” 또는 “실행 시 너무 크면 로깅하고 기능을 삭제하여 우아하게 저하(degrade gracefully)”.

3. 변경 이벤트와 연동된 빠른 피드백

변경 배포 직후 5xx 오류가 급증한다면, 첫 번째 가설은 “우리가 문제를 일으켰다”여야 합니다. 강력한 CD/운영 체계는 모니터링을 배포와 직접 연결하여, 문제가 발생하면 즉시 변경 사항을 롤백하고 조사를 계속하도록 지시해야 합니다.

CI/CD가 더 도움이 될 수 있었던 지점

1. 프로덕션 코드처럼 설정 생성기 테스트

  • 쿼리 동작에 대한 자동화된 테스트

  • 안전하다고 간주되는 출력 크기 범위에 대한 테스트

  • 실제와 유사한 ClickHouse 클러스터(권한 변경 포함)를 프로덕션에 적용하기 전에 테스트 환경에서 검증

2. 모든 것에 대한 점진적 배포(Progressive Delivery)

  • 새로운 동작을 트래픽의 작은 부분이나 일부 지역에 먼저 배포

  • 5xx 오류, 지연 시간, 리소스 사용량 급증 여부 관찰

  • 자동화된 시스템이 문제 감지 시 롤백 및 추가 배포 차단

3. 패닉이 아닌 우아한 성능 저하 설계

  • 제한을 초과하는 기능은 삭제하고 로그를 남김

  • Bot Management 모듈을 일시적으로 비활성화하고 트래픽을 계속 전달

  • 글로벌 킬 스위치를 통해 Bot Management 기능을 끄고 핵심 CDN 및 프록시 경로는 유지

4. “플랫폼성” 변경 사항에 대한 CI 안전망

  • 플랫폼 변경 사항도 종속 서비스에 대한 대표 워크로드 및 통합 테스트를 실행하는 파이프라인을 거쳐야 함.

  • ClickHouse 권한 변경은 system.columns를 쿼리하는 모든 소비자에 대한 호환성 테스트 스위트를 실행해야 했습니다.

결론

Cloudflare의 이번 장애는 모든 변경이 잠재적으로 위험하다는 점을 명확히 보여주었습니다. 지속적 배포는 대규모 시스템에서 빈번하고 작은 변경을 안전하게 관리하기 위한 핵심 원칙입니다. 설정, 쿼리, ML 기능 역시 코드와 동일한 CI/CD 규율(테스트, 계약, 점진적 배포)을 따라야 합니다. 또한, 시스템은 가정이 깨질 경우 '부러지지 않고' '휘어지도록' 우아한 실패를 위해 설계되어야 합니다. 마지막으로, 배포와 관찰 가능성을 긴밀하게 연결하여 문제가 발생했을 때 변경 사항을 최우선 용의자로 간주하고 신속하게 대응해야 합니다. Cloudflare의 사례는 지속적 배포가 왜 중요한지를 다시 한번 상기시켜주는 귀중한 교훈이 됩니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!