개별 팩트 테이블 설계란?
차원 모델링에서 개별 팩트 테이블(Individual Fact Table)을 설계하는 작업은 데이터 웨어하우스 구축의 핵심 단계입니다. 잘 설계된 팩트 테이블은 비즈니스 성과를 정확하게 측정하고 분석할 수 있는 기반이 됩니다. 개별 팩트 테이블을 설계하는 방법은 크게 다음과 같은 단계로 나눌 수 있습니다.
1. 데이터 마트(Data Mart) 선택
데이터 마트를 선택하는 가장 간단한 방법은 기존의 레거시 정보 소스를 기준으로 삼는 것입니다. 일반적인 데이터 마트의 예로는 발주서(purchase orders), 배송(shipments), 소매 판매(retail sales), 결제(payments), 사용자 접속(user connections) 등이 있으며, 이들은 단일 소스(single-source) 데이터 마트의 대표적인 사례입니다.
경우에 따라 여러 레거시 소스를 통합해야 하는 데이터 마트를 정의할 수도 있습니다. 다중 소스(multiple-source) 데이터 마트의 대표적인 예는 고객 수익성 분석입니다. 이 경우 매출을 정의하는 레거시 소스와 비용을 나타내는 레거시 소스를 결합해야 합니다.
데이터 웨어하우스 설계자는 긴 시간이 걸리는 추출(extract) 시스템 개발 작업의 수를 줄이기 위해, 초기에는 단일 소스 데이터 마트만 구축함으로써 리스크를 효과적으로 관리하는 것이 좋습니다. 또한 이러한 독립적인 데이터 마트는 반드시 컨포머드 차원(conformed dimensions) 그룹의 맥락 안에서만 구현해야 하며, 그래야 데이터 마트가 데이터 웨어하우스 버스(data warehouse bus)에 원활하게 연결될 수 있습니다.
2. 팩트 테이블 입도(Grain) 선언
제안된 차원 설계에서 팩트 테이블의 데이터가 정확히 무엇을 의미하는지 명확하게 정의하는 것은 필수적입니다. 명확한 정의 없이는 설계가 진행될 수 없으며, 그렇지 않으면 데이터 아키텍트들이 '무엇이 차원이고 무엇이 팩트인가'라는 논쟁으로 귀중한 시간을 낭비하게 됩니다.
팩트 테이블의 입도(grain)는 가능한 한 낮은 수준, 즉 최대한 세분화된(granular) 수준으로 설정하는 것이 바람직합니다. 낮은 수준의 입도를 선택하면 다음과 같은 이점이 있습니다.
- 단일 트랜잭션(single transaction) 수준의 분석 가능
- 단일 일일 스냅샷(single day snapshot) 기반의 추적
- 단일 문서 라인 항목(single document line item) 단위의 상세 관리
입도가 낮을수록 설계의 유연성과 활용 가치가 높아집니다. 낮은 입도는 예상치 못한 새로운 쿼리에 대응하는 능력이 뛰어나고, 새로운 데이터 요소가 추가되는 상황에도 훨씬 유연하게 대응할 수 있습니다. 반면 입도가 높은(집계된) 설계는 이러한 확장성 면에서 불리합니다.
3. 차원(Dimension) 선택
팩트 테이블의 입도가 확정되면 차원의 선택은 비교적 간단해집니다. 입도 자체가 기본 차원 집합 또는 핵심 차원 집합을 결정하는 경우가 많기 때문입니다. 예를 들어, 주문서의 라인 항목(line item)에 대한 핵심 차원 집합에는 주문 날짜(order date), 고객(customer), 제품(product), 그리고 주문 번호만을 포함하는 디제너레이트 차원(degenerate dimension)이 포함되어야 합니다.
차원 모델에서 팩트 테이블은 특정 입도에서 측정된 측정값(measurements)들의 집합입니다. 일반적으로 측정값은 숫자형이지만, 반드시 숫자일 필요는 없습니다.
4. 팩트(Fact) 선택
팩트 테이블의 입도는 어떤 팩트들을 선택할지 결정하는 기준이 되며, 이러한 팩트들이 가져야 할 범위(scope)를 명확하게 해줍니다. 입도와 일치하지 않는 팩트를 포함하면 데이터의 일관성이 깨질 수 있으므로, 선언된 입도에 부합하는 측정값만을 팩트로 포함하는 것이 중요합니다.
마무리
개별 팩트 테이블 설계는 데이터 마트 선택 → 입도 선언 → 차원 선택 → 팩트 선택의 순서로 체계적으로 진행해야 합니다. 특히 입도를 최대한 낮게 설정하고 컨포머드 차원을 활용하면, 향후 데이터 웨어하우스 전체로의 확장과 통합이 훨씬 수월해집니다.