3월 13일에는 MLOps 및 클라우드 기반 AI 서비스 운영 흐름 이해 특강을 들었다. 이번 강사님은 글로벌 기업 세 곳에서 실무 경험을 쌓아 커리어를 넓혀 왔고, 현재는 퍼블릭 클라우드와 Kubernetes 기반 서비스를 다루는 엔지니어로 일하고 있다고 소개됐다. 그래서인지 강의도 AI 모델 자체보다는, 그 모델이 실제 서비스 안에서 어떻게 살아 움직이는지에 훨씬 더 초점이 맞춰져 있었다.
이번 특강이 좋았던 이유는 “모델을 만들 줄 안다”와 “서비스를 운영할 줄 안다” 사이의 간격을 꽤 구체적으로 보여 줬기 때문이다. 노트북에서 돌아가는 코드와 실제 사용자 요청을 받는 시스템은 전혀 다른 문제라는 말이 단순한 구호처럼 들리지 않았다. API로 감싸고, 컨테이너로 만들고, 쿠버네티스에 올리고, 모니터링하고, 버전을 관리하는 흐름까지 이어지니 비로소 왜 MLOps가 별도 역량으로 불리는지 감이 왔다. 전체 흐름도 노트북 -> 클라우드 -> 운영 -> 재학습으로 이어져 있었다.
결국 중요한 건 모델이 아니라 서비스 전체 흐름이었다
강의 초반부터 느낀 건, AI 서비스는 모델 하나로 끝나지 않는다는 점이었다. 보통 공부할 때는 데이터 전처리, 학습, 성능 평가까지를 중심으로 보게 되는데, 실제 운영 환경에서는 그다음이 더 길다. 모델 파일을 어떻게 불러오고, 입력값을 어떻게 검증하고, 응답 포맷을 어떻게 맞추고, 서버는 어떤 방식으로 띄우고, 여러 사용자가 동시에 요청해도 문제없이 돌아가게 할지까지 전부 설계 대상이 된다.
이 차이를 설명하는 방식도 좋았다. 강의는 AI를 연구나 실험의 결과물로만 보지 않고, 실제 제품과 서비스 안에 들어가 있는 소프트웨어 컴포넌트로 보게 만들었다. 그러니까 MLOps는 단순히 “배포도 조금 할 줄 아는 것”이 아니라, 모델이 운영 환경에 들어간 뒤에도 계속 굴러가게 만드는 일에 더 가까웠다. MLOps를 머신러닝 모델을 개발, 배포, 운영, 재학습까지 안정적이고 반복 가능하게 만들기 위한 방법론과 도구 세트라고 설명한 것도 딱 맞았다.
노트북에서 끝나는 모델과 운영되는 모델은 다르다
이번 특강에서 가장 크게 남은 건 이 지점이었다. 로컬 환경에서 model.pkl 하나 저장해 두고 테스트하는 것과, 외부에서 요청이 들어오는 API 서버로 운영하는 것은 완전히 다른 단계라는 것. 강의에서는 이 차이를 코드 예시로 직접 보여 줬다.
모델 파일을 불러온 다음 FastAPI로 /predict 엔드포인트를 만들고, 입력값을 받아 예측 결과를 반환하는 구조가 예시로 나왔는데, 그 순간부터 모델은 그냥 분석 결과물이 아니라 하나의 서비스 인터페이스가 된다. 여기서부터는 정확도만이 아니라 입력 스키마, 예외 처리, 응답 형식, 서버 구동 방식이 다 중요해진다. AI 엔지니어링이 개발과 인프라 쪽 감각을 같이 요구하는 이유가 바로 여기 있다는 생각이 들었다.
특히 사례 연구가 현실적이었다. 이커머스 추천 시스템을 예로 들면서 Day 1-30 노트북에서 모델 개발, Day 31-60 FastAPI로 /predict 래핑하고 Docker로 컨테이너화, Day 61+ 성능 드리프트 모니터링과 재학습이라는 3단계 타임라인을 제시했는데, 이 구성이 서비스화 과정을 매우 직관적으로 보여 줬다. 노트북과 서비스 사이에 API와 배포가 끼고, 서비스 이후에는 운영과 재학습이 붙는다는 게 한눈에 들어왔다.

