Building a Reusable Validator
한국어 원문으로 표시합니다.
목표
한 번 쓰고 버리는 정제 스크립트가 아니라, 매주 도착하는 파일을 자동으로 판정하는 검증기를 만들 수 있게 됩니다.
왜 중요한가
검증기의 진짜 시험은 깨진 파일이 아니라 정상 파일입니다. 규칙이 너무 빡빡해서 멀쩡한 파일도 실패시키면, 사람이 매주 "또 그거겠지" 하며 무시하기 시작하고, 두 달 뒤 진짜 문제가 왔을 때도 똑같이 무시합니다. 그 시점에는 검증기가 있는 것이 없는 것보다 나쁩니다 — 있다고 믿게 만들면서 실제로는 아무것도 막지 못하기 때문입니다.
그래서 검증기는 항상 두 방향으로 시험합니다. 정상 파일에 통과하는가, 깨진 파일에 실패하는가. 그리고 결과는 종료 코드로 말해야 합니다. 통과면 0, 실패면 0 이 아닌 값. 그래야 배치 파이프라인에 그대로 꽂힙니다.
/opt/data/validate/ 에 네 개의 파일이 있습니다. 세 개는 서로 다른 방식으로 깨져 있고 하나는 멀쩡합니다. 모든 파일의 헤더는 id,customer,amount,region,date 입니다.
규칙 세 가지
- 형식: 필드가 정확히 5개,
customer가 비어 있지 않음,amount가 정수 - 중복:
id가 유일해야 함 (같은 id 가 다시 나오면 그 행이 위반) - 범위:
amount가 1 이상 10000000 이하
단계
/root/validate디렉터리를 만드세요.bad_schema.csv의 형식 위반 행 수를/root/validate/schema_bad.txt에 적으세요.bad_dupe.csv에서 중복으로 버려야 할 행 수를/root/validate/dupe_rows.txt에 적으세요.bad_range.csv의 범위 위반 행 수를/root/validate/range_bad.txt에 적으세요.good.csv의 위반 행 수를/root/validate/good_bad.txt에 적으세요.- 네 값의 합을
/root/validate/total_bad.txt에 적으세요. /root/validate/validate.sh를 만드세요. 첫 번째 인자로 CSV 경로를 받고, 위반이 하나도 없으면 종료 코드 0, 하나라도 있으면 0 이 아닌 코드로 끝나야 합니다./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번에서 화면에만 결과를 출력하고 종료 코드를 안 바꾸는 것. 기계가 읽는 신호가 먼저입니다.
작업 디렉터리 만들기
/root/validate 디렉터리를 만드세요.
/root/validate 아래에 결과를 모읍니다.
형식 위반 행 세기
bad_schema.csv 의 형식 위반 행 수를 /root/validate/schema_bad.txt 에 적으세요.
bad_schema.csv 에서 필드 수, 빈 고객명, 비정수 금액 셋 중 하나라도 어긴 행의 수입니다.
중복 행 세기
bad_dupe.csv 에서 중복으로 버려야 할 행 수를 /root/validate/dupe_rows.txt 에 적으세요.
bad_dupe.csv 에서 같은 id 가 다시 나온 행의 개수입니다. 처음 나온 행은 세지 않습니다.
범위 위반 행 세기
bad_range.csv 의 범위 위반 행 수를 /root/validate/range_bad.txt 에 적으세요.
bad_range.csv 에서 amount 가 1 이상 10000000 이하를 벗어난 행입니다. 0 도 위반입니다.
정상 파일 확인하기
good.csv 의 위반 행 수를 /root/validate/good_bad.txt 에 적으세요.
good.csv 에는 위반이 없어야 합니다. 여기서 0 이 안 나오면 검증기가 과탐지하는 것입니다.
전체 위반 합계 내기
네 값의 합을 /root/validate/total_bad.txt 에 적으세요.
네 파일에서 나온 수를 모두 더합니다.
검증 스크립트 만들기
/root/validate/validate.sh 를 만드세요. 첫 번째 인자로 CSV 경로를 받고, 위반이 하나도 없으면 종료 코드 0, 하나라도 있으면 0 이 아닌 코드로 끝나야 합니다.
파일 경로를 인자로 받아, 통과면 종료 코드 0, 위반이 있으면 0 이 아닌 값으로 끝나야 합니다.
검증 리포트 쓰기
/root/validate/report.md 에 네 파일의 이름과 각각의 위반 건수, 그리고 총합을 적으세요.
네 파일 이름과 각각의 위반 건수, 그리고 총합이 들어가야 합니다.