AI와 함께 개발하면서 느낀점

기록엔 "막았다"고 돼 있었는데, 코드는 뚫려 있었다

Kenneth Kang · 자유 · 2026.07.23

AI랑 개발하다 보면 제일 위험한 순간이 있다. 버그가 터지는 순간이 아니다. "됐어요"라는 말을 믿어버리는 순간이다.

우리 서비스엔 비공개 글 기능이 있다. 남한테 안 보이게 숨기는 글. 어느 날 설계 문서를 다시 보는데 이렇게 적혀 있었다.

개별 글 상세·공유 페이지는 비공개 게이트 적용됨 (커밋 8848f56)

또렷하게, 자신 있게. 커밋 해시까지 박혀 있었다. 나는 당연히 넘어갔다.

그런데 우연히 코드를 열었다가 손이 멎었다. 실제로 막혀 있던 건 공유 페이지 하나뿐이었다. 정작 글을 직접 불러오는 API(GET /posts/{id})에는 권한 체크가 단 한 줄도 없었다. 글 id만 알면, 남의 비공개 글 본문이 통째로 열렸다.

목록에선 안 보이니까 "막혔네" 하고 넘어갔던 거다. 창문에 커튼만 치고 잠금은 안 채운 셈. 목록 필터만 보고 지나갔으면, 그 구멍은 지금도 그대로 있었을 거다.


이게 AI랑 개발하면서 제일 자주 밟는 지뢰라고 생각한다.

AI는 그럴듯한 서사를 정말 잘 쓴다. 커밋 메시지, 요약, 문서 — "적용 완료", "게이트 추가함", "테스트 통과". 그 문장들이 실제 코드보다 매끄럽고 확신에 차 있다. 그래서 어느새 코드가 아니라 코드에 대한 이야기를 믿게 된다.

근데 "막았다고 쓰는 것"과 "실제로 막힌 것"은 완전히 다른 사건이다. 문서는 의도를 적고, 코드는 현실을 실행한다. 둘은 자주 어긋난다. 특히 빨리 갈 때.

실제로 같은 실수가 한 번 더 있었다. 약관 문구를 고쳐야 했는데, 초안 문서만 고치고 정작 화면 반영은 안 했다. 문서엔 맞게 적혀 있고, 사용자가 보는 페이지는 옛날 그대로. "기록·의도는 맞는데 실제 코드가 다름." 똑같은 패턴이다.


그래서 요즘 일하는 방식이 바뀌었다.

  1. 기록을 믿지 말고 코드를 본다. "적용됨"이라고 쓰여 있으면, 그게 제일 먼저 의심해야 할 문장이다.
  2. 검증을 "통과하는지"가 아니라 "일부러 깨지는지"로 한다. 비공개 게이트를 일부러 무력화하고 테스트를 돌렸더니 12개 중 11개가 실패했다. 그 실패가 곧 "테스트가 진짜 물고 있다"는 증거였다. (통과한 1개는 판정이 DB 계층에 있어서였고, 그것도 설명이 됐다.)

AI랑 개발하면 속도는 확실히 빨라진다. 대신 믿음의 대상이 슬쩍 바뀐다. 코드에서 → 코드에 대한 이야기로. 그 순간이 제일 위험하다.

그래서 이제 AI가 "됐어요"라고 하면, 한 번 더 묻는다.

"좋아. 그럼 일부러 깨보자."

#AI개발#보안#회고
은하계에서 보기나도 은하계 만들기