본 포스팅은 '데이터 품질'과 '데이터 다운타임'에 대해 설명하고, '데이터 품질'을 향상시키기 위한 방법들을 정리한 포스팅입니다.
1. 서론
데이터는 오늘날의 비즈니스와 의사결정의 핵심 자원이라고 할 수 있다. 그러나 데이터의 품질 문제나 다운타임은 빈번하게 예기치 않은 오류와 혼란을 초래한다. 이 글에서는 데이터 품질과 다운타임이 무엇인지 알아보고, 데이터 품질 문제를 해결하고 다운타임을 줄이기 위한 주요 전략과 도구를 살펴보려고 한다.
데이터 엔지니어로 일하다보면 다음과 같은 상황을 마주할 때가 있다.
👨💻 개발자: "쿼리 작업이 끝났습니다! 데이터 파이프라인도 다 구축했고요. 이제 필요한 데이터는 다 모인 거죠?"
🧑💼 현업 부서 담당자: "어... 그런데 필요한 데이터가 누락된 것 같은데요? 제가 요청한 필드는 안 보이네요."
👨💻 개발자: "네? 모든 필드를 다 넣었는데... 어디서 누락됐죠?"
🧑💼 현업 부서 담당자: "그리고 일부 데이터가 중복된 것 같아요. 보고서에 같은 항목이 여러 번 나와 있어서요."
👨💻개발자: "네? 데이터 모두 검증했는데… 다시 확인해 보겠습니다..."
데이터 분석가, 데이터 사이언티스트, AI 엔지니어 이외 비즈니스 의사결정을 내리는 CEO 등 모두가 만족할 때까지 위의 상황은 무한반복된다.
관련 조사에 따르면, 데이터 조직이 데이터 품질 문제를 처리하기 위해 전체 업무 시간의 40% 이상을 소모한다고 한다. 실제로 나 역시 이전 회사에서 업무를 처리할 때 하루에도 몇번씩 들어오는 데이터 문제를 처리하는데 많은 시간을 써 인터럽트가 걸린 경험이 많다. 만약 품질 이슈가 없었다면 더 흥미로운 프로젝트를 수행하거나 서비스 품질 향상에 더 많은 시간을 할애할 수 있었을 지도 모른다.
데이터 품질의 중요성
데이터 품질이란 데이터를 얼마나 정확하고, 일관되며, 완전하게 관리하고 있는지를 평가하는 기준이다.
쉽게 말해, 데이터가 믿을 만하고 사용하기에 적합한 상태인지를 나타내는 개념이라고 할 수 있다.
데이터 품질은 데이터 파이프라인의 모든 단계뿐 아니라 데이터 수집 전이나 운영, 분석 중에도 영향을 미치기 때문에 매우 중요하다.
- 의사결정의 정확성: 고품질의 데이터는 정확한 분석과 신뢰할 수 있는 인사이트를 제공한다. 이를 바탕으로 경영진과 데이터 분석가는 데이터에 기반한 올바른 결정을 내릴 수 있다. 반면, 품질이 낮은 데이터는 잘못된 결정을 초래해 비즈니스에 큰 손해를 끼칠 수 있다.
- 비용 절감: 데이터 오류는 문제를 해결하는 데 추가적인 시간과 비용을 발생시킨다. 예를 들어, 품질이 낮은 데이터로 인해 비효율적인 마케팅 캠페인이 진행된다면, 자원 낭비가 커질 수 있다.
- 고객 신뢰도 향상: 정확하고 일관된 데이터는 고객 서비스의 질을 향상시킬 수 있다. 고객 관련 데이터가 정확할수록 맞춤형 서비스가 가능해지고, 잘못된 정보로 인한 실수를 줄여 고객 만족도를 높일 수 있다.
- 비즈니스 효율성 증대: 고품질 데이터는 효율적인 프로세스와 원활한 운영을 지원한다. 모든 팀이 일관된 데이터를 기반으로 작업할 수 있어 중복 작업을 줄이고, 서로 다른 시스템 간의 연계를 쉽게 하기 때문이다.
데이터 품질 저하의 원인
데이터 품질을 저하시키는 다양한 요인이 있지만 일반적으로는 다음과 같은 주요 원인들이 있다.
- 데이터베이스 스키마 변경: 데이터베이스의 테이블 구조(스키마)가 변경될 때, 이를 반영하지 못한 데이터 파이프라인이 중단되거나 오류가 발생할 수 있다. (특히, 열 추가나 삭제, 데이터 타입 변경 등)
- 데이터 중복: 주요 행이나 열에 중복된 데이터가 생기면 데이터의 신뢰성과 정확성이 떨어진다. 중복 데이터는 잘못된 분석 결과를 초래할 수 있으며, 특히 고객 데이터와 같은 중요 데이터에서는 신뢰도에까지 영향을 미친다.
- 오류값 및 비정상 값: 데이터 입력 과정에서 오류값(예: 비정상적으로 높은 수치, 음수 값)이나 비정상 값이 발생하면 대시보드에 잘못된 정보가 반영될 수 있다.
- 데이터 수집 오류: 데이터를 수집하는 과정에서 네트워크 오류, API 변경, 센서 오류 등으로 인해 데이터가 손실되거나 왜곡될 수 있다.
- 시스템 통합 문제: 여러 시스템 간 데이터 통합 과정에서 불일치나 누락이 발생하기 쉽다. 예를 들어, 서로 다른 시스템에서 같은 데이터 항목이 다르게 정의되어 있거나, 특정 시스템의 데이터가 다른 시스템에 제대로 전달되지 않는 경우
- 데이터 입력 오류: 수동으로 데이터를 입력하거나 전처리하는 과정에서 실수로 인해 잘못된 데이터가 입력될 수 있다. 특히, 사람의 개입이 많은 환경에서는 잘못된 입력이나 형식 오류가 자주 발생한다.
- 실시간 데이터 지연: 적시에 제공되어야 할 데이터가 지연될 경우, 데이터가 최신 상태를 반영하지 못해 의사결정에 오류가 생길 수 있다.
- 데이터 정규화 및 청결도 부족: 데이터가 일관되지 않거나 표준화되지 않은 상태로 저장되면, 분석이나 처리 과정에서 불필요한 데이터 변환이 필요해지고, 이는 품질 문제로 이어진다.
2. 데이터 품질과 데이터 다운타임의 관계
데이터 다운타임이란?
'데이터 다운타임(Data Downtime)'은 데이터가 수집되지 않아 누락되거나 부정확하게 측정되는 등의 데이터 손실로 인해 소프트웨어 또는 서비스의 가동이 중지되는 상황(기간)을 의미한다. 즉, 데이터 다운타임은 신뢰할 수 없는 데이터가 너무 많을 때 일어난다.
GIGO와 데이터 품질의 중요성
GIGO란 Garbage In, Garbage Out의 약자로, 잘못된 데이터가 들어가면 잘못된 결과가 나온다는 원리를 의미한다.
만약 데이터가 정확하지 않거나 오류가 포함되어 있으면, 당연하게도 그 데이터를 기반으로 수행된 분석이나 의사결정 또한 신뢰할 수 없게 된다.
데이터 품질 문제와 다운타임 간의 관계
데이터 품질 문제는 데이터 다운타임을 발생시키는 주요 원인이다. 다운타임은 단순히 시스템이 멈추거나 느려지는 문제가 아니라, 잘못된 데이터로 인해 데이터 서비스가 신뢰를 잃고 의사결정에 활용할 수 없는 상태가 되는 것을 의미한다. 예를 들어, 데이터 파이프라인에서 오류나 결함이 발생하면 잘못된 데이터가 시스템에 유입되거나 필요한 데이터가 누락될 수 있다. 이렇게 품질이 낮은 데이터가 분석 플랫폼에 전달되면, 최종 사용자는 불완전하거나 부정확한 데이터를 보고받게 되고, 이를 기반으로 내리는 결정 또한 신뢰할 수 없게 된다.
또한, 최악의 경우 데이터 품질 문제가 발생하면 이를 해결하기 위해 긴급한 데이터 수정 작업이나 파이프라인 점검 과정에서 서비스를 일시적으로 중단해야할 수도 있다. 이로 인해 시스템 전반에 걸쳐 데이터 다운타임이 증가하고, 사용자 경험이 저하될 수 있다. 따라서 데이터 품질을 유지하는 것이 다운타임을 줄이고 비즈니스 연속성을 확보하는 중요한 전략이라 할 수 있다.
3. 데이터 품질 향상 및 다운타임 방지 전략
- 스키마 검증
: 데이터가 미리 정의된 스키마에 맞는지 자동으로 확인한다. 예를 들어, 특정 컬럼이 누락되지 않고 올바른 데이터 타입을 가지고 있는지 확인하여 데이터 품질 문제를 사전에 차단한다. - 타입 검증
: 각 필드가 예상된 데이터 타입과 일치하는지 검사한다. 예를 들어, 날짜 필드에 숫자나 문자열이 들어오지 않도록 하고, 금액 필드는 양수로 제한하여 품질 문제를 방지할 수 있다. - 실시간 모니터링
: 데이터 파이프라인 내 데이터의 품질 상태를 실시간으로 모니터링한다. 이를 통해 데이터 이상이 발생했을 때 조기에 문제를 감지하고 대응할 수 있다. - 자동화된 테스트
: 잠재적인 문제를 발견하기 위해 다양한 테스트를 자동으로 실행한다. 예를 들어, 특정 데이터 값이 범위를 벗어나거나 중복되는 경우 즉시 감지하여 문제를 해결한다. - 백업 절차
: 데이터 손실에 대비해 정기적으로 백업을 수행하고, 필요할 경우 빠르게 데이터를 복구할 수 있도록 한다. 이중화된 백업을 통해 예기치 않은 장애가 발생해도 데이터 안정성을 유지한다.
위 절차를 위해서는 다음과 같은 것들이 선행돼야 한다.
- 데이터 표준 정의: 데이터를 검증하기 전에 각 필드에 대한 표준을 정의하는 것이 중요하다. 데이터 표준을 정의하려면 데이터의 특성(예: NULL 비율, 수치형 데이터의 허용 범위, 날짜 형식, 특정 패턴 등)을 먼저 파악해야 하며, 이를 통해 스키마와 타입 검증에서 허용해야 하는 값과 형태를 명확히 규정할 수 있다.
- 데이터 검증 자동화: 데이터 표준을 기반으로 데이터 검증을 자동화한다. 자동화된 검증 시스템은 스키마 검증, 타입 검증, 실시간 모니터링, 자동화된 테스트 등을 포함하여 데이터가 표준에 맞는지 지속적으로 확인한다.
- 오류 보고: 자동화한 검증이 실패했다면, 어떤 정의에서 실패했는지 오류를 보고해야 한다. 실제 문제가 되는 데이터를 포함한 보고라면 문제를 파악하기 훨씬 좋을 것이다. 해당 보고에 신속하게 대응하면 data downtime을 줄일 수 있다.
4. 데이터 품질 도구 비교
위와 같은 작업을 도와주는 데이터 품질 도구 중 많이 사용되는 오픈소스 3가지를 비교해보자.
이번 포스팅에서는 각각에 대해 간단하게 소개하고, 다음에 각각의 툴을 구체적으로 살펴보려고 한다.
dbt (Data Build Tool)
Python 기반의 데이터 변환 및 모델링 도구로, 데이터 파이프라인에서 "Transform" 단계에 특화되어 있다.
SQL을 사용해 모델 변환을 실행하고, 변환된 모델에 대해 단위 테스트를 실행한다.
- 기반: Python 패키지
- 언어: SQL, Python
- 주요 기능
- Data Transformation: SQL을 사용한 데이터 변환 및 모델링
- Testing: 데이터 테스트 기능을 제공하여 데이터 품질 보장
- Documentation: 데이터 모델에 대한 자동화된 문서화
- Version Control Integration: Git과의 통합으로 팀 협업 용이
- 데이터 소스: SQL 기반 데이터베이스 (BigQuery, Snowflake, Redshift, Postgres 등)
- 커뮤니티와 문서화: 매우 활발함
- 러닝 커브: SQL에 익숙하다면 상대적으로 낮음
- 통합 가능성: Git, Airflow, 다양한 SQL 데이터베이스와 연동이 용이
- 단점
- 기술 부채: 복잡한 테스트의 수동 관리를 위해 많은 엔지니어링 리소스가 필요
- 테스트 피로: 잘못된 테스트가 오히려 개발자의 작업 속도를 저하시킬 수 있음
- 제한된 가시성: 상위 데이터 파이프라인 문제로 인해 테스트 실패 시 전체 파이프라인 점검이 필요
Great Expectations
Python 기반의 데이터 유효성 검증 도구로, 데이터 품질 테스트와 문서화에 특화되어 있다.
다양한 데이터 소스를 지원하며, 커뮤니티가 활발하여 풍부한 기능을 갖추고 있다.
- 기반: Python 패키지
- 언어: Python
- 주요 기능
- Expectations: 데이터 표준화를 위한 기대 조건 설정
- Automated Data Profiling: 자동으로 데이터 프로파일링하여 표준화 제안
- Data Validation: Expectation 기반으로 데이터 유효성 검증
- Data Docs: 데이터 품질 리포트 제공 및 데이터 문서화 기능
- 데이터 소스: 파일 시스템, SQL 데이터베이스, 인메모리(pandas, Spark 등)
- 커뮤니티와 문서화: 상대적으로 활발함
- 통합 가능성: AWS, Airflow, DataHub 등 다양한 데이터 엔지니어링 도구와의 통합이 용이
- 단점
- Python 환경에 제한: Python 도구로, 데이터 환경에서 SQL, R 또는 일부 다른 언어를 사용하는 경우 제한 존재
- 러닝 커브: 익혀야 할 새로운 개념과 용어가 많음
deequ
Amazon이 공개한 데이터 품질 검증 라이브러리로, Apache Spark 위에서 실행된다.
주로 대규모 데이터 검증에 유리하며 Scala 및 Python(pydeequ)을 지원한다.
- 기반: Apache Spark 라이브러리
- 언어: Scala, Python(pydeequ)
- 주요 기능
- Constraint (제약 조건): 데이터 표준화를 위한 제약 조건 설정
- Data Profiling: 칼럼 단위의 데이터 프로파일링 지원
- Automatic suggestion of constraints: 자동으로 데이터 프로파일링을 수행하여 제약 조건을 제안
- Anomaly Detection: 데이터 이상 탐지 룰 지원
- 데이터 소스: Spark에서 접근할 수 있는 모든 소스
- 커뮤니티와 문서화: 상대적으로 미약함
- 러닝 커브: Spark에 대한 이해가 필요
- 통합 가능성: 주로 AWS와 통합에 강점
- 단점
- Scala 학습 곡선: Deequ는 Scala 기반이지만, 데이터 엔지니어링 커뮤니티 외부에 있는 사람들에게는 친근한 언어가 아님
- 직관적인 UI 부족: UI가 없어 코드 기반의 설정에 의존해야 하며, 시각적 피드백이 부족해 사용자가 데이터를 직관적으로 모니터링하기 어려움
DBT vs Great Expecatations vs Deequ
상황별 도구 선택 가이드
- SQL 기반 데이터 변환과 문서화가 필요한 경우 -> dbt (Data Build Tool)
dbt는 SQL 기반의 데이터 모델링과 변환에 특화되어 있으며, Git 통합을 통해 협업과 버전 관리를 쉽게 할 수 있다. 또한, 테스트와 문서화 기능을 통해 모델을 체계적으로 관리할 수 있어, 주로 SQL 데이터베이스 위에서의 변환 작업과 데이터 엔지니어링 팀의 협업이 필요한 환경에 적합하다. - 다양한 데이터 소스와 유연한 데이터 검증이 필요한 경우 -> Great Expectations
Great Expectations는 Python 환경에서 다양한 데이터 소스에 대해 유효성 검증을 수행할 수 있으며, 직관적인 Expectations 설정을 통해 데이터 품질을 관리할 수 있다. 데이터 유효성 검증, 문서화, 리포트 생성 기능을 통해 데이터 품질과 데이터 파이프라인의 일관성을 쉽게 모니터링할 수 있어, Python 기반의 유연한 검증과 문서화가 필요한 환경에 적합하다. - 대용량 데이터 검증과 자동화된 프로파일링이 필요한 경우 -> Deequ
Deequ는 Apache Spark 환경에서 대규모 데이터의 품질 검증을 위한 도구로, Scala 및 pydeequ를 지원한다. Spark와 AWS와의 통합이 용이하며, 자동으로 데이터 프로파일링을 수행해 제약 조건을 제안할 수 있어 대규모 Spark 데이터셋 검증과 AWS 기반의 빅데이터 환경에 적합하다.
4. 결론
데이터 품질은 비즈니스 의사결정 및 서비스를 효율적으로 운영하기 위한 핵심 요소이다.
품질이 낮은 데이터는 데이터 다운타임을 유발하기 때문에 데이터 품질을 향상시키기 위해 검증 및 자동화된 관리 툴이 필요하다.
이번 글에서는 이를 위해 많이 사용되는 dbt, Great Expectations, Deequ와 같은 주요 데이터 품질 도구들을 비교하고, 각 도구의 장단점과 적합한 사용 환경을 살펴봤다. 각 도구는 서로 다른 특징을 가지고 있어, 팀의 기술 스택과 데이터 파이프라인의 특성에 맞추어 도구를 선택하는 것이 중요하다.
이전 회사에서 빈번하게 발생하는 오류 데이터로 인해 데이터 파이프라인에 대한 신뢰성이 많이 떨어져있었다.
결국, 데이터 품질을 개선하고 파이프라인의 신뢰성을 높이기 위해 데이터 정합성 검증 프로세스 및 ETL 파이프라인을 강화하는 작업에 많은 시간을 보냈었는데 당시에는 dbt, Great Expectations, Deequ와 같은 툴을 알지 못해 대부분의 작업을 단순히 Python 코드로 처리했었다.
Python이나 Pandas로 데이터 품질을 검증할 때는 기본적인 검증은 가능했지만, Great Expectations, dbt, Deequ와 같은 도구들은 훨씬 더 체계적이고 강력한 데이터 품질 관리 기능을 제공하기 때문에 아래와 같이 좀 더 체계화된 구조를 적용했다면 더 좋은 결과를 이끌어낼 수 있었지 않을까 싶다.
앞으로 이와 같은 작업을 다시 진행하게 된다면 단순히 검증을 넘어, 예방적 관점에서 접근하여 각 도구를 적절히 조합함으로써 비즈니스의 신뢰성과 데이터의 일관성을 확보해보고자 한다.
'Data Engineering > Data' 카테고리의 다른 글
[빅데이터를 지탱하는 기술] 2. 빅데이터의 탐색 (0) | 2024.09.07 |
---|---|
[빅데이터를 지탱하는 기술] 1. 빅데이터의 기초 지식 (0) | 2024.08.15 |