Skip to Content

CI/CD 보충 실습

실습복습
관련 기초 개념

개요

  • 실행 점검: 기본 연결과 응답 여부 확인.
  • 회귀 평가: 업무 정답·근거·금지 행동을 고정 사례로 비교.
  • 배포 판정: 품질 기준 미달·권한 위반·잘못된 결과 형식 차단.

응답이 왔어도 배포하면 안 되는 경우

  • 환불 상담 앱이 “안녕하세요”에 답하면 기본 호출 경로는 동작합니다.

    그러나 환불 기한을 틀리거나 승인 없이 환불을 실행할 수도 있습니다. Smoke test는 기동과 연결을 점검하고, 회귀 평가는 업무별 정답·근거·금지 행동을 비교합니다. 두 검사를 같은 것으로 취급하면 품질이 나빠진 변경이 배포될 수 있습니다.

아래 데이터는 실제 Azure 평가기의 응답이 아니라 CI의 판정 로직을 연습하기 위한 합성 결과입니다. 외부 패키지나 클라우드 계정 없이 실행할 수 있습니다.

def may_release(result): if type(result) is not dict: return False smoke = result.get("smoke_ok") rate = result.get("answer_pass_rate") unauthorized = result.get("unauthorized_actions") if type(smoke) is not bool: return False # bool은 int의 하위 형식이므로 숫자로 허용하지 않는다. # 0~1 범위 검사는 NaN과 무한대도 거절한다. if type(rate) not in (int, float) or not 0 <= rate <= 1: return False if type(unauthorized) is not int or unauthorized < 0: return False return smoke and rate >= 0.90 and unauthorized == 0 baseline = { "smoke_ok": True, "answer_pass_rate": 0.94, "unauthorized_actions": 0, } regression = dict(baseline, answer_pass_rate=0.82) unsafe = dict(baseline, unauthorized_actions=1) assert may_release(baseline) assert not may_release(regression) assert not may_release(unsafe) for malformed in ( None, {}, dict(baseline, smoke_ok="false"), dict(baseline, answer_pass_rate=True), dict(baseline, answer_pass_rate=1.5), dict(baseline, answer_pass_rate=float("inf")), dict(baseline, answer_pass_rate=float("nan")), dict(baseline, unauthorized_actions=False), ): assert may_release(malformed) is False print("정상 통과 / 품질 하락 차단 / 권한 위반 차단 / 잘못된 형식 차단")
  • 여기서 0.90은 학습용 기준입니다.

    실제 업무에서는 위험도, 평가 문항 수, 평가 방식, 사람 검토 결과에 따라 기준을 정합니다. 평가 결과가 없거나 형식이 틀리면 조용히 통과시키지 않고 실패로 처리합니다. 일부 질문만 남겨 통과율을 높이지 않도록 평가 데이터의 버전과 건수도 기록합니다.

실제 파이프라인에 연결하기

단계입력실패하면 할 일
코드/계약 검사소스·도구 스키마오류 수정 후 재실행
회귀 평가고정 질문·기대 근거·이전 결과품질·안전 차이 검토
테스트 배포검증된 결과물·환경 설정이전 환경 유지, 배포 오류 조사
Smoke test테스트 에이전트·안전한 질의실제 요청/오류 ID 확인
운영 전환 후 관측오류율·지연·비용·품질 표본원인에 맞는 구성 복구
  • GitHub Actions와 Azure를 연결할 때는 OIDC 신뢰 관계와 역할 할당을 먼저 구성합니다.

    공식 hosted-agent 예제는 이미 만든 인프라와 에이전트를 전제로 합니다. 예제 YAML을 복사하는 것만으로 리소스·검색 인덱스·비밀 저장소가 모두 생성되는 것은 아닙니다. 프로젝트 경로, 배포 방식, 호출 프로토콜을 실제 저장소에 맞춥니다.

  • 운영 전환 전에 기존 버전으로 복구하는 절차도 한 번 확인합니다.

    새 코드만 되돌리고 인덱스나 프롬프트를 그대로 두면 이전 결과로 돌아가지 않을 수 있습니다. 전체 변경 관리 개념은 7.1 운영 배포와 변경 관리에서 설명합니다.

배포 판단 사례

AI 배포물의 버전 고정

  • AI 앱의 동작은 코드만 아니라 모델·프롬프트·검색 인덱스·도구 정의의 조합에 의해 달라집니다.

    변경할 항목을 manifest에 명시해야 회귀 원인을 추적할 수 있습니다.

  • 상황: 코드는 그대로인데 검색 인덱스가 재생성된 뒤 답변 품질이 낮아졌습니다.

  • 적용: 소스 코드 외에도 모델 배포 ID·프롬프트 해시·도구 스키마·검색 인덱스·평가셋 버전을 기록해 품질 변화를 재현합니다.

