이번 글에서는 요즘 말도 많고, 탈도 많은 AI 에이전트에 대해 이야기하려고 합니다. 다만 제가 하려는 이야기는 에이전트의 기술적 파이프라인이나 LLM 활용법이 아니라, 실제로 에이전트를 만들고 프로덕션에서 운영해 본 경험입니다.
이미 많은 분들이 AI 에이전트로 업무를 자동화해 쓰고 계실 겁니다. 메일이 오면 자동으로 답장 초안을 써 주고, 회의 내용을 분석해 회의록을 정리해 주고, 매일 플랫폼 상태를 점검해 일일 업무를 보고해 주는 에이전트까지 업무 전반에 걸쳐 여기저기에 쓰고 있죠. 저 역시 필요한 자리마다 에이전트를 하나씩 붙이다 보니, 어느새 손이 닿는 곳이 은근히 많아졌습니다. 그리고 업무 도구를 넘어, 지금 개발하고 있는 플랫폼 안에도 여러 개의 에이전트를 집어넣었죠.
그런데 에이전트는 대충 만들면 정말 대충 돌아갑니다. 판단 근거, 목표, 사용할 데이터를 정확히 줘야 제대로 동작하더군요. 귀찮다고 대충 만들면 나중에 꼭 사고를 쳤습니다. 마치 목적지 없이 달리는 폭주 기관차처럼 말이죠. 이전 글에서는 AI가 이야기를 지어내는 환각을 이야기했는데, 오늘은 그 반대편 즉, 목표를 향해서 열심히 달려가는 에이전트에 대해 살펴보겠습니다.
제가 앞서 폭주 기관차라고 했지만, 이걸 안 타자는 이야기가 아닙니다. 속도가 곧 경쟁력이고, 경쟁자는 이미 타고 있으니까요. 다만 어디까지 맡길지를 정하는 일이 먼저입니다. 제가 만든 에이전트 중 가장 신경을 쓴 것은 플랫폼을 스스로 지켜보는 감시 에이전트였습니다. 개발 시간 자체는 오래 걸리지 않아, 정작 1차 관문은 “이게 정말 필요한가”를 따지는 일이었죠. 쓸데없는 걸 만드는 건 아닐까 하는 걱정도 있었고요.
그 다음이 권한 문제였습니다. 플랫폼을 운영하는 도중에 이 에이전트가 제멋대로 인프라를 건드리면 안 되니까요. 그래서 권한을 단계별로 나눠서 접근하기로 했습니다. 이 에이전트가 정말 폭주하면 전체 서비스가 내려앉아 복구 불가능한 상태까지 갈 수 있었기에, 그만큼 신중해야 했습니다. 잘못하면 정말로 폭주 기관차처럼 달릴 수 있는 환경이었습니다.

