AI 코드 리뷰가 '구현 깔끔하네요'라며 승인한 버그가 3일 뒤 운영 환경을 날려버린 썰
The AI review that said "looks good, solid implementation" and approved a bug that took down production three days later
핵심 요약
AI의 자신감 넘치는 어조에 속아 위험한 코드를 승인했던 경험을 공유하며, AI 리뷰의 한계를 극복할 구체적인 질문 프롬프트의 중요성을 강조함.
- AI 리뷰의 함정 — AI의 차분하고 자신감 있는 어조가 코드의 위험성을 가려버림
- 검증 질문 도입 — 리뷰 시 위험 요소, 실패 시나리오, 심각도 등을 명확히 묻는 5가지 질문 활용
- 다중 검토 프로세스 — AI가 스스로의 결과를 반박하게 만드는 2차 검토가 효과적임
- 토큰 비용 문제 — 안정적인 코드 확보를 위한 다단계 검토가 비용 문제로 현업에서 외면받음
AI가 쓴 리뷰 코멘트에는 내용이 검증됐는지랑은 아무 상관 없는 특유의 자신감이 있음. 어조가 한결같고, 차분하고, 균형 잡혀 있어서 다 똑같이 들리거든. 실제로 사고 한번 터지고 나서야 내가 그동안 그 '어조'만 보고 판단했다는 걸 깨달았음.
문제의 그 리뷰는 결제 로직 근처의 재시도(retry) 로직 변경을 승인하는 내용이었음. 코멘트들은 그럴싸했음. 변수명 제안, docstring 관련 메모, 그리고 재시도 로직이 "중복을 체크해야 할 것 같다"는 한 줄. 마지막 그 한 줄도 다른 사소한 제안들이랑 똑같은 톤으로 적혀 있었음. 근데 그건 사소한 게 아니었음. 실제로는 고객한테 이중 결제가 발생할 수 있는 치명적인 위험이었는데, 문장 자체가 워낙 평범하게 적혀 있어서 그냥 흘려보낸 거임.
나중에 다시 돌아가서 그 리뷰를 그냥 톤만 보는 게 아니라 다음 5가지 질문으로 검증해 봤음. 이 변경 사항에서 진짜 위험한 게 뭔지 짚어줬나, 아니면 모든 줄에 똑같이 힘을 줬나? 구체적인 실패 시나리오를 테스트했나, 아니면 그냥 대충 훑어봤나? 각 지적 사항마다 왜 심각한지 이유가 적혀 있나, 아니면 운영 환경에서의 리스크랑 사소한 꼬투리 잡기가 똑같은 비중으로 적혀 있나? 뭘 안 봤는지 명시했나, 아니면 그냥 침묵해서 "더 걱정할 거 없음"이라고 착각하게 만들었나? 가장 중요한 지적 사항이 반박당한 적 있나, 아니면 아무도 태클 안 걸었다고 제일 자신만만한 주장이 그냥 통과됐나?
5개 중에 4개를 탈락함. 리뷰를 그냥 평소처럼 읽을 때는 이 구멍들이 하나도 안 보였음. 왜냐면 그럴싸한 문장이랑 검증된 문장이 톤만 봐서는 구분이 안 되거든. 그리고 나는 그동안 톤만 확인하고 있었던 거고.
그래서 똑같은 리뷰를 다시 돌려봤음. 이번엔 위험 요소, 구체적인 실패 시나리오, 심각성 근거, 검토 범위, 그리고 핵심 지적 사항에 대한 재검토까지 5가지를 미리 명시해서 넣었음. 그랬더니 중복 결제 위험이 그냥 변수명 제안 옆에 묻혀 있던 한 줄이 아니라, 확실하게 차단해야 할 핵심 이슈로 딱 튀어나오더라.
이거에 대한 자세한 분석이랑 실제 PR에서 전후 비교한 내용은 여기 있음: https://medium.com/@nagatomopedro05/five-questions-your-code-review-should-always-answer-66be919bb200
다들 AI 리뷰가 그럴싸하게 들려서 승인했다가 털려본 적 있는지 궁금함. 너네도 나처럼 그놈의 '어조'에 속은 거 아님?


