컨트랙트 레이어

발행: (2025년 12월 17일 오전 07:35 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

The Contract Layer의 표지 이미지

rokoss21

상태: 정보 제공
대상: 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 시스템이 다음과 같이 진화함에 따라:

  1. 단일 프롬프트
  2. 다단계 에이전트
  3. 도구 활용 시스템
  4. 프로덕션 인프라

계약이 없던 것이 주요 실패 원인이 되었다.

계약 레이어는 혁신이 아니라 누락된 레이어이며, 다음과 유사하다:

  • 타입 시스템이 없던 스크립팅 이전의 타입 시스템
  • 원시 데이터베이스 접근 이전의 트랜잭션
  • 임시 배포 이전의 컨테이너

그 등장은 시간 문제였다.

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.

Back to Blog

관련 글

더 보기 »

FACET의 역사와 근거

이 문서의 목적 이 문서는 FACET의 설계 결정에 대한 역사적 배경, 아키텍처적 동기 및 근거를 기록합니다. 존재합니다...