[추론 옵션 의사결정 트리] 지금 당장 응답이 필요한가? │ ├─ 아니오 ─▶ 요청이 "전체 데이터셋 한 번에"인가? │ ├─ 예 ─▶ 배치 변환 │ └─ 아니오(개별 요청인데 오래 걸림/크다) ─▶ 비동기 추론 │ └─ 예 ─▶ 트래픽이 꾸준한가? ├─ 예 ─▶ 실시간 엔드포인트 (최소 1대 상시, 0 스케일 불가) └─ 아니오(간헐·유휴가 김) ─▶ 콜드 스타트를 허용하는가? ├─ 예 ─▶ 서버리스 추론 └─ 아니오 ─▶ 실시간 + 오토스케일링
결정 축은 "즉시성·트래픽·페이로드·비용"이다. 즉시 응답+꾸준한 트래픽이면 실시간, 즉시 응답이지만 간헐적이고 콜드 스타트를 허용하면 서버리스, 큰 페이로드·긴 처리·개별 요청이면 비동기, 전체 데이터셋 일괄이면 배치다. 비용이 걸리면 다수 동종 모델은 MME, 딥러닝 추론은 Inferentia, 유휴가 많으면 0 스케일 옵션으로 줄인다.
⚠️ 함정: MME와 MCE는 보기에서 나란히 나온다. 가르는 한마디는 "모델이 몇 개이고 프레임워크가 같은가" 다. 수백~수천 개 동종 모델이면 MME, 프레임워크가 다른 소수 모델이면 MCE다. 그리고 "학습 때의 전처리를 추론에도 똑같이"는 MME가 아니라 추론 파이프라인(또는 Feature Store)이다.
여기서부터는 배포를 "매번 손으로"가 아니라 "반복 가능하게" 만드는 이야기다. SageMaker Pipelines는 데이터 처리→학습→평가→등록→배포를 DAG로 묶는 ML 전용 CI/CD 오케스트레이터다. 단계(Step)들을 연결하고, 조건 단계(ConditionStep)로 "정확도가 기준 이상이면 등록"같은 게이트를 건다. Model Registry는 모델 버전을 카탈로그·승인 상태로 관리한다.
MLOps 요구
서비스
ML 워크플로 DAG 오케스트레이션
SageMaker Pipelines
모델 버전·승인 관리
Model Registry
범용 워크플로(서버리스 함수 체인)
Step Functions
코드형 인프라
CloudFormation / CDK
코드 커밋→빌드→배포 CI/CD
CodePipeline + CodeBuild
이벤트 기반 트리거(재학습)
EventBridge
실험·시도 기록 비교
SageMaker Experiments
데이터→학습→모델 계보 추적
Lineage Tracking
from sagemaker.workflow.condition_step import ConditionStepfrom sagemaker.workflow.conditions import ConditionGreaterThanOrEqualTo# 평가 지표가 기준 이상일 때만 모델 등록 단계로 넘어가는 게이트cond = ConditionGreaterThanOrEqualTo(left=accuracy_metric, right=0.85)gate = ConditionStep( name='AccuracyGate', conditions=[cond], if_steps=[register_step], # 통과: Model Registry 등록 else_steps=[], # 미달: 아무것도 하지 않고 종료)
Pipelines와 Step Functions는 헷갈리기 쉽다. Pipelines는 SageMaker 단계에 특화되어 ML 워크플로를 가장 자연스럽게 표현하고 lineage·Registry와 통합된다. Step Functions는 더 범용적이어서 Lambda·Glue 등 다양한 AWS 서비스를 엮는 비-ML 단계가 많이 섞일 때 적합하다. "재학습을 새 데이터 도착 시 자동 트리거"는 EventBridge가 Pipeline을 시작하는 패턴이 정답이다.
배포 후 모델은 데이터/세상이 변하면서 조용히 나빠진다. SageMaker Model Monitor가 네 종류를 감시한다.
모니터 유형
감시 대상
실제 정답 필요?
Data Quality
입력 데이터 통계·스키마 변화(공변량 드리프트)
불필요
Model Quality
실제 정답 대비 예측 성능 저하
필요
Bias Drift
운영 중 편향 변화(Clarify 연동)
편향 지표에 따라 필요
Feature Attribution Drift
특성 기여도 변화(Clarify 연동)
불필요
작동 방식은 베이스라인(학습 시 통계) 생성 → 운영 데이터를 주기적으로 비교 → 위반 시 CloudWatch 알림이다.
[Model Monitor 동작] 학습 데이터 ──▶ 베이스라인 작업 ──▶ 통계·제약(constraints) 저장(S3) │ 엔드포인트 ──▶ 데이터 캡처(요청·응답 S3 저장) │ │ ▼ └──▶ 주기적 모니터링 작업 ──▶ 위반 리포트 ▼ CloudWatch 지표·알람 ─▶ SNS ─▶ 재학습
⚠️ 함정: "드리프트 감지"는 거의 항상 Model Monitor가 정답이다. 입력 분포가 변하면 Data Quality, 정답 대비 성능이 떨어지면 Model Quality다. 단 Model Quality는 실제 정답(ground truth) 이 필요하므로 정답이 지연 도착하는 환경에서는 라벨 수집 파이프라인이 함께 필요하다. 편향·특성 기여도 변화는 Clarify와 연동한 Bias/Attribution Drift 모니터다. 또 모니터링의 전제는 데이터 캡처 활성화 — 캡처를 켜지 않으면 감시할 원본이 없다.
IAM: 최소 권한 원칙. SageMaker 실행 역할(execution role)에 S3·ECR 등 필요한 권한만 부여한다. 사용자가 아닌 서비스에 권한을 줄 땐 역할 신뢰관계를 쓴다.
VPC: 학습/엔드포인트를 VPC 내부에 두고, 인터넷 없이 S3·ECR에 접근하려면 VPC 엔드포인트(PrivateLink) 를 쓴다. EnableNetworkIsolation으로 컨테이너의 외부 통신을 차단한다.
KMS: 저장 데이터 암호화 — S3 데이터, EBS 볼륨, 모델 아티팩트를 KMS 키로 암호화한다. 전송 중 암호화는 TLS다.
[권한·네트워크 경로] 사용자/서비스 ──(IAM 정책·신뢰관계)──▶ SageMaker 실행 역할 │ 이 역할로만 접근 ▼ VPC(프라이빗 서브넷) ── 학습/엔드포인트 컨테이너 │ EnableNetworkIsolation = 컨테이너의 외부 인터넷 통신 차단 ├─ Gateway 엔드포인트 ──▶ S3 └─ Interface 엔드포인트(PrivateLink) ──▶ ECR, SageMaker API/Runtime 등 ▼ 객체는 KMS 키로 암호화되어 저장
엔드포인트 종류
연결 방식
주요 대상
Gateway 엔드포인트
라우팅 테이블에 경로 추가
S3, DynamoDB
Interface 엔드포인트(PrivateLink)
서브넷에 ENI 생성, 프라이빗 IP로 접근
대부분의 AWS 서비스(ECR, SageMaker API 등)
보안 시나리오는 세 질문으로 환원된다. "누가 무엇을 할 수 있나"(IAM), "어디서 통신하나"(VPC/엔드포인트/격리), "데이터가 보호되나"(KMS 저장 + TLS 전송). "민감 데이터를 인터넷 노출 없이 처리"는 VPC + VPC 엔드포인트 + 네트워크 격리, "저장 데이터 규제 준수 암호화"는 KMS, "노트북이 과도한 권한을 가짐"은 IAM 최소 권한이다.
운영 추적·감사 도구도 묻는다. CloudTrail은 API 호출 감사 로그, CloudWatch는 지표·로그·알람, SageMaker Model Cards는 모델 문서화·거버넌스, Lineage Tracking은 데이터→학습→모델 계보 추적이다.
질문 형태
정답
"누가 언제 이 리소스를 지웠나"
CloudTrail
"지연·오류율이 임계를 넘으면 알림"
CloudWatch 알람
"이 모델은 어떤 데이터에서 나왔나"
Lineage Tracking
"모델의 용도·한계를 문서로"
Model Cards
"학습 시도들의 지표를 비교"
SageMaker Experiments
"누가 엔드포인트를 삭제했는가" 같은 감사는 CloudTrail(API 기록), "엔드포인트 지연·오류율 모니터링과 알람"은 CloudWatch다. 둘은 역할이 다르다 — CloudTrail은 "누가 무슨 행위를 했나(거버넌스)", CloudWatch는 "시스템이 어떻게 동작하나(운영 지표)"다. 모델의 출처·재현성 추적은 Lineage, 모델의 의도·성능·한계 문서화는 Model Cards다.