평가 게이트 설계

  • 평가 게이트는 릴리스 전에 고정 평가 데이터셋과 임계값으로 품질·안전·성능을 확인하는 절차입니다.

    중요한 보안 실패는 평균 점수와 독립된 차단 조건으로 취급합니다. Microsoft Foundry의 평가용 GitHub Action은 2026년 10월 기준 미리 보기(Preview)이므로 운영에 바로 보장되는 기능으로 소개하지 않습니다.

  • 상황: 새 프롬프트에서 정답률은 증가했지만 민감 정보 유출 테스트가 실패했습니다.

  • 적용: 보안·안전은 독립 차단 조건으로 지정해야 하며, 실패한 사례의 재현 입력과 원인을 기록한 뒤 재평가합니다.

  • 평가 GitHub Action (미리 보기) 

개발·스테이징·운영 승격

  • 개발 환경에서 나온 성능이 운영 환경의 권한·네트워크·쿼터까지 보증하지 않습니다.

    승격 과정에는 환경별 설정 검증 및 승인 단계가 필요합니다.

  • 상황: 테스트 프로젝트에서는 작동하지만 운영 프로젝트에서 도구 접근이 차단됩니다.

  • 적용: 운영 관리 ID 권한, 연결된 리소스, 배포 이름, 네트워크 정책, 쿼터 및 평가 기준을 확인합니다.

롤백과 데이터 호환성

  • 앱 버전만 되돌려도 저장된 대화 상태나 인덱스가 새 구조로 바뀌었다면 오류가 지속될 수 있습니다.

    롤백 가능 범위와 호환성 검사를 선행합니다.

  • 상황: 새 버전이 대화 상태 필드를 변경했고 일부 사용자가 이전 화면으로 복귀하려 합니다.

  • 적용: 상태 마이그레이션 호환성, 인덱스 스냅샷, 모델·도구 계약을 점검하고 복구 시간을 검증해야 합니다.

확인 문제

동일 평가셋과 고정된 출시 기준을 사용했습니다. 릴리스 게이트의 결과는?

기준: answer_pass_rate ≥ 0.90 AND unauthorized_actions == 0
이전: code=c7 / prompt=p2 / index=i4 / rate=0.93 / actions=0
후보: code=c7 / prompt=p3 / index=i4 / rate=0.95 / actions=1
smoke_test: passed
  1. 후보를 출시하고 안전 기준을 1건까지 완화한다
  2. 코드를 c6로 되돌리고 p3의 평가 결과를 유지한다
  3. 평가셋을 교체하고 기존 두 비율을 다시 비교한다
  4. 후보를 차단하고 p2 조합으로 회귀 여부를 확인한다

풀이 기록 기능을 불러오는 중…

해설 보기

정답: D. 후보를 차단하고 p2 조합으로 회귀 여부를 확인한다

품질 비율 0.95는 통과하지만 무승인 실행 1건이 안전 기준을 위반합니다. 변경된 p3와 검증된 p2를 같은 조건에서 비교해야 합니다.

참고 자료

적용 사례 교정: 2026-10-23. Azure API 호출·요금은 실행 검증하지 않았습니다.

직접 적용하기

교육용 가상 상황

교육용 배포 기준은 smoke_ok=True, answer_pass_rate≥0.90, unauthorized_actions=0입니다. 변경 A는 (True, 0.82, 0), 변경 B는 (True, 0.95, 1)입니다.

각 변경의 배포 여부와 실패 기준을 설명하세요. 통과율만 높이면 충분한지도 적으세요.

답안 저장 기능을 불러오는 중…

검증 기준과 해설 보기
  1. A는 품질 기준 미달로 차단한다.
  2. B는 무단 행동이 있어 차단한다.
  3. 평가셋·기준을 임의로 바꾸어 통과시키지 않는다.

A와 B를 모두 차단합니다. A는 0.82가 0.90 미만이고 B는 무단 행동이 1건입니다. 이 수치는 학습용 기준이며 실제 제품의 보편적 기준이 아닙니다. 고정 평가셋과 버전을 함께 관리합니다.

복습하기

  1. Smoke test와 품질 평가는 같은가요?
  2. 안전 위반이 있어도 평균 점수가 높으면 되나요?
  3. 실패 시 왜 이전 환경을 유지하나요?
답변 확인 기준
  1. Smoke test와 품질 평가는 같은가요?

    연결 확인과 업무 정답·안전 확인은 별도입니다.

  2. 안전 위반이 있어도 평균 점수가 높으면 되나요?

    필수 안전 기준을 평균 품질로 상쇄하지 않습니다.

  3. 실패 시 왜 이전 환경을 유지하나요?

    검증되지 않은 변경의 운영 영향을 제한하기 위해서입니다.