본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] MLOps의 핵심, DVC로 데이터와 모델 버전을 완벽하게 관리하는 7가지 방법

by Papa Martino V 2026. 4. 20.
728x90

DVC(Data Version Control)
DVC (Data Version Control)

 

데이터 사이언스와 머신러닝 프로젝트를 진행하다 보면 가장 먼저 마주하는 난관은 소스 코드가 아닙니다. 바로 "어떤 데이터로 이 모델을 학습시켰는가?"에 대한 추적입니다. 일반적인 Git은 텍스트 기반의 코드 관리에는 탁월하지만, 기가바이트(GB) 단위의 데이터셋이나 대용량 모델 파일(.pth, .pkl, .h5)을 관리하기에는 적합하지 않습니다. 이를 해결하기 위해 등장한 표준 솔루션이 바로 DVC(Data Version Control)입니다. 본 포스팅에서는 Python 환경에서 DVC를 활용하여 데이터셋과 모델의 리니지(Lineage)를 추적하고, 실무 수준의 파이프라인을 구축하는 구체적인 해결 방안 7가지를 심도 있게 다룹니다.


1. 왜 Git이 아닌 DVC인가? 핵심 차이 분석

Git은 파일의 차이점(Diff)을 저장하는 방식이기에 바이너리 파일이 조금만 변경되어도 저장소의 용량이 기하급수적으로 늘어납니다. 반면 DVC는 실제 파일은 외부 스토리지(S3, GCS, NAS 등)에 저장하고, Git에는 해당 파일의 메타데이터(Hash 값)가 담긴 가벼운 텍스트 파일(.dvc)만 커밋합니다.

비교 항목 Git (소스 코드 관리) DVC (데이터/모델 관리)
주요 관리 대상 .py, .ipynb, .yaml (텍스트) .csv, .jpg, .pth, .bin (대용량 바이너리)
저장 방식 로컬 및 원격 Git 레포지토리 외부 클라우드/로컬 스토리지 (S3, SSH 등)
버전 추적 원리 코드 라인 단위 스냅샷 파일 체크섬(MD5) 기반 메타데이터 관리
협업 방식 git pull / push dvc pull / push

2. 실무 적용을 위한 핵심 Sample Example 7선

개발자가 로컬 환경에서 클라우드 연동까지 즉시 적용 가능한 실전 코드 예제입니다.

Example 1: DVC 초기화 및 데이터 추적 시작하기

프로젝트 폴더에서 DVC를 시작하고 특정 데이터 폴더를 추적 리스트에 추가하는 방법입니다.

# 1. dvc 설치 (pip install dvc)
# 2. 프로젝트 초기화
dvc init

# 3. 대용량 데이터셋 추가 (예: data/raw_data.zip)
dvc add data/raw_data.zip

# 4. 생성된 .dvc 파일을 Git에 등록
git add data/raw_data.zip.dvc .gitignore
git commit -m "Add raw dataset tracking with DVC"

Example 2: 원격 스토리지(Remote) 설정 방법

팀원들과 데이터를 공유하기 위해 Google Drive나 AWS S3를 저장소로 설정하는 방법입니다.

# Google Drive를 원격 저장소로 설정 (공유 폴더 ID 사용)
dvc remote add -d myremote gdrive://1a2b3c4d5e6f7g8h9i0j

# 설정 내용 커밋
git add .dvc/config
git commit -m "Configure Google Drive as DVC remote"

# 데이터 업로드
dvc push

Example 3: 데이터 버전 전환(Checkout)을 통한 실험 재현

과거의 특정 데이터 시점으로 되돌아가 모델 성능을 재검증해야 할 때 사용합니다.

# 1. Git을 이용해 과거의 특정 커밋(메타데이터)으로 이동
git checkout v1.0

# 2. 메타데이터에 기록된 실제 대용량 파일을 스토리지에서 가져오기
dvc checkout

# 이제 현재 폴더의 데이터는 v1.0 당시의 상태로 물리적으로 변경됨

Example 4: Python Script 내에서 DVC 데이터 로드하기

DVC API를 활용하여 pandas 데이터프레임을 코드 상에서 직접 호출하는 고급 기법입니다.

import dvc.api
import pandas as pd

# dvc.api.get_url을 통해 현재 활성화된 데이터 경로 확보
data_url = dvc.api.get_url(
    path='data/train_dataset.csv',
    repo='https://github.com/user/my-ml-repo',
    rev='main'
)

df = pd.read_csv(data_url)
print(f"Loaded dataset with {len(df)} rows.")

Example 5: 데이터 전처리-학습 파이프라인(DAG) 구성

데이터가 변하면 자동으로 모델 학습이 실행되도록 의존 관계를 정의하는 `dvc.yaml` 생성 방법입니다.

# dvc run을 통한 단계(Stage) 정의
dvc run -n preprocess \
        -d src/preprocess.py -d data/raw.csv \
        -o data/cleaned.csv \
        python src/preprocess.py

dvc run -n train \
        -d src/train.py -d data/cleaned.csv \
        -o models/model.pkl \
        python src/train.py

Example 6: 모델 성능 지표(Metrics) 기록 및 비교

학습 결과인 Accuracy, F1-score 등을 DVC에서 추적하여 버전별 성능 차이를 시각화합니다.

# metrics 파일 등록 (JSON 형식 추천)
dvc metrics add scores.json

# 여러 버전의 성능 비교
dvc metrics show
# 출력 결과 예시:
# Path         accuracy    loss
# scores.json  0.942       0.05

Example 7: 가중치 파일(Model Weight) 관리 및 배포

최종 학습된 `.pth` 또는 `.onnx` 파일을 버전링하여 서빙 환경으로 전달하는 프로세스입니다.

# 모델 파일 추가
dvc add models/final_best_model.onnx

# 태그 생성 (Release 버전 명시)
git tag -a "v1.0.2-production" -m "Model optimized for low latency"

# 푸시
git push origin v1.0.2-production
dvc push

3. DVC 도입 시 얻을 수 있는 3가지 비즈니스 가치

DVC는 단순한 기술적 도구를 넘어 협업 생산성을 극대화합니다.

  1. 재현성(Reproducibility) 보장: 6개월 전 모델이 왜 더 높은 정확도를 보였는지, 당시의 데이터셋과 하이퍼파라미터를 1초 만에 복구할 수 있습니다.
  2. 저장소 최적화: 중복 데이터를 방지하고 파일 변경 사항만 효율적으로 관리하여 대규모 프로젝트의 인프라 비용을 절감합니다.
  3. CI/CD 연동: GitHub Actions 등과 결합하여 데이터 업데이트 시 자동으로 모델 학습 및 성능 테스트를 수행하는 파이프라인 구축이 가능합니다.

4. 결론 및 향후 과제

데이터 중심 인공지능(Data-centric AI) 시대에 모델 소스 코드만큼 중요한 것은 그 모델을 만든 데이터의 이력입니다. DVC는 Python 생태계와 가장 긴밀하게 연결되는 도구이며, Git의 워크플로우를 그대로 계승한다는 점에서 학습 곡선이 낮습니다. 지금 즉시 소규모 프로젝트부터 `dvc init`을 실행해 보시기 바랍니다.

참고 문헌 및 출처

  • DVC Official Documentation (https://dvc.org/doc)
  • MLOps Engineering on AWS (O'Reilly Media)
  • Iterative.ai Engineering Blog
  • Practical MLOps by Noah Gift & Alfredo Deza
728x90