
AI 에이전트에게 빌드, 배포, 테스트를 연결해 맡기면 사람이 확인하는 것은 마지막 완료 보고뿐인 경우가 많습니다. 하지만 그 보고가 무엇을 근거로 "완료"를 선언했는지 검증하지 않으면, 한 단계의 잘못된 판단이 다음 단계의 입력이 됩니다. 에이전트 기반 SDLC 루프를 실제로 구축하는 과정에서 겪은 사고가 이 문제를 잘 보여줍니다.
수정된 클라이언트 모듈을 빌드하고 배포한 뒤 관련 테스트까지 실행하는 루프를 에이전트에게 맡기던 때였습니다. 문제는 새로 빌드한 모듈을 배포 폴더로 복사하는 단계에서 발생했습니다.
[FILE COPY] exit_code=0
에이전트는 종료 코드 0을 보고 배포에 성공했다고 판단했고, 곧바로 관련 테스트를 실행했습니다. 그런데 테스트 결과는 코드 수정 전과 똑같이 실패했습니다. 에이전트는 결함이 해결되지 않았다고 판단해 제품 코드를 다시 수정하기 시작했고, 작업은 꼬여 갔습니다. 실제 배포 폴더를 확인해 보니 방금 빌드한 산출물이 아니라 이전 모듈이 그대로 남아 있었습니다.
그렇다면 exit_code=0은 무엇을 증명했을까요? 복사 프로세스가 정상적으로 종료됐다는 사실만 증명합니다. 실제 배포본이 새 파일로 교체됐다는 사실까지 증명하지는 않습니다. 에이전트는 명령의 성공을 시스템 상태 변경의 성공으로 해석했고, 이전 모듈을 대상으로 테스트를 실행한 뒤 그 결과를 새로운 코드의 실패로 받아들였습니다. 터미널 명령의 성공과 실제 시스템 상태의 변경은 별도로 검증해야 합니다.
그래서 배포 직후 원본과 실제 배포본의 SHA256 해시를 비교하도록 파이프라인을 바꿨습니다. 복사 명령이 정상 종료되더라도 두 해시가 일치할 때만 테스트 단계로 넘어갑니다.
[FILE COPY] exit_code=0
[VERIFY] build-output.sha256=7A91...C20E
[VERIFY] deployed-file.sha256=18F4...9B11
[VERDICT] FAIL: deployed file does not match build output
[NEXT] STOP: test not started
같은 exit_code=0이지만, 이번에는 루프가 테스트를 시작하지 않고 멈춥니다.
비슷한 문제는 테스트 단계에서도 발생합니다. 어느 실행에서는 테스트 결과가 PASS로 판정됐는데, 정작 이번 실행 폴더에는 반드시 생성돼야 할 테스트 결과 파일이 없었습니다. 실제 테스트 프로세스는 초반에 예외를 던지고 비정상 종료된 상태였습니다.
에이전트가 읽은 것은 공용 폴더에 남아 있던 이전 실행의 결과 파일이었습니다. 수정 시간이 가장 최근이라는 이유만으로 이번 실행의 결과라고 판단한 것입니다. 파일이 존재한다는 것과 이번 실행에서 그 파일이 생성됐다는 것은 다른 사실입니다.
SDLC 루프의 신뢰도는 태스크를 얼마나 빠르게 잇느냐가 아니라, 앞선 단계의 잘못된 판단을 다음 단계로 넘기지 않는 결정론적 구조에서 나옵니다.
완료 증거를 엄격하게 만든다고 안전한 루프가 완성되는 것은 아닙니다. 에이전트가 무엇을 실행할 수 있는지와, 무엇을 스스로 판단해도 되는지도 구분해야 합니다.
30분짜리 회귀 테스트를 돌리던 중 관리자 권한 승인 창(UAC)이 스무 번 가까이 반복해서 나타난 적이 있습니다. 사람이 계속 확인 버튼을 눌러야 하니 자동화라고 부르기 어려운 상태였습니다.

반복 승인을 없애기 위해 관리자 권한으로 실행 중인 터미널에 명령을 전달하는 권한 상승 브로커를 만들었습니다. 승인 창은 사라졌고 회귀 테스트는 사람의 개입 없이 계속 진행됐습니다.
그러나 얼마 뒤 개발 PC가 예고 없이 재부팅됐습니다. 회귀 테스트 목록에 원래부터 들어 있던 프로그램 제거 절차가 승인 창에 막히지 않고 끝까지 실행되면서 재부팅까지 이어진 것입니다.
에이전트가 임의로 끼워 넣은 작업도 아니었습니다. 문서에 적힌 절차를 그대로 수행했을 뿐입니다. 실행 권한을 열어 주는 것과 판단까지 위임하는 것은 다른 문제입니다.
에이전트는 오늘 입사한 천재 신입 엔지니어와 비슷합니다. 모든 일을 물어보게 하면 사람은 하루 종일 승인만 하게 됩니다. 반대로 아무것도 묻지 않게 하면 잘못된 판단도 사람보다 훨씬 빠른 속도로 실행됩니다. 그래서 루프에는 실행 절차뿐 아니라 중단 조건과 승인 경계가 필요합니다.
exit_code=0도, 화면에 찍힌 PASS도 완료 그 자체가 아닙니다. 실제 산출물이 바뀌었는지, 그 증거를 믿을 수 있는지 확인하고, 판단의 경계를 넘으면 루프가 멈춰야 합니다. 좋은 AI 루프는 끝까지 달리는 루프가 아니라, 증거가 없으면 멈추는 루프입니다.

위 컨텐츠는 신상윤 저자의
『AI 루프를 설계하라』를 재구성하여 작성되었습니다.
최신 콘텐츠