ASA Core v1.0를 이용한 결정론적 재생
Source: Dev.to
재생 함정
대부분의 AI 기반 코딩 도구는 한 번 코드를 생성하는 데는 뛰어나지만… 다시 생성할 때는 그렇지 않습니다.
스펙을 업데이트하고 재생성을 클릭하면 갑자기:
- 사용자 정의 로직이 사라짐
- 검증 규칙이 사라짐
- 테스트 구조가 더 이상 일치하지 않음
- 핸들러와 모델이 서로 어긋남
이것이 재생성 함정입니다.
전통적인 도구에서 재생성이 실패하는 이유
제너레이터는 당신이 작성한 코드를 알지 못합니다. 일반적인 흐름은 다음과 같습니다:
- 1일 차 – 스캐폴딩 생성 → 보기 좋음
- 2일 차 – 비즈니스 로직 구현 → 기분 좋음
- 3일 차 – 요구사항 변경 → 재생성 → 모든 것이 사라짐
결과
- 개발자 시간 손실
- 제너레이터 사용에 대한 두려움
- 스펙과 코드의 불일치
- 아키텍처 부패
코드만 잃는 것이 아니라 신뢰도 잃게 됩니다.
ASA의 결정론적 파이프라인
슬라이스
자체 포함된 수직 기능 단위, 예시:
domains/auth/login/
├── slice.spec.md
├── slice.contract.json
├── handler.py
├── service.py
├── repository.py
├── schemas.py
└── tests/
스펙 (사람이 읽을 수 있음)
각 슬라이스는 다음 일곱 개의 필수 섹션을 포함하는 스펙을 가집니다:
- 목적
- 입력
- 출력
- 동작
- 오류
- 부수 효과
- 의존성
계약 (기계가 읽을 수 있음)
스펙으로부터 JSON 스키마가 생성됩니다. 예시:
{
"inputs": { "email": "string", "password": "string" },
"outputs": { "jwt_token": "string", "expires_in": "int" }
}
결정론적 템플릿과 마커 기반 보존
ASA 템플릿에는 무작위성이 없습니다. “당신의 코드”와 “생성된 코드”를 추측하는 대신, ASA는 보존할 영역을 명시적으로 표시합니다:
# === BEGIN USER CODE ===
def execute(self, request: LoginRequest) -> LoginResponse:
user = self.repo.get_user_by_email(request.email)
token = self.repo.generate_jwt(user.id)
return LoginResponse(jwt_token=token, expires_in=3600)
# === END USER CODE ===
재생성 시 ASA는:
- 마커 안의 모든 내용을 추출하고
- 주변 구조를 재생성하고
- 코드를 정확히 원래 위치에 다시 삽입합니다
이 100 % 결정론적 라운드‑트립은 코드를 실수로 덮어쓸 수 없도록 보장합니다.
안전한 재생성 예시
작동 중인 로그인 슬라이스가 있습니다. 나중에 보안팀이 ip_address를 로그에 남기고 싶어합니다.
slice.spec.md를 업데이트:
- email: string
- password: string
- ip_address: string # new
- 재생성 명령 실행:
asa generate-contract auth/login
asa regenerate-slice auth/login
ASA가 업데이트하는 항목:
- 모델
- 핸들러 시그니처
- 테스트
- 계약
사용자 정의 로직은 그대로 유지됩니다.
AI‑지원 개발에서 결정론성이 중요한 이유
- 여러 에이전트가 동일 슬라이스를 수정할 수 있음
- 스펙이 매일 변경될 수 있음
- 계약이 빠르게 진화함
- 자동화된 워크플로는 예측 가능한 동작이 필요함
- CI 파이프라인은 인간 개입 없이 재생성·린트를 수행해야 함
ASA는 다음을 보장합니다:
- 동일 스펙 → 동일 계약
- 동일 계약 → 동일 파일
- diff에 놀라움 없음
- 로직이 우연히 덮어써지는 일 없음
이 아키텍처는 AI 시대에 맞게 설계되었습니다.
ASA Core v1.0: 이상적인 시나리오
- 장기 운영 백엔드
- 다중 에이전트 코딩 환경
- 빠르게 변화하는 기능 세트
- 코드 드리프트에 지친 팀
- 결정론적 결과가 필요한 조직
- LLM을 중심에 두고 개발하는 모든 사람
ASA를 사용하면 재생성을 두려워하지 않고 받아들일 수 있습니다. 재생성은 다음과 같은 느낌이어야 합니다:
rm -rf my_code
이런 느낌이 아니라, 구조는 안전하게 업데이트하면서 로직은 보존되는 느낌이어야 합니다.
ASA Core v1.0의 핵심 요소
- 슬라이스 공동 배치
- 결정론적 템플릿
- 기계‑읽기 가능한 계약
- 마커‑기반 보존
- 린터를 통한 경계 강제
AI‑주도 개발에 발맞출 수 있는 백엔드 아키텍처를 원한다면, ASA가 바로 그 해답입니다.
소스 코드 및 스타터 킷: