디멘전 테이블
Dimension Table
산출물
결제나 접속 같은 사건 기록을 요금제별·지역별로 잘라 보려고 그 기준값만 따로 모아 둔 표입니다.
등장 배경
분석용 표를 처음 만들 때는 대개 한 표에 다 넣습니다. 결제 기록 표에 결제일과 금액을 두고, 그 옆에 계정 이름·요금제·가입 경로·담당 영업 칸을 계속 붙여 나가는 식입니다. 만드는 쪽에서는 이게 제일 빠르고 한동안은 잘 돌아갑니다.
문제는 기준 쪽 값이 바뀔 때 드러납니다. 요금제 이름을 프로에서 팀으로 바꾸기로 했다면, 그 요금제로 결제된 4만 줄을 전부 찾아 고쳐야 합니다. 한 줄이라도 빠뜨리면 같은 요금제가 두 이름으로 집계됩니다. 계정 이름이나 산업군 분류가 바뀌어도 같은 일이 되풀이됩니다.
또 하나는 없는 칸에 대한 질문입니다. 페이지덱에서 규원이 "이번 분기 매출을 고객사 산업군별로 보여 줄 수 있나요" 하고 물었을 때, 태오가 결제 기록 표를 열어 보고 "산업군 칸이 없어서 지금은 못 뽑습니다" 하고 답하는 상황입니다. 칸을 새로 만들어 과거 4만 줄에 값을 채워 넣는 데 며칠이 듭니다. 그런데 다음 주에는 지역별로 보자는 요청이 들어옵니다.
디멘전 테이블은 이 둘을 한꺼번에 푼 자리입니다. 사건을 기록하는 표와 그 사건을 나눠 볼 기준을 적어 두는 표를 갈라 놓고, 기준 쪽은 계정 하나에 한 줄씩만 둡니다. 요금제 이름이 바뀌면 그 한 줄만 고치면 되고, 산업군 칸은 4만 줄이 아니라 계정 수만큼만 채우면 됩니다.
구성 항목
한 줄에 들어가는 칸은 네 종류입니다. 키, 속성, 계층, 이력 칸입니다.
- 키 — 이 표의 행 하나를 고유하게 가리키는 값입니다. 기본 키라고 부르며 보통 1, 2, 3 처럼 의미 없는 번호를 씁니다. 사건을 쌓는 팩트 테이블은 계정 이름 대신 이 번호만 들고 있다가, 이름이 필요할 때 번호로 이쪽 표를 찾아옵니다. 다른 표의 행을 가리키는 이 칸을 외래 키라고 합니다.
- 속성 — 나눠 볼 기준이 되는 값들입니다. 계정 표라면 요금제·산업군·가입 경로·지역·직원 수 구간이 각각 한 칸씩 들어갑니다. 칸이 하나 늘 때마다 잘라 볼 수 있는 각도가 하나 늘어납니다.
- 계층 — 속성끼리 포함 관계가 있으면 그 단계를 전부 칸으로 둡니다. 날짜 표에는 날짜·주·월·분기·연도가 나란히 들어가고, 지역 표에는 도시·시도·국가가 들어갑니다. 월 칸이 있어야 날짜에서 월을 계산하지 않고 바로 묶을 수 있습니다.
- 이력 칸 — 값이 바뀌는 속성에는 유효 시작일·종료일·현재 여부를 붙입니다. 한 계정이 5월에 무료에서 프로로 옮겼다면 줄을 덮어쓰지 않고 새 줄을 하나 더 만듭니다. 그래야 4월 매출은 무료 계정의 매출로, 6월 매출은 프로 계정의 매출로 잡힙니다.
날짜 표가 가장 자주 만드는 예입니다. 2020년부터 2030년까지 하루에 한 줄씩 미리 만들어 두고, 줄마다 요일·주차·월·분기·공휴일 여부·영업일 여부를 채워 둡니다. 이렇게 해 두면 "지난 분기 평일 매출" 같은 질문이 칸 두 개를 고르는 일로 끝납니다.
작성자와 독자
만드는 쪽은 데이터를 옮기고 다듬는 엔지니어이고, 읽는 쪽은 데이터 분석가와 BI 담당자, 그리고 대시보드를 여는 모든 사람입니다.
만드는 일은 한 번으로 끝나지 않습니다. 원천에 없던 값이 생기거나 분류 기준이 바뀌면 그때마다 손봐야 합니다. 이 표들은 보통 분석하는 사람이 바로 꺼내 쓰는 마트 레이어에 놓습니다.
어떤 칸을 둘지는 만드는 쪽이 혼자 정하지 않습니다. "산업군별로 보고 싶다" 는 요구가 먼저 나오고 그 칸이 뒤따라 생깁니다. 그래서 지현이 분기 초에 이번 분기에 어떤 각도로 볼 예정인지 알려 주면 태오가 그 칸부터 채웁니다. 반대로 요구 없이 칸부터 늘리면 아무도 안 쓰는 칸이 스무 개씩 쌓입니다.
읽는 쪽에서 이 표는 잘 안 보입니다. 대시보드의 요금제 드롭다운에 뜨는 목록, 표 왼쪽에 세로로 놓인 지역 이름이 전부 여기서 나옵니다. 그래서 칸에 들어가는 값은 읽는 사람이 아는 말이어야 합니다. P2 대신 프로 를 넣습니다. 코드값을 그대로 두면 대시보드를 볼 때마다 대조표를 따로 찾아야 하고, 결국 사람마다 다르게 해석합니다.
실무 용례
"그건 팩트 테이블에 칸을 더할 게 아니라 계정 디멘전에 넣어 주세요."
사건마다 달라지는 값이 아니라 계정마다 한 번 정해지는 값이니 기준 쪽 표에 두자는 뜻입니다.
"산업군별로 보려면 디멘전에 산업군 칸이 있어야 하는데 지금 비어 있어요."
표는 있지만 그 각도로 자를 칸이 없어 답을 못 낸다는 말입니다.
"이 계정 요금제가 지난달에 바뀌었는데 디멘전이 현재 값만 들고 있어서 작년 매출까지 프로로 잡힙니다."
이력 칸 없이 줄을 덮어쓴 탓에 과거 집계가 틀어졌다는 뜻입니다.
페이지덱에서는 분기마다 한 번씩 이 표를 손보는 자리가 생깁니다. 수아가 기업 고객을 산업군별로 나눠 보고 싶다고 요청하면, 태오는 계정 표에 산업군 칸을 하나 더하고 기존 계정 1,200개에 값을 채웁니다. 이때 산업군 목록을 누가 정할지가 먼저 정리돼야 합니다. 목록을 열어 두면 같은 회사가 IT·아이티·소프트웨어 세 가지로 들어오고, 그러면 매출이 세 조각으로 갈라집니다.
값을 채우고 나면 대시보드에 필터가 하나 늘어난 것 말고는 달라 보이는 게 없습니다. 지현과 수아는 이 표를 쓰고 있다는 사실을 모른 채 산업군 필터를 누릅니다.
흔한 오해
줄 수가 적으니 대충 만들어도 되는 보조 표로 보는 경우가 많습니다. 결제 기록이 4만 줄인데 계정 표는 1,200줄이니 그렇게 보이는 것도 무리는 아닙니다. 하지만 대시보드에 글자로 보이는 것은 거의 다 이쪽에서 나옵니다. 칸 하나가 비어 있으면 그 각도의 질문이 통째로 막히고, 값이 제각각이면 집계가 조각납니다. 그대로 두면 분석하는 사람마다 원본에서 자기 방식으로 분류를 만들고, 같은 달 매출이 회의마다 다른 숫자로 들어옵니다.
중복을 없애야 한다고 생각하는 것도 흔한 오해입니다. 같은 값이 여러 줄에 되풀이되면 잘못 만든 표처럼 보입니다. 그러나 이 표는 일부러 칸을 넓게 펴 둡니다. 산업군을 따로 떼어 번호로만 이어 두면 저장 공간은 줄지만 읽는 사람은 표 두 개를 이어 붙여야 하고, 그 이어 붙이는 방법을 모르면 질문을 아예 못 던집니다. 읽는 쪽의 편의가 저장 공간보다 먼저입니다.
자주 헷갈리는 용어
| 용어 | 한 줄이 무엇인가 | 디멘전 테이블과의 차이 |
|---|---|---|
| 팩트 테이블 | 사건 하나 | 더할 수 있는 숫자가 들어가고 계속 늘어납니다. 기준 쪽 표는 대상 하나에 한 줄이고 거의 늘지 않습니다 |
같이 보면 좋은 페이지
- 분석용 데이터 저장소
이 표가 저장소 어느 층에 놓이는지 봅니다
- 차원 모델링
기준 표와 사건 표를 나누는 설계 방법 전체를 다룹니다
마지막 업데이트 2026-09-16