귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 원인 상세 분석 == 이번 사고는 전형적인 '''"검증 부재가 불러온 나비 효과"'''로 요약된다. 기술적으로는 데이터베이스 쿼리 실수와 배포 파이프라인의 안전장치 미비가 복합적으로 작용했다. # '''배경 (The Change)''' #: Cloudflare 엔지니어들은 봇 탐지 정확도를 높이기 위해 봇 신호(Bot Signal)를 처리하는 내부 데이터베이스(ClickHouse 기반)의 스키마를 변경하고 있었다. 이는 통상적인 작업이었다. # '''실수 (The Bug)''' #: 변경된 데이터베이스 구조에 맞춰 구성 파일(Config)을 생성하는 SQL 쿼리를 업데이트해야 했으나, 권한 설정 오류로 인해 '''필터링 조건(WHERE 절)이 무시되는 버그'''가 발생했다. #: 즉, "특정 악성 봇 규칙"만 가져와야 할 쿼리가 데이터베이스에 있는 '''모든 이력 데이터'''를 긁어오게 되었다. # '''검증 실패 (Validation Gap)''' #: 생성된 구성 파일(`rules_v2.bin`)의 크기는 평소 약 20KB 수준이었으나, 버그로 인해 '''500MB'''가 넘는 거대 파일이 생성되었다. #: 문제는 배포 파이프라인(CI/CD)에 "구성 파일 크기가 너무 크면 배포를 중단한다"는 검증 로직이 없었다. 시스템은 이를 정상적인 업데이트로 간주하고 전 세계 수만 대의 서버로 전송했다. # '''재앙 (The Crash)''' #: 각 지역의 엣지 서버(Edge Server)에 있는 프록시 데몬(Daemon)이 이 파일을 수신하고 메모리에 로드(Load)를 시도했다. #: 500MB짜리 구조체를 파싱하여 메모리에 올리는 과정에서 힙(Heap) 메모리가 고갈되었고, 리눅스 커널의 OOM Killer가 해당 프로세스를 강제로 죽여버렸다. #: 워치독(Watchdog) 프로그램이 죽은 프로세스를 다시 살려냈지만, 살아나자마자 다시 거대 파일을 읽고 죽는 과정이 초당 수십 번 반복되었다. 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)