래퍼 API는 계약을 묶어두고, 뒤에 있는 모델은 그렇지 않아
AI 서비스를 CI에서 테스트할 때는 두 가지 계층을 살펴봐야 해:
- API 계층 — 요청과 응답의 형태, 상태 코드, 인증, 요청 제한을 다뤄. 전통적인 계약 테스트지.
- 모델 계층 — 의미와 행동의 정확성을 확인해. 평가 스타일의 테스트라고 볼 수 있어.
첫 번째 계층은 하위 소비자가 의존하는 부분이라 반드시 안정적이어야 해. 두 번째 계층은 합의된 범위 안에서는 변동을 허용해.
API 계약 테스트
- OpenAPI / Pydantic 스키마 — 모든 응답이 문서화된 형태에 맞는지 검증해.
- 상태 코드 매트릭스 — 빈 입력은 400, 인증 없음은 401, 요청 제한 초과는 429, 정상 경로는 200으로 떨어지는지 확인해.
- 스트리밍 프로토콜 — SSE나 WebSocket에서 이벤트 유형, 청크 구분자, 종료 이벤트를 단언해.
- 하위 호환성 — 필드가 추가될 때 기존 클라이언트 동작은 유지되어야 해. 폐기 예정 기간 없이 필드를 제거하는 건 절대 금지야.
모델 목킹
API 계약 테스트에서는 밑에 있는 모델을 목으로 대체해. 실제 모델 호출은 느리고 비싸고 비결정적이거든. 스키마에 맞는 미리 준비된 응답을 반환하는 가짜 어댑터를 주입하자. 실제 모델 동작은 평가 계층(별도 작업)에서 처리해.