7월 둘째 주 화요일 새벽 2시 4분, 결제 성공률 경보가 울렸습니다. 평소 99%를 유지하던 지표가 3분 만에 12%까지 떨어졌습니다. 당직 엔지니어가 상황방을 열었고, 여섯 명이 잠이 덜 깬 목소리로 모였습니다.
97분의 타임라인
원인은 예상 밖의 곳에 있었습니다. 자정에 배포된 정산 배치가 결제 데이터베이스의 커넥션을 모두 점유한 것입니다. 배치는 테스트 환경에서 아무 문제가 없었지만, 운영 환경의 데이터양은 테스트의 사백 배였습니다. 새벽 3시 41분, 배치를 중단하고 커넥션을 회수하면서 결제는 정상으로 돌아왔습니다.
장애의 원인 칸에 사람 이름을 적지 않는다. 우리 회고 문서의 첫 번째 규칙입니다.
회고에서 우리는 사람을 탓하지 않는 원칙을 지켰습니다. 배포한 동료의 실수가 아니라 운영 규모로 리허설할 수 없었던 시스템의 문제였기 때문입니다. 회고가 끝나고 세 가지가 바뀌었습니다. 배치 전용 커넥션 풀 분리, 운영 규모의 리허설 환경, 그리고 새벽 배포 금지 규칙입니다.
장애는 겪고 싶지 않지만, 겪은 장애를 묻어두면 반드시 두 번 겪게 됩니다. 97분의 기록을 이렇게 남기는 이유입니다.