컨트랙트 레이어
Source: Dev.to

상태: 정보 제공
대상: AI 시스템 설계자, 프레임워크 유지보수자, 플랫폼 엔지니어
범위: LLM 기반 시스템을 위한 결정론적 계약
1. 계약 레이어란?
계약 레이어는 AI 시스템에서 모델 실행이 발생하기 전에 무엇이 허용되는지 정의하는 아키텍처 레이어입니다.
이것은 아님:
- 프롬프트
- 검증기
- 재시도 메커니즘
- 프레임워크‑특정 추상화
계약 레이어 임:
사전 실행 제약의 집합으로, 잘못된 상태를 표현할 수 없게 만듭니다.
전통적인 소프트웨어 시스템에서는 계약이 다음을 통해 암묵적으로 존재합니다:
- 타입 시스템
- 함수 시그니처
- 메모리 모델
- 실행 순서 보장
LLM 시스템은 역사적으로 이 레이어 없이 제공되어 왔습니다.
2. 계약 레이어가 위치하는 곳
A contract layer sits between orchestration logic and model execution.
Application Logic
|
v
[ Contract Layer ]
|
v
LLM / Tool Runtime
Anything that crosses this boundary must already be valid.
If it is not valid:
- execution must not start
- no retries should occur
- no partial state should leak downstream
This mirrors how compilers reject invalid programs before execution.
Source:
3. 계약 레이어가 관리하는 것
적절한 계약 레이어는 다섯 개의 구별된 영역을 관리합니다.
3.1 타입
- 어떤 값이 존재할 수 있는가
- 어떤 형태(shape)가 허용되는가
- 어떤 제약이 적용되는가 (범위, 열거형, 포맷)
타입이 없으면:
- 도구 호출이 느슨하게 구조화된 JSON으로 전락한다
- 제공자가 스키마를 다르게 해석한다
- 검증이 예방이 아니라 반응적으로 된다
3.2 인터페이스 (도구 계약)
인터페이스는 정의합니다:
- 어떤 도구가 존재하는가
- 어떻게 호출되는가
- 무엇을 반환하는가
계약 레이어는 도구 인터페이스를 문서가 아니라 강제 경계로 취급합니다.
위반 사례에는 다음이 포함됩니다:
- 도구 이름 누락
- 대소문자 오류
- 필수 필드 누락
- 잘못된 직렬화 포맷
도구 호출이 인터페이스를 위반하면 실행 전에 거부되어야 합니다.
3.3 실행 순서
LLM 시스템은 암묵적으로 다음에 의존합니다:
- 메시지 순서 규칙
- 제공자별 턴 제약
- 스트리밍 vs. 비스트리밍 차이
계약 레이어는 실행 순서를 명시적으로 만들어 다음을 방지합니다:
- 잘못된 턴 시퀀스 (예: Gemini
INVALID_ARGUMENT오류) - 모호한 도구 호출 위치
- 동기와 스트림 모드 간 상태 드리프트
3.4 컨텍스트를 자원으로 보기
컨텍스트는 텍스트가 아니라 제한된 자원입니다.
계약 레이어는 정의해야 합니다:
- 어떤 섹션이 핵심인지
- 어떤 섹션을 축소할 수 있는지
- 어떤 섹션을 삭제할 수 있는지
- 어떤 순서로 고려되는지
이는 다음을 대체합니다:
- 임시적인 잘라내기
- 휴리스틱 재시도
- “희망 기반” 컨텍스트 관리
3.5 정규 출력
계약 레이어는 시스템 상태의 정규 표현을 정의합니다:
- 정규 JSON
- 안정적인 정렬
- 결정적인 레이아웃
이를 통해 가능해지는 것:
- 재현 가능한 실행
- 캐싱
- 차이점 비교 (diff)
- 재실행 (replay)
- 감사
정규화가 없으면 시스템을 신뢰성 있게 추론할 수 없습니다.
4. 계약 레이어가 아닌 것
계약 레이어는 명시적으로 아님:
- ❌ 프롬프트 엔지니어링
- ❌ 생성 후 출력 검증
- ❌ 재시도 로직
- ❌ 모델‑특화 해킹
- ❌ 프레임워크 접착 코드
그것들은 계약의 부재에 대한 보완책이다.
5. 시스템의 속성으로서 결정론
핵심 원칙: 결정론은 모델의 속성이 아니라 주변 시스템의 속성이다.
LLM은 본질적으로 확률적이다. 계약 레이어는 이를 변경하려고 하지 않는다. 대신, 확률적 구성 요소가 결정론적 경계 내에서 작동하도록 보장한다:
- 잘못된 출력은 구조적으로 소비가 불가능하도록 한다
이는 다음과 같은 분야에서 사용되는 접근 방식과 유사합니다:
- 운영 체제
- 데이터베이스
- 컴파일러
- 분산 시스템
6. 계약 레이어가 없는 경우의 실패
계약 레이어가 없는 시스템은 필연적으로 다음을 축적하게 됩니다:
- 재시도
- 폴백
- 검증기
- 제공자‑특정 조건문
- 문서화되지 않은 불변 조건
시간이 지나면서 시스템은 다음과 같이 됩니다:
- 취약함
- 재현 불가능함
- 디버깅 비용이 많이 듦
- 형식적으로 논리적 추론이 불가능함
이는 도구 문제가 아니라—아키텍처상의 누락입니다.
7. FACET와 계약 레이어
FACET는 다음을 결합하여 계약 레이어를 형식화합니다:
- 엄격한 타입 시스템 (FTS)
- 명시적 인터페이스 (
@interface) - 결정론적 실행 단계
- 반응형 의존성 그래프 (R‑DAG)
- 형식적인 컨텍스트 할당 알고리즘 (Token Box Model)
- 표준 JSON 렌더링
FACET는 계약 레이어의 하나의 구현이며, 이 개념 자체는 단일 도구보다 더 넓은 범위를 포괄합니다.
8. 계약 레이어가 불가피했던 이유
LLM 시스템이 다음과 같이 진화함에 따라:
- 단일 프롬프트
- 다단계 에이전트
- 도구 활용 시스템
- 프로덕션 인프라
계약이 없던 것이 주요 실패 원인이 되었다.
계약 레이어는 혁신이 아니라 누락된 레이어이며, 다음과 유사하다:
- 타입 시스템이 없던 스크립팅 이전의 타입 시스템
- 원시 데이터베이스 접근 이전의 트랜잭션
- 임시 배포 이전의 컨테이너
그 등장은 시간 문제였다.
9. 장기적 함의
뒤돌아보면, 계약 레이어가 없는 AI 시스템은 불완전하게 보일 것이다. 미래 시스템은 다음을 전제로 할 것이다:
- 타입된 도구
- 결정론적 컨텍스트 패킹
- 정규 실행
- 재현 가능한 동작
기본 신뢰성
문제는 이제 계약 계층이 존재하는지가 아니라 — 얼마나 명시적으로 정의되는지입니다.
10. Summary
A contract layer:
- makes invalid states unrepresentable
- shifts failure from runtime to compile‑time
- restores engineering discipline to AI systems
- enables scale without chaos
It is not optional for reliable AI.
It is foundational.
