[DATA-011][실무] 믿을 수 있는 데이터와 흐름 관리하기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[DATA-011][실무] 믿을 수 있는 데이터와 흐름 관리하기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 67회 작성일 26-09-05 22:34

본문

[이번 수업]
데이터가 많아도 출처와 의미를 모르거나 값이 틀리면 안전한 결정을 내리기 어렵습니다. 이번에는 데이터 품질을 측정하고, 어디서 와서 어떻게 바뀌었는지 계보(lineage)를 남기며, 담당·접근·보존 규칙을 정하는 거버넌스를 실습합니다.

[선수지식]
DATA-001~010의 파일 형식, 정리, 통계, ETL·ELT와 배치 처리 개념을 알고 CSV·JSON과 Python 기본 문법을 이해해야 합니다.

[학습목표]
1. 목적에 맞는 데이터 품질 차원과 지표를 정한다.
2. 원천·변환·결과를 잇는 데이터 계보를 기록한다.
3. 소유권·접근·보존·개인정보 규칙을 운영 절차로 만든다.

[핵심개념]
품질은 데이터가 사용 목적에 맞는 정도입니다. 완전성은 필요한 값이 채워졌는지, 유효성은 형식과 범위를 지키는지, 유일성은 중복 키가 없는지, 적시성은 필요한 때 갱신되는지를 봅니다. 정확성은 실제 사실이나 신뢰할 기준과 비교해야 하므로 빈칸 검사만으로 증명할 수 없습니다. 각 지표에 계산법, 단위, 허용 기준, 담당자와 실패 시 조치를 적어야 같은 의미로 운영할 수 있습니다.

계보는 데이터의 원천, 거친 작업, 생성된 결과와 시간을 연결한 기록입니다. 보고서 값이 이상할 때 어느 원천과 변환이 영향을 줬는지 찾고, 스키마 변경의 영향 범위를 확인하는 데 씁니다. 파일 이름만 남기지 말고 데이터셋 식별자, 버전, 실행 ID, 입력·출력, 변환 코드 버전을 함께 기록합니다.

거버넌스는 데이터를 쓸 수 없게 막는 일이 아니라 책임 있게 찾고 이해하고 사용하는 규칙입니다. 데이터 소유자는 의미와 사용 결정을 책임지고, 관리 담당은 정의·품질·접근 요청을 돌봅니다. 공통 용어집, 분류 등급, 최소 권한, 변경 승인, 보존·삭제, 품질 경보와 문제 해결 기한을 정합니다. 개인정보는 목적에 필요한 만큼만 모으고 접근과 사용을 기록합니다.

[따라하기]
orders.csv를 만드세요. 빈 금액 하나와 중복 주문 번호 하나를 일부러 넣습니다.
```csv
order_id,amount
A1,100
A2,
A2,200
```
check_data.py를 같은 폴더에 만듭니다.
```python
import csv, json

with open("orders.csv", newline="", encoding="utf-8") as file:
    rows = list(csv.DictReader(file))

seen = set()
duplicates = set()
for row in rows:
    key = row["order_id"]
    if key in seen:
        duplicates.add(key)
    seen.add(key)

missing_amount = sum(not row["amount"].strip() for row in rows)
report = {
    "dataset": "orders.csv",
    "rows": len(rows),
    "checks": {
        "missing_amount": missing_amount,
        "duplicate_order_id": sorted(duplicates),
    },
    "lineage": {
        "source": "orders.csv",
        "transform": "check_data.py",
        "output": "quality_report",
    },
}
report["passed"] = missing_amount == 0 and not duplicates
print(json.dumps(report, ensure_ascii=False, indent=2))
```
macOS·Linux는 `python3 check_data.py`, Windows는 `py check_data.py`로 실행합니다. 예상 결과는 rows 3, missing_amount 1, duplicate_order_id에 A2, passed false입니다. A2의 빈 금액을 채우고 중복 행의 주문 번호를 A3으로 바꾸면 passed가 true가 됩니다.

[흔한 실수]
검사 통과를 곧 정확성으로 오해하거나 모든 데이터셋에 같은 기준을 적용하지 마세요. 원천을 덮어써서 재현할 수 없게 만들고, 계보 도구만 설치한 뒤 실행 ID와 코드 버전을 수집하지 않는 경우도 많습니다. 품질 경보에 담당자와 해결 기한이 없으면 보고서만 쌓입니다.

[보안 주의]
실제 개인정보를 예제·로그·오류 메시지에 복사하지 마세요. 데이터 분류에 따라 읽기·쓰기·내보내기 권한을 나누고 전송·저장 시 보호하며 접근 기록과 삭제 절차를 둡니다. 외부에서 받은 CSV는 신뢰하지 말고 격리된 복사본으로 검증하세요. 스프레드시트로 내보낼 때 수식으로 해석될 값도 안전하게 처리해야 합니다. 실습은 가짜 데이터와 본인 소유 로컬 환경에서만 진행합니다.

[직접 해볼 과제]
amount가 숫자이고 0보다 큰지 검사하는 valid_amount 항목을 추가하세요. 데이터셋 이름, 소유자, 목적, 갱신 주기, 품질 기준, 원천, 변환, 접근 등급, 보존 기간, 삭제 담당을 적은 한 페이지 데이터 계약도 작성합니다.

[확인문제]
1. 형식 검사만 통과한 데이터가 정확하다고 단정할 수 없는 이유는 무엇인가요?
2. 데이터 계보에 실행 ID와 코드 버전을 남기는 이유는 무엇인가요?
3. 데이터 소유자와 관리 담당의 책임은 어떻게 다른가요?

[다음 학습]
DATA-012에서 원천 데이터 수집, 검증, 변환, 품질 보고서와 대시보드를 하나의 재현 가능한 프로젝트로 연결합니다.

[공식 참고 자료]
https://www.w3.org/TR/vocab-dqv/
https://www.w3.org/TR/prov-o/
https://openlineage.io/docs/spec/object-model/
https://www.nist.gov/privacy-framework
https://docs.python.org/3/library/csv.html
https://docs.python.org/3/library/json.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
3,903
어제
6,862
최대
16,772
전체
769,854
Copyright © 소유하신 도메인. All rights reserved.