ML 엔지니어가 알아야 할 핵심 스킬 가이드 - 채용 담당자와 지원자를 위한 필수 체크리스트
⏱️ 예상 읽기 시간: 12분
서론
모델을 만드는 것과, 그 모델이 실제 서비스 위에서 동작하게 만드는 것은 다른 일입니다. 요즘 기업들이 원하는 건 후자입니다. 실험실 수준의 정확도가 아니라, 프로덕션 환경에서 안정적으로 운영되는 ML 시스템을 만들고 유지할 수 있는 엔지니어입니다.
GitHub에서 40.6k stars를 받은 Made-With-ML 프로젝트가 제시하는 실무 중심의 ML 엔지니어링 관점을 바탕으로, 우리 회사에서 ML 엔지니어가 갖춰야 할 역량을 정리했습니다.
왜 이 가이드가 필요한가?
채용 공고와 실무 사이의 간극
일반적인 채용 공고는 이렇게 씁니다. “PyTorch, TensorFlow 사용 가능”, “Python 경험”, “통계학 지식”, “데이터 분석 3년”. 틀린 말은 아니지만, 실제 프로덕션에서 필요한 것과 거리가 있습니다.
프로덕션에서 필요한 건 다릅니다. 설계부터 배포, 운영까지 전 과정을 이해하는 엔지니어, 소프트웨어 엔지니어링 원칙을 ML에 적용하는 사람, 대규모 시스템을 구축하고 안정적으로 운영할 수 있는 사람입니다.
Made-With-ML이 제시하는 접근법
Design, Develop, Deploy, Iterate. 네 단계를 순환하면서 실제 프로덕션 환경에서 ML 시스템을 만드는 방법을 제시합니다. 이 가이드도 그 흐름을 따릅니다.
핵심 역량 체크리스트
1. 기본 프로그래밍 & 개발 환경
필수 기술 스택입니다.
python_skills = {
"core": ["Python 3.8+", "Type hints", "Async/await"],
"data_science": ["NumPy", "Pandas", "Scikit-learn"],
"deep_learning": ["PyTorch", "Transformers", "Ray"],
"web": ["FastAPI", "Pydantic", "Uvicorn"],
"testing": ["pytest", "unittest", "coverage"],
"packaging": ["pip", "conda", "poetry", "requirements.txt"]
}
개발 환경 관리도 기본기입니다. conda, virtualenv, poetry로 가상환경을 관리하고, requirements.txt나 pyproject.toml로 의존성을 고정합니다. pre-commit hooks와 linting으로 코드 품질을 유지합니다.
2. 데이터 엔지니어링
데이터 파이프라인을 구성하는 능력입니다. 추출, 전처리, 검증, 적재 각 단계를 명확하게 분리하고, 각 단계에서 무엇을 보장할지 정의할 수 있어야 합니다.
필수 역량입니다.
- 데이터 검증과 이상치 탐지
- 실시간 데이터 파이프라인 처리
- DVC, Git-LFS를 활용한 데이터 버전 관리
- Ray, Dask 같은 분산 처리 프레임워크 활용
3. 모델 개발 & 훈련
모델을 구성하고 훈련하는 것 자체는 기본입니다. 재현 가능한 훈련 과정, 체크포인트 저장, 포괄적인 평가 지표 설계가 함께 돼야 합니다.
핵심 기술입니다.
- Ray Train, PyTorch Distributed를 활용한 분산 훈련
- Ray Tune, Optuna로 하이퍼파라미터 튜닝
- 양자화, pruning, 지식 증류를 통한 모델 최적화
- MLflow, Weights & Biases로 실험 관리
4. 모델 배포 & 서빙
FastAPI와 Ray Serve를 조합한 서빙 구조가 실무에서 많이 씁니다.
@serve.deployment
@serve.ingress(app)
class MLService:
def __init__(self, model_path: str):
self.model = self.load_model(model_path)
@app.post("/predict")
async def predict(self, request: PredictionRequest) -> PredictionResponse:
try:
result = await self.model.predict(request.data)
return PredictionResponse(prediction=result)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
배포 전략입니다. Docker와 Kubernetes로 컨테이너화하고, RESTful API를 설계하며, Ray Serve나 Nginx로 부하를 분산합니다. Prometheus와 Grafana로 모니터링합니다.
5. MLOps & 인프라
CI/CD 파이프라인 예시입니다.
name: ML Pipeline
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: pytest tests/ --cov=madewithml --cov-report=xml
- name: Data tests
run: pytest tests/data --dataset-loc=$DATASET_LOC
- name: Model tests
run: pytest tests/model --run-id=$RUN_ID
운영 관리입니다. 모델 레지스트리와 A/B 테스트로 버전을 관리하고, 지연시간, 처리량, 정확도를 추적합니다. 롤백과 카나리 배포로 장애에 대응하고, 자동 스케일링으로 비용을 최적화합니다.
경험 수준별 기준
초급 (1-2년)
Python 기본 문법과 객체지향 프로그래밍, Pandas와 NumPy 활용, Scikit-learn과 PyTorch 기초, Git 기본 명령어를 갖추고 있어야 합니다. 주어진 데이터셋으로 분류 모델을 만들고 성능을 평가하는 과제를 독립적으로 수행할 수 있어야 합니다.
중급 (3-5년)
모듈화와 클래스 설계, 단위 테스트와 통합 테스트, end-to-end 파이프라인 구축, API 서빙과 컨테이너 배포, 코드 리뷰 참여와 기술 문서 작성 능력이 필요합니다. 실제 서비스에 배포할 수 있는 ML 시스템을 설계하고 구현하는 과제를 맡습니다.
고급 (5년 이상)
시스템 아키텍처 설계, 기술적 의사결정 주도, 팀 리드 경험, 최신 연구 동향 파악과 적용, 비즈니스 목표와 기술을 연결하는 능력이 있어야 합니다.
면접 질문 예시
시스템 설계 질문입니다.
- 1억 명의 사용자를 위한 추천 시스템을 어떻게 설계하겠습니까?
- 실시간 피드백을 반영하는 온라인 학습 시스템은 어떻게 구축합니까?
- A/B 테스트를 위한 모델 배포 전략을 설명해주세요.
최적화 질문입니다.
- 모델 추론 지연시간을 10ms 이하로 줄이는 방법은 무엇입니까?
- GPU 메모리 부족 문제를 어떻게 해결하겠습니까?
- 분산 훈련 시 통신 오버헤드를 최소화하는 방법은?
장애 대응 질문입니다.
- 프로덕션에서 모델 성능이 갑자기 떨어졌을 때 어떻게 접근합니까?
- 데이터 드리프트를 어떻게 감지하고 대응합니까?
팀별 역할 정의
ML Research Engineer: 새로운 모델 아키텍처 연구와 구현을 담당합니다. 논문 구현 능력, 실험 설계, PyTorch 고급 활용, 분산 훈련 경험이 필요합니다. SOTA 모델 벤치마크와 커스텀 모델 아키텍처를 결과물로 냅니다.
ML Platform Engineer: ML 인프라와 플랫폼 구축을 담당합니다. Kubernetes, Docker, 클라우드 서비스, CI/CD 파이프라인, 모니터링 시스템 역량이 필요합니다. ML 파이프라인 자동화와 모델 배포 시스템을 만듭니다.
MLOps Engineer: 모델 생명주기 관리를 담당합니다. MLflow, Kubeflow, 모델 버전 관리, A/B 테스트 설계, 데이터 드리프트 모니터링 능력이 필요합니다. 모델 레지스트리 관리와 자동 재훈련 시스템을 운영합니다.
학습 로드맵
Phase 1: Foundation (2-3개월)
1~4주: Python 고급 문법, Git & GitHub, VS Code 설정. 5~8주: NumPy, Pandas, 통계학 기초, 데이터 전처리. 9~12주: Scikit-learn, 모델 평가, 교차 검증, 하이퍼파라미터 튜닝.
Phase 2: Intermediate (3-4개월)
1개월: PyTorch 딥러닝, 이미지 분류, 자연어 처리 기초, 전이 학습. 2개월: FastAPI 기초, 모델 서빙 API, 데이터베이스 연동. 3개월: Docker 기초, 모델 컨테이너화, 클라우드 배포.
Phase 3: Advanced (4-6개월)
1분기: Ray 분산 훈련, Kubernetes 배포, 모니터링 시스템. 2분기: Made-With-ML 프로젝트 구현, CI/CD 파이프라인, A/B 테스트 시스템.
포트폴리오 평가 기준
코드 품질 체크리스트입니다.
- 모듈화된 코드 구조
- README와 docstring 완성도
- 단위 테스트 커버리지 80% 이상
- GitHub Actions 설정
- Docker 컨테이너 구성
- 로깅과 모니터링 구현
- 확장 가능한 아키텍처
채용 프로세스
서류 전형에서는 ML 프로젝트 경험, 프로덕션 배포 경험, GitHub 활동, 문서화 수준을 봅니다. 전공보다 실제 경험을 더 봅니다.
1차 기술 스크리닝 (1시간, 화상): 기본 개념 질문, 라이브 코딩 테스트, 프로젝트 경험 공유입니다.
2차 심화 기술 면접 (2시간, 대면 또는 화상): 시스템 설계 문제, 실무 상황 문제 해결, 코드 리뷰 세션입니다.
3차 문화 적합성 면접 (1시간): 팀워크와 소통 능력, 학습 의지, 회사 방향과의 일치 여부를 봅니다.
요약
이 가이드에서 강조하는 것은 세 가지입니다.
이론보다 실무 중심 역량. 모델을 만드는 것보다 프로덕션 환경에서 문제를 해결하는 능력을 봅니다.
전체 파이프라인 이해. 데이터 수집부터 모델 배포, 모니터링까지 end-to-end로 이해하는 사람을 찾습니다.
기본기. 코드 품질, 테스트, 문서화, 버전 관리는 ML 엔지니어에게도 소프트웨어 엔지니어와 같은 기준이 적용됩니다.
참고 자료
현장 피드백을 반영해 지속적으로 업데이트합니다.