477. 스타 스키마 (Star Schema) - 중심 팩트와 방사 차원

⚠️ 이 문서는 데이터 웨어하우스(OLAP)에서 복잡한 수만 개의 테이블 조인(JOIN)을 피하기 위해, '수치(매출액)'가 담긴 거대한 사실(Fact) 테이블을 한가운데 두고, '설명(고객명, 상품명)'이 담긴 차원(Dimension) 테이블들을 별 모양으로 둥그렇게 배치한 직관적인 데이터베이스 구조를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 다차원 분석(OLAP)을 위해 특별히 고안된 데이터베이스 모델링 기법이다. 테이블이 가운데 모인 모양이 별(Star)과 같다고 해서 붙은 이름이다.
  2. 구조: 가운데에는 1억 건이 넘는 거대한 사실(Fact) 테이블이 있고, 뾰족한 꼭짓점 자리에는 비정규화되어 중복을 허용한 차원(Dimension) 테이블들이 딱 한 겹으로 둘러싸고 있다.
  3. 가치: 조인(JOIN)의 깊이가 무조건 '1단계'로 고정되므로, 사장님이 어떤 복잡한 통계 쿼리를 던져도 시스템이 빠르고 일관되게 대답할 수 있다.

Ⅰ. 개요: 피벗 테이블 만들기 (Context & Necessity)

사장님: "올해 서울 지역에서 20대 여성이 가장 많이 산 화장품 브랜드의 월별 매출을 뽑아와!"

이 쿼리를 일반 RDBMS(3NF 정규화 모델)에 날리면? 매출 JOIN 매장 JOIN 지역 JOIN 고객 JOIN 연령대 JOIN 상품 JOIN 브랜드... 조인이 꼬리에 꼬리를 물고 이어지며(Snowflake 현상), 개발자도 쿼리를 짜다가 길을 잃고 쿼리 속도는 10시간이 걸린다.

스타 스키마는 이 지옥을 끝내기 위해 테이블을 다 합쳐버렸다.

  • 매출 테이블은 그대로 둔다. (가운데 별 몸통)
  • 고객, 연령대 테이블을 합쳐서 $\rightarrow$ 고객 차원 하나로 퉁친다.
  • 상품, 브랜드 테이블을 합쳐서 $\rightarrow$ 상품 차원 하나로 퉁친다.

이제 쿼리는 매출 JOIN 고객 JOIN 상품 딱 2번의 조인으로 끝난다!

📢 섹션 요약 비유: 스타 스키마는 **'태양계'**와 같습니다. 가장 무겁고 중요한 태양(Fact 테이블: 매출액, 수량)이 한가운데 있고, 그 주변을 수성, 금성, 지구(Dimension 테이블: 시간, 장소, 고객)가 빙글빙글 돌고 있는 모양입니다. 태양에서 지구까지 가는 데는 딱 한 번의 점프(JOIN)면 충분합니다.


Ⅱ. 스타 스키마의 핵심 구성 요소 ★

스타 스키마는 데이터를 딱 두 종류로 나눈다. (면접/시험 단골 문제)

1. 사실 테이블 (Fact Table) - 중앙의 별

  • 데이터 내용: 측정할 수 있는 '숫자(수치)' 데이터가 들어간다. (예: 결제 금액, 판매 수량, 클릭 횟수)
  • 특징: 데이터가 미친 듯이 쌓인다 (수억 ~ 수백억 건).
  • 키(Key) 구조: 외곽의 차원 테이블들과 연결되기 위해 수많은 외래 키(FK)들을 복합키(Composite Key) 형태로 들고 있다. (예: 고객_ID + 상품_ID + 매장_ID)

2. 차원 테이블 (Dimension Table) - 방사형 꼭짓점

  • 데이터 내용: 사실 테이블의 숫자들을 설명해 주는 '텍스트(문자)' 데이터가 들어간다. (예: 고객 이름, 상품 카테고리, 가입 연도)
  • 특징 (비정규화): 데이터가 좀 중복되더라도 테이블을 절대 더 쪼개지 않는다.
    • 상품 차원 테이블 안에 상품명: 신라면, 분류: 과자/라면, 제조사: 농심이 텍스트로 다 박혀있다. (만약 쪼갰다면 스노우플레이크 스키마가 됨 - 478번 문서)

