대부분의 엔지니어링 팀은 배포 체크리스트를 갖고 있다. 환경 변수, 데이터베이스 마이그레이션, 롤백 절차, API 스모크 테스트가 포함된다. 그 체크리스트는 소프트웨어에는 맞다. AI 파이프라인에는 불완전하다.
아래 여섯 항목은 표준 체크리스트에 없다. 각 항목은 특정 장애 유형에 대응한다. 각 장애 유형은 기존 프로세스로 충분하다고 가정했던 팀에서 실제 프로덕션 인시던트를 일으킨 바 있다.
AI에 특화된 6가지 체크리스트 항목
1. 프롬프트 버전 고정
방지하는 것: 환경 간 프롬프트 드리프트.
프롬프트는 코드다. 버전 해시나 태그 릴리스에 고정되지 않으면, 스테이징의 변경 사항이 일상적인 배포 중에 프로덕션으로 조용히 전파될 수 있다. 장애 유형: 출력 형식이 스키마 업데이트 없이 변경되고, 다운스트림 파서가 깨지며, 오류는 실제 원인에서 세 단계 떨어진 곳에서 나타난다.
체크리스트 항목: 프로덕션의 프롬프트 버전 해시가 스테이징에서 테스트한 버전과 일치하는지 확인한다. 다르면 배포를 실패 처리한다.
2. 리트리벌 스모크 테스트
방지하는 것: 인덱스 수준의 조용한 리트리벌 실패.
리트리벌 시스템은 올바른 결과 없이도 결과를 반환할 수 있다. 벡터 인덱스가 스키마 변경, 임베딩 차원 불일치, 또는 오래된 문서 세트로 재구축된 경우, 쿼리는 처리되지만 답변은 틀린다. 장애 유형: 시스템은 정상으로 보이지만, 누군가 알아채기까지 48시간 동안 사용자는 자신 있게 틀린 답변을 받는다.
체크리스트 항목: 트래픽이 활성화되기 전에 프로덕션 인덱스에 알려진 답변이 있는 쿼리 세 개를 실행한다. 예상 문서 ID에 대해 정확 일치 또는 임계값 일치를 요구한다. 이전 포스트에서 다룬 리트리벌 회귀 프로브와는 다르다 — 이것은 트래픽 전 게이트이지 회귀 스위트가 아니다.
3. 폴백 경로 검증
방지하는 것: 기본 모델 또는 리트리벌 레이어가 사용 불가능할 때의 조용한 실패.
모든 AI 파이프라인에는 폴백이 있어야 한다: 더 단순한 모델, 캐시된 응답, 또는 우아한 저하 메시지. 이를 건너뛸 때의 장애 유형: 기본 경로가 다운되고, 폴백은 프로덕션에서 한 번도 실행된 적이 없으며, 폴백 경로에 잘못 구성된 API 키가 있거나 타임아웃이 20초 대신 2초로 설정되어 있다는 것이 드러난다.
체크리스트 항목: 기본 트래픽을 활성화하기 전에 프로덕션에서 폴백 경로를 수동으로 트리거한다. 허용 가능한 레이턴시 내에 유효한 응답을 반환하는지 확인한다.
4. 출력 스키마 검증
방지하는 것: 잘못된 형식의 모델 출력이 다운스트림 소비자를 깨뜨리는 것.
모델은 항상 예상한 것을 반환하지 않는다. JSON 필드가 누락된다. 문자열 필드가 정수를 반환한다. 장애 유형: 모델 출력을 소비하는 다운스트림 서비스가 처리되지 않은 예외를 던지고, 오류는 AI 출력 오류가 아닌 일반 500으로 기록되어 추적이 어렵다.
체크리스트 항목: 프로덕션에서 다섯 개의 표준 입력에 대해 모델을 실행하고, 라이브 트래픽을 라우팅하기 전에 선언된 스키마에 대해 출력을 검증한다. 관대한 검증기가 아닌 엄격한 검증기를 사용한다.
5. 신뢰도 임계값 확인
방지하는 것: 가드 없이 낮은 신뢰도 출력이 사용자에게 도달하는 것.
대부분의 파이프라인은 개발 중에 신뢰도 임계값을 설정하고 배포 후에도 유지되는지 확인하지 않는다. 환경 차이, 모델 버전 변경, 또는 인덱스 업데이트가 점수 분포를 바꿀 수 있다. 장애 유형: 스테이징에서 출력의 15%를 필터링하던 임계값이 프로덕션에서는 2%만 필터링하여, 의도보다 높은 비율로 저품질 응답이 사용자에게 도달한다.
체크리스트 항목: 배포 직후 프로덕션 요청 20개를 샘플링한다. 신뢰도 점수 분포가 허용 가능한 허용 오차 내에서 스테이징의 예상 범위와 일치하는지 확인한다.
6. 알림 라우팅 확인
방지하는 것: AI에 특화된 오류가 잘못된 팀이나 아무 팀에도 라우팅되지 않아 감지되지 않는 것.
AI 파이프라인은 표준 애플리케이션 모니터링이 올바르게 분류하지 못하는 실패 신호를 생성한다. 리트리벌 미스, 토큰 한도 초과, 모델 타임아웃 오류는 종종 일반 오류 버킷에 들어간다. 장애 유형: AI에 특화된 저하가 몇 시간 동안 실행되는데 알림이 발생하지 않거나, 아무도 보지 않는 큐에 알림이 발생한다.
체크리스트 항목: AI에 특화된 오류 클래스 — 리트리벌 실패, 스키마 검증 실패, 신뢰도 임계값 위반, 모델 타임아웃 — 각각에 지정된 담당자와 테스트된 알림 경로가 있는지 확인한다. 서비스 시작 전에 테스트 알림을 전송한다.
기존 CI/CD 파이프라인에 통합하기
이 항목들 중 어느 것도 새로운 도구를 필요로 하지 않는다. 새로운 단계가 필요할 뿐이다.
기존 파이프라인에 배포 후 검증 단계를 추가한다. 이 단계는 인프라가 활성화된 후, 트래픽이 활성화되기 전에 실행된다. 위의 여섯 가지 검사를 스크립트 또는 테스트 케이스로 실행한다. 검사 중 하나라도 실패하면 파이프라인이 중단되고 롤백된다.
구현 패턴:
- 프롬프트 버전 고정: 셸 스크립트의 한 줄 해시 비교.
- 리트리벌 스모크 테스트: 라이브 인덱스를 쿼리하고 문서 ID를 어설트하는 Python 스크립트.
- 폴백 경로 검증: 타임아웃 어설션이 있는 폴백 엔드포인트에 대한 HTTP 호출.
- 출력 스키마 검증: 라이브 모델 출력에 대해 실행되는 JSON 스키마 검증기.
- 신뢰도 임계값 확인: 점수 분포를 기록하고 허용 오차를 벗어나면 실패하는 샘플링 스크립트.
- 알림 라우팅 확인: 수동 확인 단계와 함께 알림 시스템에 발생시키는 테스트 이벤트.
추가되는 총 파이프라인 시간: 모델 레이턴시에 따라 3~8분. 첫 번째 프로덕션 인시던트를 일으키는 장애 유형을 잡기 위한 합리적인 트레이드오프다.
이 단계를 건너뛰는 팀은 논리에 동의하지 않아서 건너뛰는 것이 아니다. 첫 번째 배포 전에 아무도 체크리스트를 작성하지 않았기 때문에 건너뛴다. 첫 번째 배포 전에 작성하라.