코드를 한 줄 고칠 때마다 사람이 노트북에서 파이프라인을 다시 돌리고, 승인 버튼을 누르고, 엔드포인트를 손으로 갱신한다면 여전히 수동 운영이다. 전통적 소프트웨어 CI/CD는 코드 푸시 → 빌드 → 테스트 → 배포인데, ML에서는 여기에 데이터와 모델이라는 축이 더해진다.
구분
전통 소프트웨어 CI/CD
ML CI/CD
입력
코드
코드 + 데이터
빌드 산출물
바이너리·이미지
학습된 모델 아티팩트
테스트
단위·통합 테스트
테스트 + 모델 평가 지표 게이트
승인 대상
릴리스 후보
모델 버전(Registry)
재실행 계기
코드 변경
코드 변경 + 데이터 변경·드리프트·스케줄
CI (지속적 통합): 전처리·학습 스크립트 변경 시 자동으로 파이프라인을 실행해 학습·평가하고 Registry에 등록.
CD (지속적 배포): 모델이 승인되면 자동으로 스테이징·프로덕션 엔드포인트에 배포.
직접 손으로 엮을 수도 있지만, AWS는 SageMaker Projects라는 템플릿으로 전체 골격을 한 번에 깔아준다.
💡 관련 이론: ML CI/CD의 핵심 사상은 "모델 배포를 소프트웨어 배포처럼 버전 관리·자동화·롤백 가능하게 만든다"이다. 코드, 데이터, 모델이 모두 추적되고, 변경이 자동 트리거로 이어지며, 문제가 생기면 이전 버전으로 되돌릴 수 있어야 한다. 시험에서 "Git 커밋 → 자동 재학습·배포"라는 흐름은 SageMaker Projects + Code* 서비스 조합을 가리킨다.
CD의 심장은 어제 배운 모델 승인 이벤트다. Model Registry에서 승인 상태가 바뀌면 EventBridge가 이를 잡아 Deploy 파이프라인을 시작한다.
import boto3events = boto3.client("events")# 모델 승인 상태가 Approved로 바뀌면 Deploy 파이프라인을 트리거하는 규칙events.put_rule( Name="trigger-deploy-on-approval", EventPattern="""{ "source": ["aws.sagemaker"], "detail-type": ["SageMaker Model Package State Change"], "detail": { "ModelApprovalStatus": ["Approved"] } }""",)
이 규칙의 타깃을 Deploy용 CodePipeline으로 지정하면, 사람이 모델을 승인하는 순간 배포가 자동으로 굴러간다. 스테이징 검증 후 프로덕션 배포 전에 수동 승인 단계(manual approval action)를 한 번 더 두는 것이 안전 패턴이다.
# CodePipeline 단계 예시(개념): 스테이징 → 수동 승인 → 프로덕션# 1. DeployStaging (CloudFormation으로 스테이징 엔드포인트 생성)# 2. ApprovalGate (사람이 스테이징 결과 확인 후 승인)# 3. DeployProd (프로덕션 엔드포인트 배포)
CI/CD에서 스테이징 → 수동 승인 → 프로덕션의 단계적 배포는 "blast radius(영향 반경) 최소화" 원칙이다. 신모델을 곧장 프로덕션에 넣지 않고 스테이징에서 검증한 뒤 게이트를 통과시키면, 결함이 사용자에게 닿기 전에 걸러진다. 시험에서 "안전하게 자동 배포하되 프로덕션 직전 통제를 두려면"이라는 문장은 CodePipeline의 수동 승인 액션을 가리킨다.
⚠️ 함정: "모델 승인 시 자동 배포"와 "프로덕션 직전 사람 확인"은 서로 모순이 아니다. 승인이 두 번 나온다 — 첫 번째는 Registry의 Approved(모델을 배포 흐름에 태우는 결정), 두 번째는 CodePipeline의 ManualApproval 액션(스테이징 검증 결과를 보고 프로덕션에 내보내는 결정)이다. 보기에서 이 둘을 하나로 뭉뚱그린 선택지는 오답인 경우가 많다.