에이전트에게는 잃을 평판이 없다
seonestSimon Willison의 최근 글에는 특히 주목할 만한 한 문장이 있습니다. "나는 이제 에이전트가 짠 프로덕션 코드를 한 줄씩 보지 않는다." 이와 같은 상황은 이제 어느 팀에서나 흔하게 나타납니다.
흐려진 경계
Simon은 그동안 두 가지 방식을 구분해 왔습니다. vibe coding 은 코드를 확인하지 않고 결과만 받아서 사용하는 방식입니다. agentic engineering 은 25년 동안 축적한 판단력을 그대로 적용하면서 AI 도구를 다루는 방식입니다. 전자는 개인적인 용도의 도구에 한해서만 받아들일 수 있고, 후자는 프로덕션 환경에서도 책임을 질 수 있는 방식이라고 설명했습니다.
경계가 흐려지는 이유는 단순합니다. 에이전트가 맡은 일을 충분히 잘 처리하기 때문입니다. Claude Code는 JSON API 엔드포인트에 SQL 쿼리를 연결하고 결과를 직렬화하는 작업을 실수 없이 완료합니다. 테스트와 문서도 함께 작성합니다. 그래서 Simon도 어느 순간부터 그 코드를 한 줄씩 들여다보지 않게 되었습니다.
Simon은 다른 팀이 만든 이미지 리사이즈 서비스를 사용하는 일에 비유했습니다. 이런 서비스를 쓸 때 그 팀의 Git 저장소에 있는 코드를 한 줄씩 읽지는 않습니다. 문서를 확인하고 제공하는 함수를 호출해 필요한 기능을 구현합니다. 이상 징후가 나타날 때만 내부 구현을 확인합니다. 에이전트가 만든 코드도 같은 방식으로 다루게 되었다는 뜻입니다.
그런데 에이전트에게는 잃을 것이 없습니다
다른 팀은 일을 잘못 처리하면 잃는 것이 있습니다. 그동안 축적해 온 평판 입니다.
우리가 옆 팀의 코드를 일일이 읽지 않고도 사용할 수 있는 이유는, 그 팀이 일을 잘못 처리하면 평판이 훼손되기 때문입니다. 어떤 팀이 지난 분기에 견고한 서비스를 출시했다면, 이번 분기에도 비슷한 결과를 낼 것이라고 약하게나마 기대하게 됩니다. 그 팀이 다음 분기에도 같은 자리에서 계속 일하기 때문입니다.
Simon도 Claude Code에는 잃을 평판이 없고, 자신이 수행한 일에 책임을 질 수도 없다고 지적했습니다.
그런데도 에이전트에 대한 신뢰는 점점 두터워집니다. 매번 좋은 결과를 얻다 보니, 다음번에도 결과가 좋을 것이라고 기대하게 됩니다.
Simon은 이런 현상을 "정상화된 일탈"이라고 부릅니다. 챌린저호 폭발 사고를 초래한 바로 그 메커니즘입니다. 작은 위반이 반복돼도 문제가 생기지 않으면, 사람들은 그 정도의 위반은 괜찮다고 받아들이게 됩니다. 리뷰 없이 머지한 PR이 한 번도 사고를 일으키지 않았다면, 실제로 사고를 일으킬 PR을 마주쳤을 때 멈춰 설 이유를 찾지 못하게 됩니다.
얼마나 오래 직접 써 봤는지가 중요합니다
Simon은 이제 커밋 100개와 잘 정리된 README를 갖춘 GitHub 저장소도 30분 만에 만들 수 있다고 지적합니다. 이런 겉모습만으로는 실제로 견고한 프로젝트와 방금 만들어 낸 프로젝트를 구분하기 어렵습니다. 그래서 그가 더 신뢰하는 단서는 하나뿐이라고 했습니다. 누군가가 그 프로젝트를 2주 동안 매일 사용해 보았는지 여부입니다.
결국 평판을 대신하는 것은 사용 시간 입니다.
이 논리는 우리가 머지하는 PR에도 그대로 적용됩니다. 에이전트가 작성한 함수를 리뷰 없이 머지한다면, 적어도 며칠 동안은 그 함수를 직접 호출해 봤어야 합니다. 단위 테스트가 통과했다는 것은 코드가 오늘 작동한다는 뜻이지, 내일 작동한다는 뜻이 아닙니다. 며칠 동안 다양한 입력을 넣어 시험해 본 경험만이 그 간극을 메워 줍니다.
이 원칙은 개인적인 용도의 도구에서 가장 또렷하게 드러납니다. 사이드 프로젝트는 매일 직접 사용하는 동안 다듬어지지 않은 부분이 모두 드러나기 때문입니다.
프로덕션 시스템에서는 새 버전에 실제 트래픽을 조금씩 보내며 동작을 확인해야 합니다. 이를 위해 배포 대상을 점차 늘리는 점진적 롤아웃과, 운영 중의 상태를 확인할 수 있는 관찰성이 필요합니다. 카나리 배포한 코드로 전체 트래픽의 5%를 며칠 동안 처리해 보는 일도 또 다른 형태의 코드 리뷰입니다.
머지 버튼을 누르기 전에 스스로 던져야 할 질문이 하나 늘어난 셈입니다. 이 코드를 직접 며칠이나 사용해 보았는가? 그 답이 0일이라면, 결국 그것은 다시 vibe coding입니다.