본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
에이전틱 테스트 환경 엔지니어링

근본 원리

테스트 포트폴리오 운영 모델환경·상태 통제 전략실행 토폴로지와 러너 아키텍처테스트 하네스 엔지니어링

계약 & 구성

인터페이스 계약과 관측 포인트상태 구성과 시나리오 픽스처

실행 & 게이트

실행 패브릭과 오케스트레이션리스크 기반 릴리즈 게이트

신뢰도 & 운영

비결정성과 Flake 관리관측성·신뢰도 지표테스트 인시던트 대응거버넌스와 소유권

부록

런북 템플릿검증 리포트업데이트 내역
핸드북›에이전틱 테스트 환경 엔지니어링›리스크 기반 릴리즈 게이트

리스크 기반 릴리즈 게이트

blocker, evidence bundle, hotfix 예외, production-safe probe를 어떤 기준으로 운영할지 설명합니다.

핵심 요약

  • 릴리즈 게이트는 테스트를 돌리는 일이 아니라 어떤 실패가 배포를 멈추는지를 정해 두는 규칙입니다.
  • PR(smoke)·main·release(critical+blocker 없음)·canary(prod-safe probe) gate를 계층으로 둡니다.
  • 로그인·결제·권한·데이터 무결성·canary prod-safe 실패는 blocker, 승인된 known flaky 등은 비blocker입니다.
  • gate가 설득력을 가지려면 분류·근거 artifact·environment fingerprint·commit SHA를 담은 evidence bundle이 있어야 합니다.
  • hotfix는 게이트 우회가 아니라 범위 축소로 다루고, agent가 green을 만들어도 evidence와 human gate로 판단합니다.

릴리즈 게이트는 테스트를 돌리는 일이 아니라 어떤 실패가 배포를 멈추는지를 정해 두는 규칙입니다. 게이트 기준을 문서로 못 박아 두지 않으면 red build는 매번 해석 싸움으로 번집니다.

gate 계층

gate목적통과 기준실패 시
PR gate변경 보호smoke greenmerge block
main gatetrunk 안정성smoke green + known blocker 없음main red 유지
release gate배포 승인critical green + blocker 없음release hold
canary gate실제 환경 확인production-safe probe greenrollout stop

blocker 정의

아래는 기본적으로 release blocker 후보로 봅니다.

  • 로그인, 가입, 결제, 구독, 권한 검증 실패
  • 데이터 저장, 수정, 삭제의 무결성 실패
  • 법적, 보안, 권한 경계가 깨지는 경우
  • production-safe probe가 canary에서 실패하는 경우

반대로 아래는 기본 blocker가 아닙니다.

  • nightly full suite에서만 발견된 비핵심 회귀
  • 승인된 known flaky 실패
  • 운영 영향이 없는 low-priority admin flow 실패

evidence bundle이 있어야 gate가 설득력을 가진다

릴리즈를 멈추려면 "테스트가 실패했다"는 한마디로는 부족하고, 아래가 함께 있어야 합니다.

  • 어떤 gate와 tier에서 실패했는가
  • 실패 분류는 무엇인가
  • screenshot, trace, log, event 중 어떤 근거가 있는가
  • 환경 fingerprint와 commit SHA는 무엇인가
  • 예외 승인 또는 rollback 판단에 필요한 최소 설명이 있는가

hotfix 예외 정책

hotfix는 게이트를 건너뛰지 않고 게이트 범위를 좁혀서 다룹니다.

상황허용 범위필요 승인
UI 텍스트 hotfixsmoke + 관련 critical subset제품 오너 + release manager
결제 / 권한 hotfix전체 critical 유지release manager + QA platform
infra-only hotfixproduction-safe probe 유지SRE + release manager

production-safe browser probe 예시

브라우저 gate는 Playwright 같은 runner로 짤 수 있지만, 관건은 도구가 아니라 실제 rollout을 멈출 근거를 남기느냐입니다.

import { test, expect } from '@playwright/test'

test.describe('prod-safe smoke', { tag: ['@smoke', '@prod-safe'] }, () => {
  test('읽기 전용 계정으로 로그인 후 핵심 대시보드를 확인한다', async ({ page }) => {
    await page.goto('/login')
    await page.getByLabel('Email').fill(process.env.E2E_CANARY_USER!)
    await page.getByLabel('Password').fill(process.env.E2E_CANARY_PASSWORD!)
    await page.getByRole('button', { name: '로그인' }).click()

    await expect(page).toHaveURL(/dashboard/)
    await expect(page.getByTestId('revenue-summary')).toBeVisible()
  })
})
  • 계정은 읽기 전용으로 두고 비가역 mutation은 금지합니다.
  • production-safe suite는 trace와 screenshot을 반드시 남깁니다.
  • 같은 probe를 PR gate와 canary gate에서 재사용하더라도 의미가 달라짐을 문서로 고정합니다.

agentic 환경에서의 추가 원칙

  • agent는 실패 관련 subset을 재실행할 수 있지만 gate 의미를 바꾸면 안 됩니다.
  • high-risk 변경에서는 agent repair loop 이후에도 human gate가 남아 있어야 합니다.
  • "agent가 green 만들었으니 배포"가 아니라 "증거 묶음이 blocker를 해소했는가"를 봐야 합니다.

리뷰 질문

  • blocker 정의가 제품 리스크와 직접 연결되는가?
  • evidence bundle 없이 gate만 red/green으로 소비되고 있지 않은가?
  • hotfix 예외가 사실상 우회 통로가 되지 않도록 승인 기준이 문서화됐는가?

관련 문서

실행 패브릭과 오케스트레이션

PR, main, nightly, release, canary, agent-repair 루프를 어떤 시간 예산과 증거 정책으로 운영할지 설명합니다.

테스트 인시던트 대응

gate failure를 릴리즈 판단 시스템 인시던트로 다루고 triage, release hold, rollback을 연결하는 방법

시나리오: 플랫폼 팀

하네스 엔지니어링 · 플랫폼 팀에서 하네스가 아키텍처 불변식, 릴리즈 게이트, 영향 반경 관리 시스템으로 작동하는 방식을 설명합니다.

실행 패브릭과 오케스트레이션

PR, main, nightly, release, canary, agent-repair 루프를 어떤 시간 예산과 증거 정책으로 운영할지 설명합니다.

비결정성과 Flake 관리

flaky를 타이밍 문제가 아니라 환경·상태·외부 의존성·모델 분산의 운영 신호로 다루는 방법

On this page

gate 계층blocker 정의evidence bundle이 있어야 gate가 설득력을 가진다hotfix 예외 정책production-safe browser probe 예시agentic 환경에서의 추가 원칙리뷰 질문