기본 콘텐츠로 건너뛰기

Cloudflare의 보안 스캔 10배 확장 전략: Kafka 병목 해결부터 DB 최적화까지

최근 Cloudflare는 모든 계정의 보안 리스크를 탐지하는 'Security Insights'의 스캔 성능을 10배 이상 향상시킨 기술적 여정을 공유했습니다. 초당 10회에서 100회로 스캔 처리량을 늘리면서, 기존 시스템이 직면했던 백로그 적체와 API 타임아웃 문제를 어떻게 해결했는지 기술적 관점에서 분석합니다.

주요 과제: 주 단위로 이루어지던 스캔 주기를 단축하고, 수백만 개의 무료 계정까지 자동 스캔 범위를 확대하기 위한 인프라의 확장성 확보

1. Kafka 소비 아키텍처의 재설계

Cloudflare의 스캔 아키텍처는 스케줄러가 Apache Kafka로 메시지를 발행하고, Go로 작성된 마이크로서비스(Checkers)가 이를 소비하는 구조입니다. 하지만 Kafka의 파티션 구조상 한 파티션 내에서는 순차적 처리가 강제되므로, 처리 속도가 느린 메시지가 전체 파이프라인을 점유하는 'Head-of-Line Blocking' 문제가 발생했습니다.

이를 해결하기 위해 개발팀은 두 가지 전략을 도입했습니다:

  • 고루틴(Goroutine) 기반의 배치 처리: 메시지를 하나씩 처리하는 대신 배치 단위로 소비하고, 각 메시지를 별도의 고루틴에서 병렬로 실행하여 처리 속도를 극대화했습니다.
  • Fast Lane과 Slow Lane의 분리: 처리 시간이 긴 대형 계정과 짧은 계정을 식별하여 소비자 그룹을 분리했습니다. 이를 통해 무거운 작업이 가벼운 작업의 발목을 잡는 현상을 방지했습니다.

2. 데이터베이스 쓰기 성능의 혁신

기존 시스템의 가장 큰 병목 중 하나는 PostgreSQL 저장 로직이었습니다. 초기 코드는 발견된 보안 인사이트 하나당 한 번의 DB 라운드 트립을 수행하는 비효율적인 구조였습니다. 최대 50만 건의 데이터가 발생할 수 있는 상황에서 이는 치명적이었습니다.

팀은 이를 해결하기 위해 하이브리드 벌크 인서트 전략을 선택했습니다:

  • 데이터 양이 적을 때는 UNNEST 기능을 사용하여 배열 형태로 한 번에 쿼리.
  • 데이터 양이 임계치를 넘을 때는 PostgreSQL의 COPY 명령을 사용하여 대량의 데이터를 효율적으로 삽입.

아키텍트의 분석

이번 Cloudflare의 사례는 단순한 인프라 증설이 아닌, 컴퓨팅 자원의 효율적 배분I/O 밀도 최적화가 핵심입니다. 특히 Kafka를 단순한 큐로 보지 않고 파티셔닝의 특성을 이해하여 Go의 동시성 모델로 극복한 점이 인상적입니다.

또한, 데이터베이스 계층에서의 'N+1 Query' 문제는 분산 시스템에서 가장 흔하면서도 치명적인 병목입니다. UNNEST와 COPY를 적절히 섞어 사용하는 하이브리드 방식은 데이터의 가변성이 큰 보안 스캔 환경에서 성능과 안정성을 모두 잡을 수 있는 영리한 접근 방식입니다. 엔지니어링 측면에서 볼 때, '코드 수준의 최적화가 시스템 전체의 확장성을 어떻게 결정짓는가'를 보여주는 아주 좋은 교과서적 사례라고 평가합니다.


원문 출처: Scaling Security Insights: how we achieved a 10x increase in global scanning capacity

댓글

이 블로그의 인기 게시물

초소형 e-리더 Xteink X4: 하드웨어 제약을 극복하는 커뮤니티 생태계와 기술적 통찰

최근 IT 시장에서 '미니멀리즘'과 '특수 목적 기기'에 대한 수요가 다시금 고개를 들고 있습니다. 그 중심에 선 Xteink X4 는 4.3인치 E Ink 디스플레이를 탑재한 69달러짜리 초소형 e-리더로, 기술적 한계와 잠재력을 동시에 보여주는 흥미로운 사례입니다. "Xteink X4는 매력적인 크기를 가졌지만, 직관적이지 않은 UI와 기능적 제한이라는 숙제를 안고 있습니다. 하지만 이를 해결하려는 커뮤니티의 움직임이 이 기기의 진정한 가치를 만들고 있습니다." 1. 하드웨어 설계의 명과 암: Form Factor vs. UX Xteink X4는 220ppi 해상도의 E Ink 스크린을 탑재하여 최신 킨들(300ppi)에 비해 선명도는 떨어지지만, 6mm 미만의 두께와 극강의 휴대성을 제공합니다. 그러나 터치스크린의 부재 는 사용자 경험(UX) 측면에서 큰 병목 현상을 야기합니다. 레이블이 없는 물리 버튼과 다기능 인터페이스는 사용자에게 높은 학습 곡선을 요구하며, 이는 현대적인 인터페이스 표준과는 거리가 있습니다. 2. 상호운용성 및 데이터 전송의 기술적 이슈 이 기기는 기술적으로 몇 가지 통신 및 물리적 연결 문제를 안고 있습니다. MagSafe 정렬 문제: 아이폰과의 자석 결합을 내세웠으나, 물리적인 오정렬로 인해 별도의 접착 링이 필요한 설계 결함을 보입니다. 파일 전송 프로토콜: 표준적인 MTP(Media Transfer Protocol) 연결 대신 브라우저 기반의 Wi-Fi 업로드를 권장하지만, 실제 구현 성능(HTTP 핸들링)이 불안정하여 사용자들이 MicroSD 카드를 통한 물리적 복사에 의존하게 만듭니다. 파일 시스템 지원: DRM이 없는 EPUB와 TXT로 제한된 파일 시스템 지원은 폐쇄적인 생태계를 형성하고 있습니다. 3. 커뮤니...

