"The model is reliable" 발언은 작성자인 모델의 능력에 대한 주장일 뿐, 그 모델이 내놓은 결과물 자체가 불변성을 유지하고 있다는 증거가 되지 못한다. 저자는 AI가 생성한 코드의 신뢰성을 모델의 지능(Capability)에 맡기는 현재의 방식이 생산 환경에서는 매우 위험하다고 지적한다. 특히 멀티테넌시 환경의 접근 제어 같은 핵심 보안 규칙이 프롬프트나 체크리스트 같은 '행동 게이트'에 머물러 있어, 모델이 이를 망각하는 순간 치명적인 버그가 발생하기 때문이다.

이러한 한계를 극복하기 위해 저자는 모델의 지능을 높이는 것보다, 모델이 작성하는 기반 환경(Substrate)에 강력한 제약을 거는 '구조적 배압(Structural Backpressure)'의 필요성을 제안한다. 이는 모델에게 "보안을 잊지 마라"고 반복해서 요청하는 대신, 규칙을 어긴 코드는 아예 컴파일되지 않도록 만드는 결정론적 거부 표면을 구축하는 전략이다. 결국 AI 코딩 루프의 핵심은 더 똑똑한 모델을 기다리는 것이 아니라, 잘못된 경로로 진입하는 것을 구조적으로 불가능하게 만드는 설계에 있다.

Shen-Backpressure: 명세 기반의 가드 타입 생성 도구

개발자가 AI 코딩 루프에서 가장 먼저 체감하는 한계는 제어권의 부재다. 프롬프트에 아무리 세밀한 제약 조건을 적어도 모델이 수만 줄의 코드를 작성하는 과정에서 불변성(invariant, 프로그램 실행 중 항상 참이어야 하는 조건)을 놓치는 사례가 빈번하게 관찰된다. Shen-Backpressure는 이러한 행동 기반의 제어를 구조적 제어로 전환하는 체계다. 핵심은 시퀀트 계산(sequent-calculus, 논리적 추론을 위한 형식 체계) 타입 시스템을 갖춘 정적 타입 Lisp 언어인 Shen(션)을 사용하는 것이다. 사용자가 Shen으로 명세를 작성하면 코드 생성기인 shengen(션젠)이 이를 타겟 언어의 가드 타입(guard type, 특정 조건을 만족해야만 생성 가능한 타입)으로 변환한다. 이는 모델에게 지침을 주는 방식이 아니라, 모델이 작성하는 코드의 기저(substrate) 자체에 결정론적 제약을 심어 불변성을 강제하는 방식이다.

이 도구 체계는 기본적으로 Go와 TypeScript를 주 타겟으로 지원하며, Python과 Rust에 대해서는 레퍼런스 이미터(reference emitter, 코드 생성 참조 구현체)를 제공하여 확장성을 확보했다. 모델이 코드를 작성할 때 단순히 지침을 따르는 것이 아니라, 컴파일러가 거부하는 구조적 벽에 부딪히게 만드는 것이 목적이다. 예를 들어 Go에서는 필드를 비공개로 설정하고 오직 검증된 생성자를 통해서만 값을 할당하게 함으로써, 권한 확인 절차를 누락한 채 객체를 생성하려는 시도를 빌드 단계에서 즉각 차단한다. 이러한 구조적 게이트는 모델의 지능에 의존하는 대신 기계적인 거부(refusal)를 통해 피드백을 전달하며, 이 과정에서 발생하는 오류가 다음 루프의 컨텍스트로 유입되는 백프레셔(backpressure) 효과를 생성한다.

실무 환경에 이 체계를 도입하기 위해서는 전용 CLI 도구인 sb를 설치하고 프로젝트 초기화 과정을 거쳐야 한다.

bash
sb init

위 명령어로 기본 명세와 게이트 스크립트를 생성하며, Shen 런타임 환경을 구축하기 위해 다음과 같은 설치 과정이 수반된다.

bash
brew tap Shen-Language/homebrew-shen && brew install shen-sbcl

운영의 핵심은 sb.toml 파일에 있다. 이 매니페스트 파일은 AI 코딩 루프가 반복될 때마다 실행될 고정 게이트 세트를 선언하여, 각 반복 회차에서 반드시 통과해야 할 검증 항목을 정의하는 역할을 수행한다. 또한 RALPH_HARNESS(랄프 하네스, 외부 AI 에이전트 연결 설정)라는 환경 변수를 통해 Claude Code(클로드 코드)를 기본으로 하여 Cursor(커서)나 Codex(코덱스) 같은 외부 하네스 설정을 유연하게 변경할 수 있도록 설계되어 다양한 개발 환경과의 통합을 지원한다.

행동 게이트에서 구조적 게이트로: 불변성 강제 메커니즘

개발자가 AI에게 '권한 검증을 잊지 마라'고 프롬프트에 적는 행위는 전형적인 행동 게이트(Behavioral Gate) 방식이다. 이는 모델의 기억력과 코드 리뷰어의 주의력에 전적으로 의존하는 구조로, 모델이 로컬 컨텍스트의 강한 영향력을 이겨내고 규칙을 기억해야만 작동하는 불안정한 체계다. 반면 구조적 게이트(Structural Gate)는 컴파일러나 타입 체커, 린터처럼 구체적인 거부(Refusal) 답을 내놓는 결정론적 장치를 의미한다. 지시사항을 토큰 형태로 전달하여 모델이 준수하기를 바라는 대신, 모델이 작성하는 코드의 기저 substrate(기질) 자체에 제약을 심어 오류가 발생하면 기계적으로 거부하는 방식이다. 이러한 전환은 제어의 주체를 모델의 지능에서 시스템의 구조로 옮김으로써 불변성(Invariant)을 강제하는 효과를 낸다.