Ⅲ. 스타 스키마의 빛과 그림자

장점 (빛)단점 (그림자)
조인(JOIN) 속도가 빠르다. 무조건 1단계 조인으로 끝나므로 옵티마이저가 헷갈릴 일이 없다.데이터가 낭비된다. 차원 테이블을 비정규화(합치기) 해놨기 때문에, '농심'이라는 글자가 수백 번 중복해서 들어간다. (디스크 용량 낭비)
쿼리 짜기가 쉽다. 엑셀 피벗 돌리듯 "차원 + 팩트"만 섞으면 되므로 초보자도 통계 쿼리를 짤 수 있다.업데이트(UPDATE)가 끔찍하다. 만약 '농심' 회사 이름이 바뀌면, 수백 번 중복된 '농심'을 다 찾아가서 고쳐야 한다. (갱신 이상 위험)

하지만 데이터 웨어하우스(OLAP) 환경에서는 데이터를 한 번 저장하면 절대 고치지 않으므로(Read-only), 업데이트 단점은 무시해도 되고 오직 '조회 속도'라는 장점만 100% 누릴 수 있다.

┌──────────────────────────────────────────────────────────────┐
│           스타 스키마 (Star Schema)의 구조적 시각화                  │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│        [ 시간 차원 ]                    [ 매장 차원 ]           │
│        (날짜, 연, 월)                    (매장명, 지역)         │
│              ↘                           ↙                  │
│                ┌─────────────────────┐                      │
│                │ ☀️ 판매 FACT (가운데)  │                      │
│                │  - 날짜_ID (FK)       │                      │
│                │  - 매장_ID (FK)       │                      │
│                │  - 상품_ID (FK)       │                      │
│                │  - 고객_ID (FK)       │                      │
│                │  💰 총 판매금액: 5만 원  │                      │
│                │  📦 판매수량: 3개      │                      │
│                └─────────────────────┘                      │
│              ↗                           ↖                  │
│        [ 상품 차원 ]                    [ 고객 차원 ]           │
│     (상품명, 카테고리)                   (이름, 성별, 나이)      │
│                                                              │
│ ★ 특징: 팩트(가운데)에서 차원(꼭짓점)으로 가는 길(JOIN)이 무조건 1개다!       │
└──────────────────────────────────────────────────────────────┘

Ⅳ. 결론

"이해하기 쉽지 않으면, 훌륭한 아키텍처가 아니다." 스타 스키마는 랄프 킴볼(Ralph Kimball - 474번 문서)이 주창한 데이터 마트(Data Mart) 설계의 심장이다. 전통적인 데이터베이스 학자들은 중복 데이터가 넘쳐나는 이 뚱뚱한 구조를 보고 경악을 금치 못했지만, 현업의 마케터와 데이터 분석가들은 환호했다. 테이블 수십 개를 조인하며 쿼리와 씨름할 필요 없이, 별 모양으로 펼쳐진 차원 테이블 몇 개만 클릭하면 원하는 통계가 즉각적으로 튀어나왔기 때문이다. 비정규화를 두려워하지 않는 용기, 그것이 빅데이터 분석 시대를 연 첫 번째 열쇠였다.


📌 관련 개념 맵

  • 대척점 아키텍처: 스노우플레이크 스키마 (Snowflake Schema - 차원 테이블마저 정규화시켜 버린 꼬리 물기 구조, 478번 문서)
  • 활용 시스템: OLAP (476번 문서), Data Mart (474번 문서)
  • 설계 원칙: 비정규화 (Denormalization - 중복 허용)

👶 어린이를 위한 3줄 비유 설명

  1. 햄버거 세트 장부를 적을 때, 햄버거 재료표 1장, 음료수 재료표 1장, 장난감 목록 1장... 이렇게 수십 장을 뒤져봐야 세트 구성을 알 수 있다면 너무 피곤하겠죠?
  2. 스타 스키마는 **[가운데 메인 장부 = 오늘 총 1,000세트 팔림]**을 딱 하나 둬요.
  3. 그리고 그 주변에 [햄버거 설명서], [음료수 설명서] 딱 한 겹만 펼쳐놔서, 메인 장부에서 한 칸만 이동하면 모든 설명을 다 볼 수 있게 만든 가장 편한 책상이랍니다!