고객 데이터 다루기 · 정제와 검증 · 실습
재사용 가능한 검증기 만들기
목표
한 번 쓰고 버리는 정제 스크립트가 아니라, 매주 도착하는 파일을 자동으로 판정하는 검증기를 만들 수 있게 됩니다.
왜 중요한가
검증기의 진짜 시험은 깨진 파일이 아니라 정상 파일입니다. 규칙이 너무 빡빡해서 멀쩡한 파일도 실패시키면, 사람이 매주 "또 그거겠지" 하며 무시하기 시작하고, 두 달 뒤 진짜 문제가 왔을 때도 똑같이 무시합니다. 그 시점에는 검증기가 있는 것이 없는 것보다 나쁩니다 — 있다고 믿게 만들면서 실제로는 아무것도 막지 못하기 때문입니다.
그래서 검증기는 항상 두 방향으로 시험합니다. 정상 파일에 통과하는가, 깨진 파일에 실패하는가. 그리고 결과는 종료 코드로 말해야 합니다. 통과면 0, 실패면 0 이 아닌 값. 그래야 배치 파이프라인에 그대로 꽂힙니다.
/opt/data/validate/ 에 네 개의 파일이 있습니다. 세 개는 서로 다른 방식으로 깨져 있고 하나는 멀쩡합니다. 모든 파일의 헤더는 id,customer,amount,region,date 입니다.
규칙 세 가지
- 형식: 필드가 정확히 5개,
customer가 비어 있지 않음,amount가 정수 - 중복:
id가 유일해야 함 (같은 id 가 다시 나오면 그 행이 위반) - 범위:
amount가 1 이상 10000000 이하
단계
1. /root/validate 디렉터리를 만드세요.
2. bad_schema.csv 의 형식 위반 행 수를 /root/validate/schema_bad.txt 에 적으세요.
3. bad_dupe.csv 에서 중복으로 버려야 할 행 수를 /root/validate/dupe_rows.txt 에 적으세요.
4. bad_range.csv 의 범위 위반 행 수를 /root/validate/range_bad.txt 에 적으세요.
5. good.csv 의 위반 행 수를 /root/validate/good_bad.txt 에 적으세요.
6. 네 값의 합을 /root/validate/total_bad.txt 에 적으세요.
7. /root/validate/validate.sh 를 만드세요. 첫 번째 인자로 CSV 경로를 받고, 위반이 하나도 없으면 종료 코드 0, 하나라도 있으면 0 이 아닌 코드로 끝나야 합니다.
8. /root/validate/report.md 에 네 파일의 이름과 각각의 위반 건수, 그리고 총합을 적으세요.
참고
- 중복 id 찾기:
cut -d, -f1 파일 | tail -n +2 | sort | uniq -d - 종료 코드 지정은
exit 0/exit 1, 확인은 실행 직후echo $? - 채점 시
validate.sh를good.csv와bad_schema.csv에 각각 돌려 봅니다. 둘 다 올바르게 판정해야 통과합니다. - 흔한 실수 1: 5번에서 0 이 아닌 값이 나오는 것. 과탐지하는 검증기는 곧 무시당합니다.
- 흔한 실수 2: 7번에서 화면에만 결과를 출력하고 종료 코드를 안 바꾸는 것. 기계가 읽는 신호가 먼저입니다.
단계 8개
- 작업 디렉터리 만들기
- 형식 위반 행 세기
- 중복 행 세기
- 범위 위반 행 세기
- 정상 파일 확인하기
- 전체 위반 합계 내기
- 검증 스크립트 만들기
- 검증 리포트 쓰기