실제 구현 단계에서 Go 언어는 필드를 비공개(unexported)로 설정하고 생성자(Constructor)를 통해서만 값을 할당하게 하여 캡슐화를 강제하는 방식을 취한다. 외부 패키지에서 임의로 `TenantAccess{isMember: true}`와 같은 값을 생성하는 것을 언어 수준에서 차단하고, 오직 검증 로직이 포함된 생성자를 통과해야만 유효한 객체를 얻게 만드는 것이다. 이를 통해 `jwt-token`에서 시작해 `authenticated-user`, `tenant-access`, 그리고 최종적으로 `resource-access`로 이어지는 엄격한 인증 체인 흐름을 구축한다. 각 단계의 타입은 이전 단계의 증명이 완료되었음을 나타내는 증거(Witness)가 되며, 이 체인을 건너뛰려는 시도는 컴파일 단계에서 즉각적으로 차단된다. 이는 개발자가 모든 엔드포인트에 `if` 문을 일일이 추가하던 관행적인 방식보다 훨씬 강력한 안전장치가 된다.

여기서 핵심은 게이트 실패 시 발생하는 기계적인 거부 신호가 다음 프롬프트의 구체적인 컨텍스트로 피드백되는 배압(Backpressure) 원리다. 모델이 구조적 제약을 위반한 코드를 생성하면, 시스템은 추상적인 오류 메시지가 아니라 컴파일러의 타입 오류나 게이트의 거부 신호라는 결정론적인 피드백을 반환한다. 이 신호는 모델에게 단순한 재시도 요청보다 훨씬 명확한 가이드라인을 제공하며, 루프가 반복될수록 결과물은 구조적 제약을 만족하는 방향으로 수렴하게 된다. 결국 프롬프트에 수많은 제약 조건을 나열하며 모델의 지능에 호소하는 대신, 잘못된 경로를 구조적으로 가기 어렵게 만드는 환경을 구축하는 것이 핵심이다. 이러한 메커니즘은 모델의 성능 향상과는 별개로, 생성된 결과물이 설계 의도대로 작동한다는 확신을 주는 실무적인 장치가 된다.

모델 지능보다 중요한 '구조적 배압', 실무 도입의 가치

개발자가 바로 체감하는 변화는 응답 속도보다 제어권이다. 생산 환경의 소프트웨어에서는 에이전트 지능의 점진적 개선보다 구조적 배압(Structural Backpressure)을 구축하는 것이 더 효과적이라는 가설이 관찰된다. 기존의 다중 테넌트 핸들러 작성 방식은 모든 엔드포인트에 if문을 배치해 접근 제어를 수행하는 형태였다. 하지만 이러한 패턴은 핸들러 개수가 늘어나거나 리팩토링이 반복될 때 누락될 가능성이 매우 높으며, 특히 AI가 코드를 생성하는 과정에서 이러한 반복적 제어 로직이 생략되는 문제가 빈번하게 발생한다. 프롬프트에 인증의 중요성을 강조하거나 시스템 지침에 규칙을 추가하는 방식은 모델의 기억력과 리뷰어의 주의력에 의존하는 행동적 게이트에 불과하며, 이는 전체 시스템의 안정성을 저해하는 요소로 작용한다.

반면 구조적 게이트는 컴파일러나 타입 체커처럼 코드 자체에 대해 결정론적인 거부 신호를 보낸다. 명세서에 정의된 불변량을 타겟 언어의 가드 타입(Guard Type)으로 투영하면, 모델은 단순히 지시사항을 따르는 것이 아니라 컴파일을 통과하기 위해 강제로 해당 제약 조건을 충족해야 하는 상황에 놓인다. 이는 AI 생성 코드의 검증 비용을 획기적으로 낮추는 실무적 이점을 제공한다. 신뢰의 근거 또한 주관적 영역에서 객관적 영역으로 이동한다. 단순히 능력 있는 모델을 사용했다는 주장은 검증 불가능한 신뢰에 가깝지만, 명세서와 통과된 게이트, 그리고 green CI라는 객관적 증거는 기술적 확실성을 제공한다. 이러한 접근은 특히 규제 대응이나 보안 감사가 필수적인 엔터프라이즈 환경에서 AI 생성 코드를 실제 프로덕션에 배포하기 위한 필수적인 정당성 확보 기제로 제안된다.

물론 기술적 한계는 존재한다. 타겟 언어가 제공하는 캡슐화 수준에 따라 리플렉션이나 제로 값 등을 통한 우회 가능성이 있으며, 명세 자체에 설계 오류가 있을 경우 잘못된 제약이 강제될 위험이 있다. 하지만 이러한 한계가 구조적 배압의 실무적 가치를 훼손하지는 않는다. 오히려 모델의 지능이 향상될수록 복잡한 명세를 작성하고 이를 타겟 언어로 변환하는 에미터(Emitter)를 구축하는 비용이 낮아지기 때문에, 구조적 게이트를 도입할 경제적 명분은 더욱 커진다. 결국 모델 성능의 향상은 모델에 대한 맹목적 의존도를 높이는 것이 아니라, 모델이 안전하게 작동할 수 있는 정교한 가드레일을 더 쉽고 빠르게 구축하는 수단이 된다.