단 8M 달러로 구현한 105M 달러의 가치: Skio의 기술 중심 구독 엔진 혁신

최근 테크 씬에서 가장 주목받는 소식은 Y Combinator(YC) 출신인 Skio 가 경쟁사인 Recharge에 1억 500만 달러(약 1,400억 원)라는 현금 조건으로 인수된 사건입니다. 이 딜이 놀라운 이유는 Skio가 외부로부터 유치한 누적 투자금이 단 800만 달러에 불과했기 때문입니다. 이는 자본 효율성 측면에서 압도적인 성과이며, 기술 중심의 린(Lean) 스타트업이 도달할 수 있는 이상적인 엑싯 모델을 보여줍니다. "Skio는 마케팅이나 영업팀 없이 오직 제품 개발(Building the product)에만 집중하여 $32M의 ARR(연간 반복 매출)을 달성했습니다." Skio는 브랜드들이 구독형 결제를 원활하게 처리할 수 있도록 돕는 미들웨어 성격의 SaaS 플랫폼을 구축했습니다. 창업자 Kennan Frost는 수차례의 피벗(Pivot) 끝에 구독 결제라는 시장의 Pain point를 정확히 타격했고, $4B(약 5.3조 원) 이상의 거래액을 처리하는 견고한 시스템을 완성했습니다. 엔지니어링 중심의 성장이 가져온 레버리지 Skio의 성공 뒤에는 엔지니어링 리더십이 있었습니다. 창업자 스스로 Pinterest 엔지니어 출신이었으며, 초기 팀은 영업 인력을 채용하는 대신 창업자와 CTO가 직접 세일즈 콜을 돌며 고객의 요구사항을 즉각 코드에 반영했습니다. 이러한 '엔지니어링 주도 성장(Engineering-led growth)'은 시스템 아키텍처의 단순화와 고도화된 자동화를 가능하게 했으며, 이는 결과적으로 낮은 고정비용과 높은 수익성으로 이어졌습니다. 아키텍트의 분석: 고가용성 구독 엔진의 기술적 통찰 시니어 아키텍트 관점에서 Skio의 인수는 단순한 비즈니스 성과 이상의 기술적 함의를 가집니다. 1. 결제 파이프라인의 고가용성과 HTTP 인터페이스 최적화 $4B 규모의 결제 데이터를 처리하기 위해서는 HTTP/API 통신의 무결성이 필수적입니다. Skio는 복잡한 구독 로직(재결제, 스케줄링, 할인 로직)...

Rust 생태계의 비상: GSoC 2026 선정 프로젝트와 오픈소스 기여의 질적 진화

Rust 프로젝트가 구글의 글로벌 오픈소스 프로그램인 Google Summer of Code (GSoC) 2026 에 참여하여 최종 선정된 13개의 프로젝트 리스트를 공개했습니다. 이번 GSoC 2026은 Rust 언어의 위상이 단순히 '유망주'를 넘어 시스템 프로그래밍의 '핵심'으로 완전히 자리 잡았음을 보여주는 중요한 이정표가 되었습니다. GSoC 2026을 통해 선정된 13개의 프로젝트는 Rust 생태계의 기술적 깊이를 더하고, 신규 기여자와의 긴밀한 협력을 통해 코드베이스의 견고함을 한 단계 끌어올릴 것으로 기대됩니다. 1. 데이터로 보는 Rust 프로젝트의 위상 올해 Rust 프로젝트에는 총 96개의 제안서 가 접수되었습니다. 이는 전년 대비 약 50% 증가 한 수치로, Rust에 대한 개발자들의 폭발적인 관심을 증명합니다. 특히 한 프로젝트 주제에 14개의 제안서가 몰리는 등 경쟁이 치열했으며, 이 과정에서 Rust 커뮤니티는 기여의 질(Quality)을 최우선으로 고려하여 13개의 최종 프로젝트를 선발했습니다. 2. AI 시대의 오픈소스 기여가 직면한 과제 흥미로운 점은 이번 GSoC 과정에서 AI 에이전트를 활용한 저품질 제안서 및 기여(Low-quality contributions) 문제가 대두되었다는 것입니다. 대규모 언어 모델(LLM)의 보급으로 인해 제안서 작성의 문턱은 낮아졌으나, 실질적인 기술 이해도가 결여된 노이즈가 발생하고 있습니다. Rust 프로젝트 팀은 이를 면밀히 검토하여 실제 기여 가능성이 높은 인재를 선별하는 데 집중했습니다. 3. 지속 가능한 멘토링과 생태계의 현실 성장통 역시 존재했습니다. 일부 프로젝트는 멘토의 펀딩 중단(Funding loss) 등 현실적인 제약으로 인해 아쉽게 취소되기도 했습니다. 이는 Rust와 같은 거대 프로젝트가 지속 가능성을 유지하기 위해 기업의 후원과 전업 메인테이너의 존재가 얼마나 중요한지를 다시 한번 상기시킵니다. 아키텍트의 분석: Rust 생태계의 성숙과...