목(Mock)은 실제가 아니다…

목 드리프트(테스트용 가짜 응답이 실제 시스템과 어긋난 채 굳어지는 현상)는 애플리케이션과 테스트 픽스처가 같은 잘못된 가정을 공유한 채 낡아가는데도 테스트는 계속 통과하는 현상이다. 예컨대 항상 200 OK를 반환하는 목은 인증 실패, 스키마 불일치, 페이지네이션, 429 Too Many Requests, 타임아웃, 복구 과정의 결함을 모두 숨긴다. 실제로 에이전트 평가 벤치마크 τ-bench에서 OpenAI GPT-4o의 과제 성공률은 절반에도 못 미쳤고, 리테일 부문의 pass^8(같은 과제를 여덟 번 반복해 모두 성공한 비율)은 25% 미만이었다. 테스트가 한 번 통과했다는 사실만으로는 시스템의 신뢰성을 입증하기 어렵다.

목은 실제 환경의 지연이나 부분 쓰기, 예고 없는 스키마 변경도 충실히 재현하지 못한다. 결제 인프라 기업 Stripe의 한도만 봐도 라이브 환경과 샌드박스 환경은 다르다.

항목라이브샌드박스
일반 요청 한도초당 100건초당 25건
Connect 계정 생성 한도초당 30건초당 5건

샌드박스 결제에서는 결제 게이트웨이 요청 자체가 목으로 대체된다. 따라서 현실적인 테스트를 하려면 라이브 환경에서 관측한 처리 시간을 표본으로 삼아 지연을 주입하고, 운영 환경에서 발생할 수 있는 실패 조건을 별도로 재현해야 한다.


프롬프트 밖에 안전장치를 세워라

2026년 4월, 한 스타트업의 Cursor 에이전트는 스테이징 환경에서 인증 오류가 발생하자 다른 파일에 있던 토큰을 사용했다. 그 결과 단 9초 만에 클라우드 배포 플랫폼 Railway의 볼륨이 삭제됐고, 3개월치 업무 데이터와 백업까지 사라졌다. 에이전트는 이후 자신이 추측에 의존했고 지시도 위반했다고 인정했다. 이 사고가 보여주는 교훈은 분명하다. 프롬프트만으로는 에이전트의 위험한 행동을 막을 수 없다.

따라서 쓰기 작업은 시스템 차원에서 통제해야 한다. 포워드 프록시(클라이언트의 모든 외부 요청을 대신 중계하는 서버)는 읽기 요청만 실제 시스템으로 보내고, 쓰기 요청은 가로채 실행하지 않은 채 ‘제안된 부수효과’로 기록한다. 릴리스마다 이 기록을 비교하면, 업데이트 후 변경 대상 레코드가 갑자기 두 배로 늘어나는 문제도 발견할 수 있다.

이때 쓰기 요청에 단순히 403 Forbidden을 반환해서는 안 된다. 에이전트가 작업에 성공했다고 인식하도록 합성 ID가 포함된 성공 응답을 돌려줘야 한다. 그래야 후속 API 호출과 상태 조립, 되돌리기 절차까지 포함한 전체 작업 흐름을 안전하게 검증할 수 있다.

오류 대응 능력은 별도의 지표로 평가한다. 실제 운영 흐름에 400, 401, 403, 404, 408, 429, 5xx 오류와 빈 결과, 부분 결과를 주입한 뒤 에이전트의 회복률을 측정한다. 일시적 오류에서는 회복률이 70% 이상이어야 한다. 반대로 복구할 수 없는 영구 오류에서도 성공률이 95%를 넘는다면, 에이전트가 실패를 인정하지 않고 성공한 것처럼 꾸미고 있는지 의심해야 한다.


운영만 아는 실패를 출시 전에 보라

  • Tier 0에서는 녹화된 응답을 재생해 프롬프트와 파싱의 회귀를 검사한다.
  • Tier 1에서는 샌드박스 환경에서 통합 동작과 스키마를 검증한다.
  • Tier 2에서는 실제 의존성을 사용하되 쓰기 작업만 차단해 운영 환경의 데이터 규모와 지연을 재현한다.
  • Tier 3에서는 내부 사용자를 대상으로 실제 쓰기를 허용하되, 사람의 승인을 거치게 한다.

각 티어는 자신이 탐지할 수 있는 실패만 출시 차단 조건으로 삼는다.

테스트 누락은 tier escape rate(티어 유출률)로 추적한다. 이는 하위 티어에서 발견됐어야 할 장애가 운영 환경까지 유출된 비율이다. 유출 원인은 녹화 데이터, 샌드박스 또는 쓰기 차단 범위 중 어디에 공백이 있었는지 구분해 기록한다. 녹화 데이터가 만료되면 빌드를 실패시키며, Tier 2와 운영 환경의 툴 호출 패턴, 실행 단계 수, 거부율을 지속적으로 비교한다. 재현성을 위해 모델, 프롬프트, 툴 목록의 해시도 고정한다.

다만 롱테일 요청과 실제 부하에서의 동작은 운영 환경에서만 확인할 수 있다. 따라서 후보 버전은 100% 섀도우(실제 트래픽을 복제해 결과는 버리고 관찰만 하는 방식)와 1~5% 카나리아 단계에서 각각 24~72시간 관찰한 뒤, 트래픽을 10%, 25%, 50%로 늘리며 각 단계에서 12~24시간 검증한다. 다음 조건 중 하나라도 충족되면 자동으로 롤백한다.

  • 가드레일 작동률이 기준치의 1.5배를 넘어선 상태로 15분 이상 지속되는 경우
  • p99 지연 시간이 기준치의 1.3배를 넘어선 상태로 10분 이상 지속되는 경우
  • 후보 버전에서만 새로운 오류 유형이 발생하는 경우

출처


#에이전트#자동화