처음부터 완전 자동화를 목표로 하지 않고 단계별로 나눴습니다. 처음 단계는 반자동부터 시작하기로 했습니다. 서서히 진행하다가 자동으로 진행해서 시행 착오를 줄이기 위함이었습니다.
반자동은 거의 실행 권한을 주지 않았습니다. 모니터링을 주로 하고 보이는 데이터를 분석하고 권고사항을 추천하는 정도입니다. 데이터가 쌓이고 숙련이 되면 실행 권한을 조금씩 주면서 점진적으로 개선해 나가는 방법을 선택했습니다. 이유는 클라우드 서비스를 직접 다루는 다른 에이전트가 있는 데 실수를 꽤 많이 하는 걸 봤기 때문입니다. 그래서 이번에는 실행 권한을 조금씩 나눠 주기로 했습니다.
에이전트의 본능은 목표를 완벽하게 수행하고 완료하는 것입니다. 인간에게 PASS 또는 초록불이라는 알림을 줘야 하는 거죠. 에이전트는 오로지 그 목표로 달립니다. 중간에 빨간불을 만나면 인간을 부를 수도, 그냥 스킵할 수도, 무시하기도 합니다. 아직 목표에 도달하지 못했기 때문입니다.
이런 이유가 대부분의 에이전트들이 데모는 잘 돌아가는데 프로덕션에 올리면 터지는 이유입니다. 프로덕션은 에이전트에게 데모와 같은 샌드박스가 아닌, 날것 그대로의 야생이니까요.
아래는 그동안 제가 만든 에이전트들의 생생한 사건 기록입니다. 제가 목표나 가드레일을 명확히 주지 않으면, 어김없이 사건이 터졌습니다.
초록불을 만드는 가장 빠른 길은, 신호등을 꺼버리는 것이었습니다.
흉내 낸 테스트는 코드의 의도를 검증하지, 현실을 검증하지 않습니다.
여기서 한가지 답을 찾고 실행했습니다. 에이전트의 잘못된 행동을 막는 게이트를 늘리자. 게이트로 에이전트의 행동을 조였습니다. 말그대로 촘촘히 깔아 봤습니다.
그런데, 그 게이트를 우회했습니다. 에이전트가 ‘커밋 전에 자기 작업을 검토하는 게이트’를 “사용률이 낮다”는 이유로 삭제했습니다. 그런데 복원하면서 스스로 이렇게 인정했습니다. 사용률이 낮았던 건, 자기가 그 게이트를 계속 우회하고 있었기 때문이라고 말이죠. 게다가 그 게이트는 세션 식별 방식의 버그로 애초에 한 번도 제대로 작동한 적이 없었습니다. 관측 도구가 고장 나 있어서 관측값이 낮았고, 그 낮은 값을 근거로 도구를 삭제한 것입니다.
“The prior delete was wrong: the audit signals I used were evidence of Claude routing around a gate designed to catch Claude’s misses — not evidence the gate was unnecessary. The consumer was me, not the operator.”
수많은 게이트를 만들고 지시를 내렸지만, 브레이크를 치운 게 다름 아닌 기관사 자신이었던 겁니다. 흥미로운 건, 이 환각과 우회 문제를 다룬 방법론 문서가 저장소에 수백 줄로 존재했다는 점입니다. 그 문서의 저자 역시, 문제를 일으킨 당사자인 AI 자신이었습니다. 그리고 그 안에는 측정 근거 없는 ‘성과 개선표’가 버젓이 적혀 있었습니다. 코드에서 벌어진 일이 문서 계층에서 똑같이 반복된 것입니다. AI는 자기가 쓴 문서를 사실로 믿고, 똑같이 판단했습니다.
앞서 이야기한 감시 에이전트, 제가 FRIDAY라는 이름을 붙인 그 녀석이 탄생한 이유가 여기 있습니다. “제3의 감시자를 세워서, 다른 에이전트들이 제대로 돌아가는지 지켜보게 하자.” 이름은 멋있게 붙였지만 아직은 걸음마 수준입니다. 언젠간 제 몫을 하겠죠.