FastAPI로 감싼다는 건 모델을 서비스 언어로 번역하는 일이었다
강의 중간에는 serving_api.py 예시와 함께 FastAPI 기반 서빙 흐름이 나왔다. 모델을 메모리에 로드하고, 요청을 받아 예측하고, JSON 형태로 응답을 돌려주는 구조였다. React나 React Native 같은 프런트엔드에서 fetch("/predict")로 호출하는 예시도 함께 보여 줘서 훨씬 직관적이었다.
이 부분이 좋았던 건 AI 모델이 프런트엔드나 앱과 연결되는 순간을 정확히 보여 줬기 때문이다. 모델은 혼자 존재하는 게 아니라 결국 다른 서비스와 연결되어야 하고, 그러려면 API 설계가 먼저 정리되어 있어야 한다. 예측 결과를 숫자 하나로 보낼지, 설명 정보까지 같이 보낼지, 실패했을 때는 어떤 응답을 줄지 같은 결정이 전부 제품 관점과 연결된다. 결국 서빙은 단순히 서버를 띄우는 작업이 아니라, 모델을 다른 시스템이 이해할 수 있는 형태로 번역하는 일에 가까웠다.
코드 수준에서도 인상적인 포인트가 있었다. 모델을 앱 시작 시 전역으로 한 번만 로드하고, Pydantic 스키마로 입력을 검증하고, 응답은 JSON 직렬화가 가능한 형태로 돌려주는 흐름을 강조했는데, 사소해 보여도 이 세 가지가 실제 서비스 품질을 크게 좌우한다는 느낌이 들었다. 모델을 요청마다 다시 읽으면 느려지고, 입력 검증이 없으면 에러가 지저분해지고, 응답 규격이 모호하면 프런트엔드와 맞물리기 어렵기 때문이다.
Docker와 Kubernetes는 배포 편의가 아니라 운영 전제 조건에 가까웠다
후반부로 갈수록 인프라 얘기가 본격적으로 나왔다. Dockerfile 예시가 먼저 나오고, 이어서 Kubernetes Deployment 예시가 붙었다. 이미지 빌드, 의존성 고정, 컨테이너 포트, replica 수, CPU와 메모리 request/limit 같은 값들이 같이 보였는데, 여기서 확실히 느낀 건 운영 환경에서는 “내 컴퓨터에서 돌아간다”가 아무 의미가 없다는 점이었다.
컨테이너는 같은 실행 환경을 재현하게 해 주고, Kubernetes는 그 컨테이너를 여러 대로 안정적으로 운영하게 해 준다. 강의에서는 이걸 이론만으로 설명하지 않고, 실제 배포 설정이 왜 필요한지까지 연결해서 보여 줬다. replica를 두는 이유, 리소스 제한을 잡는 이유, 이미지 버전을 관리하는 이유가 다 운영 안정성과 연결돼 있었다. AI 서비스도 결국 다른 백엔드 서비스와 같은 수준으로 배포와 운영을 고민해야 한다는 뜻이었다.
배포 옵션을 한 장으로 비교한 부분도 이해를 도왔다. 간단하고 빠르게 시작하는 Lambda/Cloud Functions 같은 서버리스, 중간 난도의 Cloud Run/Fargate, 더 높은 유연성을 주는 SageMaker/Vertex 같은 관리형 ML 서빙, 그리고 가장 복잡하지만 가장 넓은 제어권을 주는 Kubernetes(EKS/GKE/AKS)까지 스펙트럼으로 보여 줬다. 그래서 쿠버네티스가 무조건 정답이라기보다, 요구사항과 팀 수준에 따라 선택지가 달라진다는 점도 같이 보였다.
AI 서비스 운영은 배포가 끝이 아니라 시작이었다
이 강의에서 특히 좋았던 점은 배포 이후를 계속 강조했다는 것이다. 모델이 한 번 올라갔다고 해서 끝나는 게 아니고, 그 뒤에는 성능 문제, 요청량 변화, 장애 대응, 버전 교체, 롤백, 로그 확인, 메트릭 관찰 같은 일이 계속 붙는다. 강의 후반부로 갈수록 이런 운영 관점을 계속 넓혀 갔다.
결국 서비스 운영에서는 “좋은 모델”보다 “안정적으로 돌아가는 시스템”이 더 중요해질 때가 많겠다는 생각이 들었다. 정확도가 조금 높아도 장애가 잦거나 응답이 느리면 실제 제품에서는 의미가 떨어질 수 있다. 그래서 MLOps는 모델 품질과 시스템 품질을 동시에 보는 역할이라는 말이 자연스럽게 받아들여졌다.
실제 문제 3가지를 나눠 설명한 부분도 인상적이었다. 개발 단계에서는 로컬에서는 잘 되는데 클라우드 결과가 다름, 배포 단계에서는 API 목표는 1초인데 체감은 3초, 운영 단계에서는 정확도 95%였는데 6개월 뒤 85%로 하락 같은 식으로 문제를 제시했다. 원인도 현실적이었다. 전처리 불일치, 라이브러리 버전 차이, 콜드스타트, 모델 로드 지연, 데이터 드리프트 같은 것들이다. 이걸 보니 운영 이슈는 대개 한 군데만 고치면 끝나는 문제가 아니었다.
프런트엔드, 백엔드, 인프라는 AI와 따로 떨어져 있지 않았다
React 예시, API 요청 예시, FastAPI 코드, Kubernetes YAML이 한 강의 안에 같이 나온 것도 인상적이었다. 보통은 이걸 서로 다른 영역처럼 배우는데, 실제 서비스에서는 다 이어져 있다. 프런트엔드가 어떤 요청을 보내는지 알아야 API를 설계할 수 있고, API 구조를 알아야 모델 입력과 출력 형식을 정할 수 있고, 그걸 알아야 컨테이너와 배포 구성도 안정적으로 잡을 수 있다.
이 흐름을 보고 나니 AI 서비스 운영에서 필요한 역량이 왜 점점 넓어지는지 알 것 같았다. 모델링만 깊게 아는 사람, 백엔드만 아는 사람, 인프라만 아는 사람이 각자 따로 있는 구조도 필요하지만, 그 사이 연결점을 이해하는 사람이 점점 더 중요해질 수밖에 없다. 이번 특강은 그 연결 지점을 꽤 선명하게 보여 준 시간이었다.
역할 구분도 도움이 됐다. 데이터 사이언티스트는 노트북 실험과 모델 학습, 백엔드/ML 엔지니어는 API 개발과 서비스 연동, MLOps/플랫폼은 인프라 자동화와 파이프라인, 프론트엔드/앱은 UX와 클라이언트 연결, SRE/DevOps는 신뢰성과 운영을 맡는 식이었다. 이렇게 구분하고 나니, 한 서비스 안에서 누가 어느 단계에서 무엇을 보는지가 훨씬 선명해졌다.
실무에서는 버전과 운영 기록이 더 중요해 보였다
강의 중간중간에는 버전 관리와 배포 버전 구분, 운영 상태 확인 같은 맥락도 계속 나왔다. 이미지 태그, 모델 버전, 배포 설정이 왜 분리되어야 하는지, 바뀐 버전이 문제를 만들었을 때 어떻게 원인을 좁혀 갈 수 있는지 같은 생각이 자연스럽게 따라왔다.
공부할 때는 같은 파일 위에 계속 덮어쓰고, 새 실험도 로컬에서 그냥 이어서 돌리기 쉬운데, 실제 운영 환경에서는 그 방식이 통하지 않는다. 어떤 버전의 모델이 어떤 코드와 어떤 인프라 설정으로 돌고 있는지 명확해야 하고, 문제가 생기면 빠르게 이전 상태로 돌아갈 수 있어야 한다. 이걸 보고 나니 MLOps가 “AI + DevOps”라는 단순 합성어보다 훨씬 더 운영 문화에 가까운 개념처럼 보였다.
특히 코드 -> 이미지 빌드 -> 레지스트리 푸시 -> Deployment 업데이트 -> 롤링 업데이트로 이어지는 배포 단계 설명이 좋았다. 서비스가 실제로는 선언형 설정과 헬스체크, 점진적 교체 같은 안전장치를 통해 바뀐다는 점이 잘 보였다. 단순히 kubectl apply 한 줄로 끝나는 게 아니라, 그 안에 무중단 배포와 롤백 전략까지 들어 있다는 걸 다시 짚어 준 셈이었다.

