Skip to content

feat: AI 개발 결과물 검증 계층(L1~L4) 정의 및 레포 내장 검증 스킬 구축 #89

Open

Description

@Hexeong

어떤 기능인가요?

AI(Code Agent)가 구현한 인프라 변경을 Agent 스스로 검증하고 수정할 수 있도록 검증 계층(L1L4)을 정의하고,
L1
L3은 레포 내장 스킬로, L4는 지시문서로 제공합니다.

현재 레포는 대부분 Code Agent로 개발되고 있지만, PR 검증 수단은 terraform plan 요약 한 줄뿐입니다.
그래서 AI가 만든 결과물을 사람이 직접 한 줄씩 검사하게 되고, 이것이 병목이 되고 있습니다.
최근 fix(#75, #77, #82)도 plan으로는 잡을 수 없는 user_data, systemd, nginx 설정 영역에서 발생했습니다.

목표는 기계가 판단할 수 있는 검증은 Agent가 스스로 돌려서 고치게 하고, 사람은 압축된 근거를 보고 "의도한 변경이 맞는지"만 판단하는 것입니다.

검증 계층

계층 성격 실행 위치 제공 형태
L1 정적 검사 실행 없이 코드만 보고 판단. 빠르고 결과가 확정적 (fmt, validate, lint, 보안 스캔, shell/workflow lint) 로컬 + CI 스킬
L2 Plan 검사 plan 결과를 데이터(JSON)로 다뤄 위험한 변경을 판정하고, 작업 의도와 실제 변경을 대조 로컬 + CI 스킬
L3 동작 테스트 모듈, 스크립트, 렌더링된 템플릿이 의도대로 동작하는지 테스트 로컬 + CI 스킬
L4 런타임 검증 apply 후 실제 리소스 상태 확인 (서비스 기동, 설정 반영, 헬스 체크) 작업자가 apply 후 수행 지시문서 (CLAUDE.md / PR 템플릿)

L2의 구체적인 정책 규칙은 별도 논의로 확정합니다. 이 이슈에서는 계층의 성격과 구조만 정의합니다.

설계 원칙

  • 이식성: L1~L3은 레포 안에 스킬로 포함해, 다른 작업자도 clone만으로 같은 검증 환경을 쓸 수 있게 합니다.
    • 실제 로직은 scripts/verify/에 두고, 스킬은 실행 순서와 실패 시 대응을 지시하는 래퍼로만 둡니다 (Claude 이외 Agent와 CI에서도 재사용 가능).
    • L1(및 L3)은 레포에 정의한 단일 검증 Docker 이미지에서 실행해 OS(Windows/macOS)와 무관하게 동일한 결과를 보장합니다.
      도구 버전은 이미지 단위로 고정하며, CI도 같은 이미지를 사용합니다.
  • 로컬과 CI 동일성: CI는 같은 스크립트를 호출하며, 실제 머지를 막는 기준은 CI입니다.
  • 미검증 명시: 자격증명이나 터널이 없어 실행할 수 없는 검사는 통과가 아니라 SKIPPED로 보고합니다.
  • 자기 채점 방지: 검증 정책과 규칙은 사람이 소유하며, 인프라 변경 PR에서 정책을 함께 수정하지 않습니다.
  • L4 체크리스트 선작성: Agent는 PR 작성 시 해당 변경의 런타임 확인 항목을 PR 본문에 남기고, 작업자는 apply 후 이를 수행합니다.

작업 상세 내용

  • L1: 검증 Docker 이미지 작성 (멀티 아키텍처, 도구 버전 고정) 및 단일 실행 진입점 제공
  • .gitattributes를 전체 LF 기준으로 정비 (확장자 없는 스크립트, systemd unit 포함)
  • L2: plan JSON 기반 검사 구조 마련 (규칙은 별도 이슈에서 확정)
  • L2: PR 댓글에 리소스 단위 변경 목록(주소 + action, 값 제외) 노출
  • L3: 기존 스크립트 테스트(mysql_backup, load_test)를 PR 자동 실행으로 전환 및 템플릿 렌더링 검증 추가
  • .claude/skills/ 검증 스킬 작성 (L1~L3)
  • CI 워크플로우가 scripts/verify/*를 호출하도록 통합
  • L4: CLAUDE.md 및 PR 템플릿에 런타임 검증 지시 반영
  • 확인 필요: 로컬 read-only IAM의 SSM 세션 권한 여부 (L4 수행 가능 범위)

참고할만한 자료(선택)

  • 현재 PR 검증: .github/workflows/terraform-plan.yml
  • AI 리뷰 설정: .coderabbit.yaml (plan의 destroy/replace를 확인하도록 지시돼 있으나, 댓글에는 요약만 노출됨)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions