Search

[데이터 메시] - 12편. 데이터 소비, 변환 및 제공 설계

[데이터 메시] - 1편. 데이터 메시란?
Data Engineering
Data Mesh
2024/10/27
[데이터 메시] - 1편. 데이터 메시란?
Data Engineering
Data Mesh
2024/10/27

입력·변환·출력으로 완성되는 데이터 프로덕트 설계

데이터 메시(Data Mesh) 환경에서 데이터 프로덕트는 입력 데이터 포트를 통해 업스트림 소스의 데이터를 받아 변환한 뒤, 출력 데이터 포트를 통해 영구적으로 액세스 가능한 데이터 형태로 결과를 제공하는 역할을 맡습니다. 이번 글에서는 이와 같은 데이터 제공·소비·변환 과정을 어떻게 설계할 수 있는지, 각 주제별로 살펴보겠습니다.

1. 데이터 제공

1.1 데이터 사용자의 니즈

데이터 메시에는 다양한 유형의 분석 데이터 사용자가 존재합니다.
분석가, 데이터 과학자, 머신러닝 모델, 보고서 등 각기 다른 요구사항을 지닌 사용자들은 멀티모달 방식으로 데이터를 액세스하기를 원합니다.
시간에 따라 이벤트와 상태가 변화하는 데이터가 필요하다면, 바이템포럴 데이터가 유용합니다.
한 시점에 여러 도메인을 동시에 조회하여 재현성을 유지하려면, 불변 데이터의 읽기 전용 액세스가 적합합니다.

1.2 데이터 제공 설계 사항

멀티모달 데이터

반정형 파일(컬럼 지향 파일), 개체-관계 모델(관계형 테이블), 그래프, 이벤트여러 종류의 데이터를 결합하여 정보 제공
다양한 소비자 프로필을 지원하기 위해, 데이터 프로덕트는 출력 데이터 포트를 통해 필요한 형식으로 데이터를 노출합니다.

불변 데이터

한 번 생성되면 변경되지 않는 불변 데이터는 데이터 메시 전체의 일관성과 변화를 위한 설계를 가능케 합니다.
예: 죽음의 다이아몬드 문제—모든 데이터가 동시에 업데이트되지 않을 때, 도메인별로 시점이 어긋나 일관성을 깨트릴 수 있으므로, 불변 데이터가 그 불일치를 완화해줍니다.

바이템포럴 데이터

실제 시각처리 시각이라는 두 가지 타임스탬프를 기록해, 데이터의 수정사항을 반영하거나 과거 시점에 대한 재현을 가능케 합니다.
리트랙션: 이미 발행된 데이터를 정정할 수 있는 능력.
스큐: 처리 시각과 실제 시각 간 간격을 관리해 사용자에게 중요한 시간차 정보를 제공.
윈도우 기법: 특정 시간 범위의 데이터를 효과적으로 분석할 수 있음.

1.3 데이터 제공 설계

이중시간성불변성을 갖춘 읽기 전용 데이터 제공 방식을 권장합니다. 이를 위해 출력 데이터 포트와 어댑터, 그리고 액세스 방식을 구애받지 않는 핵심 데이터 시맨틱을 잘 정의해야 합니다.
데이터 제공 구성 요소
설명
출력 데이터 포트
구체적인 액세스 방식(파일, 스트림, 테이블 등)에 맞춰 데이터 제공
출력 포트 어댑터
각 출력 포트에 대한 실제 데이터 표시 및 변환 로직 담당
핵심 데이터 시맨틱
액세스 방식·공간적 신택스와 분리된 데이터의 의미(도메인 모델 등)를 정의

2. 데이터 소비

데이터 프로덕트는 내부적으로 여러 소스(운영 시스템, 다른 데이터 프로덕트, 외부 시스템 등)의 데이터를 소비하여, 핵심 데이터 모델로 변환하고 이를 다양한 방식으로 제공할 수 있습니다.

2.1 데이터 소스의 아키타입

2.1.1 협업 운영 시스템

동일 도메인 내에서 운영 시스템과 데이터 프로덕트가 긴밀히 협력
현대 시스템은 주로 비동기 이벤트를 통해 데이터 공유하지만, 레거시 시스템은 CDC(Change Data Capture) 방식을 택하기도 함
CDC는 DB 트랜잭션 내부 구현을 그대로 노출하기에, 비즈니스 도메인에 적합하지 않을 수 있으나 레거시에서 어쩔 수 없이 사용하기도 함

2.1.2 여타 데이터 프로덕트

같은 데이터 메시 안의 다른 데이터 프로덕트를 소비
실제 시각과 처리 시각을 활용해 필요한 시점의 데이터를 선택 가능

2.2 데이터 소비의 지역성

데이터 메시 아키텍처는 기본 인프라·기술에 구애받지 않는 것이 목표
여러 클라우드·온프레미스에 걸친 물리적 인프라에서, 데이터 프로덕트가 서로 다른 환경으로부터 데이터를 이동 가능
빅뱅 방식 대신 점진적·지속적 방식으로 클라우드 데이터 플랫폼 이행 가능

2.3 데이터 소비 설계

데이터 프로덕트 스스로 “어떤 데이터를, 어떤 소스에서, 어떤 방식으로 소비할지” 정의하고 제어
이를 통해 안정적이고 예측 가능한 데이터 흐름을 구성

3. 데이터 변환

데이터 변환은 각 데이터 프로덕트 내부에서 자율적으로 이루어지며, 외부 파이프라인에 의존하지 않도록 설계됩니다.

3.1 프로그래밍 방식 vs 비프로그래밍 방식

비프로그래밍 방식(SQL, Flux 등): 간단하고 접근성 좋지만, 복잡한 변환에 대한 한계(테스트·모듈화 어려움)
프로그래밍 방식(아파치 빔, 아파치 스파크 등): 코드 기반으로 모듈화·테스트 용이, 활용 범위 넓음
상황에 따라 단순 변환은 비프로그래밍, 복잡 변환은 프로그래밍 방식을 택하거나, 단순 쿼리를 최종 소비자가 직접 실행하도록 유도

3.2 데이터 플로우 기반 변환

데이터 메시에서는 외부 파이프라인을 지양하고, 데이터 프로덕트 범위 내에서 변환 로직을 구현
파이프라인은 단일 프로덕트 단위로 업그레이드·테스트·배포되며, 이를 통해 독립적이고 안전한 운영이 가능

3.3 데이터 변환 설계 구성 요소

데이터 변환 구성 요소
설명
변환 아티팩트
데이터 변환 정의(코드·구성·문장·모델 등). 입력 레코드를 기반으로 출력 생성
변환 런타임 환경
변환 방식에 따라 호출되는 컴퓨팅 환경. 데이터 프로덕트 컨테이너 내부에서 제한적으로 실행
임시 스토리지
여러 변환 단계에서 상태를 유지하는 공간. 기반 플랫폼에서 제공

마무리

이번 글에서는 데이터 프로덕트의 입력(소비), 변환, 그리고 출력(제공) 과정을 어떻게 설계하면 좋을지 살펴보았습니다. 이중시간성(바이템포럴)과 불변 데이터의 중요성, 멀티모달 접근 방식, 파이프라인을 데이터 프로덕트 내부에 캡슐화하는 로직 등이 핵심이었습니다. 이러한 설계를 통해 도메인 팀은 각자의 데이터 프로덕트를 독립적으로 운영하고, 조직은 빠른 변화와 확장에도 유연하고 일관된 분석 환경을 구축할 수 있습니다.
다음 글에서는 데이터 검색·이해·구성(Composition) 설계에 대해 다룰 예정입니다. 도메인별로 분산된 데이터 프로덕트를 어떻게 검색하고, 의미를 파악하며, 서로 다른 데이터를 효율적으로 조합해 더 가치 있는 결과를 도출할 수 있는지 살펴보겠습니다.