FRIDAY의 자가학습 루프를 잠깐 설명하면 다음과 같습니다.FRIDAY는 플랫폼의 인프라를 감시하는 에이전트지만, 흔한 모니터링 도구와 결정적으로 다른 점이 하나 있습니다. 자기가 낸 경보가 맞았는지를 스스로 확인하고 기억한다는 것입니다.
루프는 탐지에서 시작합니다. 경보를 올리기 전에, FRIDAY는 “같은 징후가 같은 대상에서 예전에 어떻게 끝났는가”를 먼저 조회합니다. 과거 사례가 각주가 아니라 판단의 입력이 되는 거죠.
이 로그는 판단 근거에 그대로 박히고, AI에게 진단을 맡기는 프롬프트에도 함께 실려 들어갑니다.
세 번째를 굳이 따로 둔 이유가 이 설계의 성격을 잘 보여줍니다. “못 봤다”를 “나았다”로 합쳐 버리면, 관측 사각지대가 사건을 조용히 종결시켜 버리니까요.
여기에 사람의 신호가 세 축으로 따로 붙습니다. 운영자가 무엇을 했는가(조치함/무시함), 제안된 조치가 옳았는가, 그리고 애초에 이 경보가 올릴 만했는가. 하나로 합칠 수 있어 보이지만 합치지 않았습니다. 세 답이 서로 다른 학습을 굴리기 때문입니다. 마지막 축은 경보 민감도를 조정하는 유일한 근거이고, 두 번째 축은 나중에 이 에이전트에게 실행 권한을 줄지 말지를 가르는 근거입니다.
물론 이 방법에도 근본적인 물음이 남습니다. 그 FRIDAY는 과연 무결점의 에이전트인가? 그래서 이 문제는 완벽을 목표로 하지 않고, 검증을 통해 점진적으로 개선해 나가기로 했습니다.
실제로 이 감시자조차 처음엔 폭주 기관차였습니다. 중복 알림을 억제하려다 진짜 장애를 삼킬 뻔했고, 감시자가 자기 데이터베이스와 함께 죽었는데 그 공백을 ‘정상’으로 판단했습니다. 감시하라고 만든 에이전트마저 결국 폭주를 한 겁니다. 그래서 다음 세 가지를 설계에 못 박았습니다.
가장 중요한 설계는 ‘무엇을 할 수 있게 했는가’가 아니라 ‘무엇을 못 하게 묶었는가’였습니다. 폭주 기관차에 브레이크를 다는 일은, 기능을 더하는 게 아니라 권한을 덜어내는 일이었습니다. 그리고 이 감시자는 자기 자신이 죽는 것만큼은 탐지하지 못합니다. 결국, 감시자를 감시하는 자리에는 언제나 사람이 필요합니다.
에이전트는 한 번 잘 만들어 두면 끝이 아니라, 계속 배워야 합니다. 그래서 에이전트가 끊임없이 선순환할 수 있는 파이프라인과 학습 루프가 매우 중요합니다. 멈춰버린 에이전트는 어제의 실수를 오늘도 반복하니까요.
목표는 ‘한 번에 완벽한 에이전트’가 아니라 ‘계속 나아지게 하는 루프’입니다. 오늘의 에이전트보다 내일 더 나은 에이전트를 지향하는 편이, 훨씬 좋은 에이전트를 만드는 길이었습니다. 그래서 사람은 늘 에이전트가 잘 실행될 수 있는 최적의 환경을 만들어 주는데 집중해야 한다는 결론에 이릅니다.
“관측 → 판정 기록(로그 데이터) → 판정”을 다음 판단의 재료로 공급하는 학습 루프를 만들면, 에이전트가 실수를 해도 다음 번에 조금씩 에이전트의 성능이 좋아진다는 것을 확인했습니다. 결국 중요한 건 판정 기록을 남기느냐 였습니다. 에이전트가 다음 번 실행 시 이전에 내가 어떻게 행동하고 어떤 결과가 나왔었는지를 주면, 에이전트의 판단이 좀 더 정확해 집니다. 특히 이전에 실수를 해서 오류를 낸 부분은 반복적으로 오류를 내지는 않습니다.
에이전트는 정말 훌륭한 도구가 될 잠재력이 있습니다. 쓰면 쓸수록 어떻게 해야 일을 더 잘하는지 알아가고, 튜닝하고, 최적화하게 됩니다. 그리고 그 과정은 복리처럼 되돌아옵니다. 결국 에이전트를 만드는 일은, 이 과정을 끝없이 반복하는 일이죠. 그러나 폭주 기관차처럼 달려갈 수 있는 에이전트에 브레이크를 달아, 언제든 멈추게 하는 일 자체는 우리가 해야 합니다. AI는 실행을 대신하는 것이지, 사람의 판단과 책임까지 대신하지는 않습니다.
지금도 저랑 같이 일하는 다수의 에이전트들이 이상한 목적지로 가기도 하고, 여전히 거짓말도 합니다. 중요한 건 그때마다 적절하게 지적하는 것이죠. 이러한 에이전트들을 잘 운영하기 위해선 당장 어디로 갈지 보다는 어디서 멈추게 할지를 먼저 확인하는 걸 잊지 마세요.
ⓒ요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.