모니터링은 생각보다 세 층으로 나뉘어 있었다
후반부 모니터링 파트도 매우 유익했다. 강의에서는 모니터링을 하나로 뭉뚱그리지 않고 인프라, 모델, 비즈니스 세 축으로 나눴다. 인프라 쪽은 CPU, 메모리, latency 같은 시스템 상태를 보고, 모델 쪽은 accuracy drop, PSI 같은 드리프트 지표를 보고, 비즈니스 쪽은 CTR, 전환율 같은 실제 서비스 성과를 본다는 설명이었다.
이 구분이 왜 좋았냐면, 같은 장애처럼 보여도 어느 층에서 문제가 시작됐는지에 따라 봐야 하는 지표가 완전히 달라지기 때문이다. 사용자가 추천이 이상하다고 느끼는 문제는 모델 드리프트일 수도 있고, 단순히 응답이 느려서 체감이 나쁜 것일 수도 있고, 아예 상품 구성이 바뀌어 KPI가 흔들리는 문제일 수도 있다. 그래서 운영에서는 느리다 -> 모델이 이상하다 -> 왜 KPI가 떨어졌나 식으로 위아래를 같이 봐야 한다는 점이 분명했다.

데이터 드리프트는 생각보다 일상적인 문제였다
데이터 드리프트 설명도 꽤 인상적이었다. 운영 중 입력 데이터 분포가 학습 시점과 달라지는 현상이라는 정의 자체는 익숙했지만, 겨울에 학습한 의류 모델이 여름 데이터로 성능이 떨어지는 사례를 보니 훨씬 실감났다. 정확도가 95%에서 87%까지 떨어졌다가, 최신 데이터를 포함해 재학습하고 다시 배포하니 회복되는 흐름도 함께 보여 줬다.
이 부분이 좋았던 건 드리프트를 단순한 이론이 아니라 모니터링 -> 분석 -> 재학습 -> 재배포 루프를 돌리는 실제 트리거로 설명했다는 점이다. 계절성, 사용자 변화, 전처리 변경, 스키마 변화가 모두 운영 중에는 충분히 일어날 수 있는 일이기 때문에, MLOps는 한 번 잘 만들어 두고 끝나는 게 아니라 변화를 계속 감지하고 따라가는 체계에 더 가깝다는 생각이 들었다.
롤아웃 전략과 가드레일까지 들어가니 운영 감각이 더 선명해졌다
롤링 업데이트, 블루-그린, 카나리 세 가지 배포 전략을 비교한 부분도 좋았다. 일반적인 웹 서비스에는 롤링 업데이트가 무난하고, 전환이 명확해야 할 때는 블루-그린이 좋고, 불확실성이 큰 모델 배포에는 카나리가 특히 잘 맞는다는 설명이 이어졌다. ML 서빙에서는 새 모델이 진짜 더 나은지 운영 트래픽 일부로 먼저 검증해야 하는 경우가 많기 때문에, 카나리 배포가 왜 자주 언급되는지 이해가 갔다.
마지막 자동화와 가드레일 파트는 더 실무적이었다. 드리프트나 성능 저하를 감지하면 파이프라인이 자동으로 돌고, 새 모델이 기존 기준선을 넘는지 검증하고, 승인 게이트를 통과한 뒤, 점진적으로 롤아웃하면서 이상 시 자동 롤백하는 흐름이었다. 강의에서도 속도를 위한 자동화와 안전을 위한 가드레일의 균형이 중요하다고 했는데, 이 문장이 MLOps의 성격을 가장 간단하게 보여 주는 말 같았다.

