Data Pipelines 테스트: 무엇을 검증하고 언제
Source: Dev.to

응용 프로그램 개발자에게 코드를 어떻게 테스트하는지 물어보면 단위 테스트, 통합 테스트, CI/CD 파이프라인, 그리고 커버리지 메트릭을 설명할 것입니다. 데이터 엔지니어에게 같은 질문을 하면 가장 흔한 답은 “우리는 대시보드를 확인합니다.” 입니다.
데이터 파이프라인은 소프트웨어입니다. 입력, 로직, 그리고 출력이 있습니다. 버그가 있을 수 있고, 조용히 깨질 수도 있습니다. 그리고 오류 페이지를 띄우는 애플리케이션 버그와 달리, 데이터 버그는 그럴듯해 보이는 숫자를 만들어냅니다—누군가 그 숫자를 기반으로 비즈니스 결정을 내릴 때까지.
Pipelines Are Software — They Need Tests
데이터 파이프라인 테스트에 대한 기준은 애플리케이션 코드보다 낮아서는 안 됩니다. 오히려 더 높아야 합니다. 애플리케이션 버그는 보통 눈에 띕니다(깨진 UI, 요청 실패). 데이터 버그는 보이지 않습니다(잘못된 집계, 누락된 행, 오래된 값) 그리고 그 영향은 시간이 지날수록 복합적으로 커집니다.
그럼에도 대부분의 데이터 팀은 자동화된 테스트가 없습니다. 수동 점검, 분석가 불만, 그리고 운에 의존합니다. 파이프라인을 테스트한다는 것은 문제를 소비자에게 전달되기 전에 잡아내는 것이지, 전달된 후에 잡는 것이 아닙니다.
데이터 테스트 피라미드
소프트웨어 엔지니어링의 테스트 피라미드를 차용하여 데이터에 적용합니다:
| 레이어 | 초점 | 특성 |
|---|---|---|
| 베이스 | 스키마 및 계약 테스트 | 빠르고 저렴하며 모든 파이프라인 실행 시 실행됩니다. 출력 스키마가 소비자가 기대하는 것(컬럼, 데이터 타입, 제약조건)과 일치하는지 확인합니다. |
| 중간 | 데이터 검증 테스트 | 출력값을 확인합니다(고유성, 널값 아님, 범위, 참조 무결성). |
| 상단 | 회귀 및 통합 테스트 | 오늘의 출력을 과거 패턴과 비교합니다(행 수, 총합, 분포). |
베이스에서 더 많은 테스트를 실행하세요(저렴하고 빠름) 그리고 상단에서는 적게 실행하세요(비싸지만 포괄적).
스키마 및 계약 테스트
스키마 테스트는 시작하기에 가장 간단하고 효과적인 지점입니다. 각 파이프라인 실행 후 다음을 검증합니다:
- 컬럼 존재 – 예상되는 모든 컬럼이 존재합니다.
- 데이터 타입 – 컬럼이 예상되는 타입을 가지고 있습니다.
- Not‑null 제약 – 필수 컬럼에 null이 없습니다.
- 고유성 – 기본키 컬럼에 중복이 없습니다.
-- Example schema and contract tests
-- Check for unexpected nulls
SELECT COUNT(*) AS null_count
FROM orders
WHERE order_id IS NULL OR customer_id IS NULL;
-- Check for duplicates
SELECT order_id, COUNT(*) AS cnt
FROM orders
GROUP BY order_id
HAVING COUNT(*) > 1;

런타임 데이터 검증
스키마 테스트는 구조를 검증합니다. 데이터‑검증 테스트는 내용을 검증합니다. 파이프라인 실행 후마다, 작업을 성공으로 표시하기 전에 실행하세요:
- 범위 검사 – 숫자 값이 예상 범위 내에 있는지 확인합니다(예: 주문 총액이 음수가 없어야 함).
- 참조 무결성 – 외래 키가 존재하는 레코드를 참조하고 있는지 확인합니다.
- 신선도 검사 – 가장 최근 이벤트 타임스탬프가 예상 창 안에 있는지 확인합니다.
- 볼륨 검사 – 행 수가 과거 평균(예: 최근 7일 평균의 ±20 % 범위) 내에 있는지 확인합니다.
- 맞춤 비즈니스 규칙 – “모든 청구서는 최소 하나의 라인 아이템을 가져야 함” 또는 “직원의 시작일이 미래일 수 없음”과 같은 도메인‑특정 주장.
회귀 및 이상 탐지
회귀 테스트는 오늘의 출력 결과를 과거 기준선과 비교합니다:
- 집계 비교 – 주요 지표(총 매출, 행 수, 고유 고객 수)를 이전 실행과 비교합니다. 임계값(예: ±15 %)을 초과하는 편차를 표시합니다.
- 분포 검사 – 범주형 열(상태 값, 국가 코드)의 분포를 과거 표준과 비교합니다. “unknown” 상태가 급증하면 소스 스키마 변경을 나타낼 수 있습니다.
- 추세 분석 – 시간에 따라 지표를 모니터링하여 상류 데이터 품질 문제를 나타낼 수 있는 점진적인 변동을 감지합니다.
빠른 스키마 검사부터 포괄적인 회귀 검사까지 테스트를 계층화함으로써 데이터 팀은 버그를 조기에 발견하고 파이프라인에 대한 신뢰를 유지하며, 잘못된 데이터에 기반한 비용이 많이 드는 하류 의사결정을 방지할 수 있습니다.
시간에 따른 메트릭 추적
몇 주에 걸친 행 수의 점진적인 감소는 일일 검사에서 놓치는 누수를 나타낼 수 있습니다.
회귀 테스트는 과거 기준선과 임계값 조정이 필요하기 때문에 유지 관리 비용이 더 많이 듭니다.
간단하게 시작하세요 (행 수 ± 20 %) 그리고 “정상”이 어떤 모습인지 파악하면서 다듬어 가세요.
다음에 할 일
오늘 가장 중요한 파이프라인에 세 가지 테스트를 추가하세요:
- 고유성 검사를 기본 키에 적용합니다.
- NULL 검사를 필수 컬럼에 적용합니다.
- 행 수 비교를 어제 출력과 비교합니다.
각 파이프라인 실행 후에 테스트를 실행하세요. 이 세 가지 테스트만으로도 데이터 문제가 소비자에게 도달하기 전에 대부분을 잡아낼 수 있습니다.