커리어 관점에서도 연결 지점이 중요해 보였다
마지막 커리어 파트도 기억에 남는다. 프론트 강점을 살려 서비스를 연결하는 ML 애플리케이션 엔지니어, AI를 자연스럽게 UX에 녹이는 프론트엔드 + AI, 그리고 신뢰성과 자동화를 책임지는 플랫폼/신뢰성 엔지니어 같은 경로를 나눠 보여 줬는데, 이 구성이 꽤 현실적이었다.
특히 한 번에 모든 걸 다 하려 하기보다, 내 기존 강점 위에 한 걸음만 더 얹으라는 메시지가 좋았다. 프론트를 하던 사람이 FastAPI와 서빙을 이해하면 훨씬 넓은 역할로 갈 수 있고, 백엔드를 하던 사람이 컨테이너와 쿠버네티스를 이해하면 운영 쪽까지 확장할 수 있다. MLOps가 꼭 특정 직함 하나가 아니라, 기존 기술 기반 위에 서비스 운영 감각을 더하는 방향으로도 볼 수 있다는 점이 인상 깊었다.
들으면서 남긴 내 생각
이번 3월 13일 특강은 AI 서비스가 어디서부터 어려워지는지를 꽤 정확하게 보여 준 강의였다. 예전에는 모델을 잘 만드는 것과 서비스에 붙이는 것을 비교적 가까운 일처럼 생각했는데, 이번에는 그 사이에 API 설계, 컨테이너화, 배포, 리소스 관리, 모니터링, 버전 관리라는 꽤 긴 다리가 있다는 걸 다시 느꼈다.
특히 좋았던 건 강의가 추상적으로 흐르지 않았다는 점이다. FastAPI 예시, Dockerfile, Kubernetes Deployment, 프런트엔드 요청 예시까지 다 보여 주니 모델이 실제로 서비스에 들어가는 장면이 머릿속에 더 선명하게 그려졌다. 그냥 “MLOps가 중요하다”는 말로 끝나는 게 아니라, 왜 중요한지와 어디서부터 공부를 이어 가야 하는지가 같이 보였다.
앞선 특강들이 사용자 경험과 포트폴리오 전략 쪽에 더 가까웠다면, 이번 3월 13일 강의는 AI를 실제 운영 시스템으로 바라보게 만든 시간이었다. 앞으로 AI 프로젝트를 할 때도 모델 정확도만 보는 게 아니라, 이걸 어떻게 API로 만들고 어떻게 운영 가능한 상태로 가져갈지까지 같이 생각해야겠다는 기준이 생겼다. 한 번에 완벽한 시스템을 만들겠다는 생각보다, 모니터링하고 개선하고 재배포하는 루프를 설계하는 쪽으로 사고가 조금 바뀐 것도 이번 강의 덕분이었다.
Community
Comments
Comments appear immediately. Use report if something needs review.
No comments yet.