사전 차원
용어함정

차원

gabury1고친 사람 github-actions[bot]

차원은 값을 서로 겹치지 않는 방향으로 갈라 적게 해 줍니다. 벡터에서는 숫자 목록의 칸 하나가 차원입니다. 데이터 분석과 모니터링에서는 숫자를 나누어 볼 기준 하나가 차원입니다. 두 쪽 모두 「차원이 늘었다」고 말하지만 늘어나는 것이 서로 다릅니다.

쉽고 빠른 이해

무슨 일을 하는 물건인가 — 값을 어느 방향으로 갈라 적을지 정하는 축입니다. 숫자 세 개로 된 목록은 3차원 벡터입니다. 매출을 지역별·월별로 본다면 지역과 월이 차원 둘입니다.

왜 이렇게 하나 — 여러 방향으로 나누어 적어야 견줄 수 있습니다. 문서 둘이 얼마나 닮았는지 재려면 칸을 맞춘 숫자 목록이 있어야 합니다. 매출이 어디서 줄었는지 찾으려면 합계를 기준마다 쪼개 봐야 합니다.

어떻게 도나

  1. 벡터는 칸마다 숫자를 하나씩 적습니다. 칸 수가 차원 수입니다
  2. 분석은 매출 금액처럼 더할 숫자를 따로 둡니다. 지역·월처럼 그 숫자를 가를 기준을 차원으로 둡니다
  3. 모니터링 지표에는 차원을 이름표로 붙입니다. 이름표 조합마다 기록이 따로 쌓입니다

대가 — 벡터는 칸이 늘면 저장할 숫자와 계산이 함께 늡니다. 분석과 모니터링은 차원을 하나 더할 때마다 기준 값의 조합 수가 곱으로 불어납니다.

상세

이 절은 「차원」이 가리키는 뜻들을 나란히 놓고 봅니다. 본론은 벡터의 차원과 분석의 차원입니다.

공간의 차원

뜻들은 모두 수학의 공간에서 이름을 빌려 왔습니다. 공간의 차원은 그 안의 점 하나를 가리키는 데 드는 숫자의 개수입니다. 직선 위의 점은 숫자 하나로 가리킵니다. 그래서 직선은 1차원입니다.

평면 위의 점은 가로와 세로 두 숫자가 있어야 가리킬 수 있습니다. 지도 위의 한 곳을 위도와 경도 둘로 적는 것이 그 예입니다. 방 안의 한 점은 높이까지 숫자 셋이 필요합니다.

숫자 하나가 맡는 방향을 축이라고 합니다. 축 하나가 차원 하나입니다. 축끼리는 서로 독립입니다. 가로로 움직여도 세로 값은 바뀌지 않습니다.

차원이 가리키는 뜻들

아래 표는 개발자가 만나는 차원을 맥락별로 가릅니다. 셋째 칸이 갈림의 핵심입니다. 축 위에 무엇이 놓이는지가 맥락마다 다릅니다.

맥락 차원 하나가 뜻하는 것 차원 위에 놓이는 값 예
벡터 · 임베딩 숫자 목록의 칸 하나 숫자 3만 차원 문서 벡터
데이터 분석 숫자를 나누어 볼 기준 하나 서울·부산 같은 이름 지역 차원 · 날짜 차원
모니터링 메트릭 지표에 붙이는 이름표 하나 GET·POST 같은 이름 method 차원
프로그래밍의 배열 칸을 가리키는 번호의 개수 번호 2차원 배열

벡터에서는 축 위에 숫자가 놓입니다. 그 숫자가 곧 값입니다. 분석과 메트릭에서는 축 위에 이름이 놓입니다. 더하고 평균 낼 숫자는 축 밖에 측정값으로 따로 있습니다. 낱말은 같습니다. 이 한 가지가 뒤집혀 있습니다.

벡터의 차원

벡터는 순서를 정해 늘어놓은 숫자 목록입니다. 몇 번째 칸인지가 뜻을 가집니다. 이 칸 하나가 차원 하나입니다. 칸이 셋이면 3차원 벡터입니다.

숫자 셋짜리 벡터는 3차원 공간의 점 하나와 같습니다. 세 숫자가 모두 0 인 점을 원점이라고 합니다. 벡터를 원점에서 그 점까지 그은 화살표로 보기도 합니다.

아래는 파이썬 목록으로 적은 3차원 벡터입니다. 오른쪽 주석이 각 줄이 내는 값입니다.

Python
v = [0.2, 0.0, 0.7]
len(v)   # 3 → 3차원
v[2]     # 0.7 → 셋째 차원의 값

칸 수를 세면 차원 수가 나옵니다. 칸 번호로 한 차원의 값을 꺼냅니다.

문서와 문장을 벡터로 바꿀 때

벡터 공간 모델은 문서를 벡터로 바꾸는 방법입니다. 문서 모음에 나오는 낱말마다 칸을 하나씩 줍니다. 모음에 낱말이 3만 개면 문서 하나가 3만 차원 벡터가 됩니다. 칸에는 그 낱말이 문서에서 얼마나 중요한지를 숫자로 적습니다.

문서 하나에 든 낱말은 모음 전체에 비하면 아주 적습니다. 그래서 칸 대부분이 0 입니다. 이렇게 거의 0 으로 찬 벡터가 희소 벡터입니다.

임베딩은 문장이나 이미지를 칸 수가 정해진 벡터로 바꾼 것입니다. 바꾸는 일은 데이터로 미리 학습시킨 기계 학습 모델이 맡습니다. 칸 수도 그 모델마다 정해져 있고, 흔히 수백에서 수천 차원입니다.

임베딩은 칸 대부분에 0 이 아닌 값이 들어 있습니다. 희소 벡터와 반대로 칸이 고루 찬 벡터를 밀집 벡터라고 부릅니다.

두 벡터는 칸마다 맡은 뜻을 사람이 알아볼 수 있는지로도 갈립니다. 벡터 공간 모델은 칸마다 맡은 낱말이 정해져 있습니다. 임베딩의 칸은 무엇을 담을지 모델이 학습 중에 스스로 정해서 사람이 붙인 뜻이 없습니다. 어느 쪽이든 칸 위에 놓이는 것은 숫자입니다.

벡터끼리 견주는 조건

벡터를 만드는 까닭은 견주기 위해서입니다. 두 벡터가 얼마나 닮았는지 재는 기본 계산이 내적입니다. 내적은 같은 번째 칸끼리 곱한 뒤 모두 더한 값입니다.

그래서 두 벡터의 차원 수가 같아야 합니다. 칸 수가 다르면 짝을 지을 수 없습니다. 칸 수가 같아도 같은 번째 칸이 같은 뜻이어야 합니다. 서로 다른 모델이 만든 임베딩은 차원 수가 같아도 견주지 않습니다.

차원이 늘 때 드는 비용

차원이 늘면 벡터 하나에 적을 숫자가 늘어납니다. 저장 공간도 비교 계산도 칸 수에 비례해 늡니다. 벡터 검색은 질문 벡터 하나를 벡터 수백만 개와 견줍니다. 그래서 차원 수가 곧 검색 비용이 됩니다.

차원이 아주 많아지면 다른 문제도 생깁니다. 점들 사이의 거리가 서로 비슷해집니다. 가장 가까운 점과 가장 먼 점의 차이가 줄어서 가까움으로 가려내기 어려워집니다. 이 현상이 차원의 저주입니다.

칸 수를 줄여 이런 비용을 덜어 내는 일이 차원 축소입니다. 견주는 데 중요한 방향은 남깁니다. 덜 중요한 방향은 버립니다.

분석의 차원

데이터 분석에서 차원은 숫자를 나누어 볼 기준입니다. 이 소절은 쇼핑몰의 판매 기록 하나를 가지고 봅니다.

판매 한 건에는 금액이 있습니다. 더하거나 평균 낼 수 있는 이런 숫자가 측정값입니다. 그 금액은 언제, 어디서, 무엇을 팔았는지로 가를 수 있습니다. 날짜·지역·상품처럼 측정값을 가르는 기준 하나하나가 차원입니다.

가르는 까닭은 합계 하나로는 원인이 안 보이기 때문입니다. 전체 매출이 줄었다면 어느 지역에서, 어느 달에 줄었는지를 찾아야 합니다. 그러려면 합계를 기준마다 쪼개 봐야 합니다.

차원으로 쪼개는 질의

「지역별 월별 매출」이라는 질문에는 차원 둘과 측정값 하나가 들어 있습니다. 차원으로 쪼갠 뒤 쪼갠 묶음마다 합계를 내는 일이 집계입니다.

아래는 SQL(Structured Query Language, 구조화 질의 언어)로 적은 질의입니다. 오른쪽 주석이 각 줄의 몫입니다.

SQL
SELECT region, month,
       SUM(amount)       -- 측정값의 합
FROM sales
GROUP BY region, month;  -- 차원 둘

차원은 GROUP BY 뒤에 옵니다. 측정값은 합계 함수 SUM 안에 들어갑니다. 결과는 지역과 월의 짝마다 한 행입니다. 서울 3월, 서울 4월, 부산 3월처럼 짝 하나에 합계가 하나 나옵니다.

데이터 큐브와 차원 모델링

차원이 셋이면 판매 기록을 상자 모양으로 그릴 수 있습니다. 가로는 지역, 세로는 월, 깊이는 상품입니다. 상자의 칸 하나에 그 조합의 매출 합계가 듭니다. 이 상자가 데이터 큐브입니다.

상자의 칸 수는 차원마다 가진 값의 가짓수를 곱한 것입니다. 지역 3곳, 월 12개, 상품 4개면 3 × 12 × 4 = 144칸입니다. 차원을 하나 더할 때마다 칸 수가 그 차원의 가짓수만큼 곱해집니다.

데이터 웨어하우스는 분석용 데이터를 한곳에 모아 두는 저장소입니다. 여기서는 측정값과 차원을 서로 다른 테이블에 나누어 담습니다.

판매 기록이라면 먼저 금액을 담는 테이블이 있습니다. 판매 한 건이 한 행이고, 행마다 금액과 함께 어느 지역인지를 가리키는 번호가 붙습니다. 측정값을 담는 이쪽을 팩트 테이블이라고 부릅니다.

지역은 테이블을 따로 둡니다. 지역 하나가 한 행이고 서울·부산 같은 지역 이름이 들어 있습니다. 차원을 담는 이쪽을 차원 테이블이라고 부릅니다.

측정값과 차원을 이렇게 나누어 테이블을 짜는 설계를 차원 모델링이라고 합니다.

메트릭의 차원

메트릭은 서버가 일정한 간격으로 잰 숫자를 시각과 함께 남긴 기록입니다. 초당 요청 수나 응답 시간이 그렇습니다.

메트릭에는 그 숫자가 무엇에 대한 것인지 가르는 이름표를 붙입니다. method="GET" 처럼 키와 값의 쌍입니다. 이 이름표 하나가 메트릭의 차원입니다. 이 이름표를 부르는 말은 도구마다 다릅니다. Prometheus 에서는 라벨, Amazon CloudWatch 에서는 차원이라고 부릅니다.

뜻은 분석의 차원과 같습니다. 숫자는 측정값입니다. 이름표는 그 숫자를 가르는 기준입니다. GET 요청과 POST 요청을 따로 세어 두면 필요할 때 나누어 보거나 합쳐 볼 수 있습니다.

시계열이 불어나는 방식

메트릭 하나에서 차원 값의 조합 하나마다 기록이 따로 쌓입니다. 시각과 값이 시간 순으로 이어진 이 기록 한 줄이 시계열입니다. 요청 수 메트릭에 method 가 GET·POST 둘이면 시계열도 둘로 갈립니다.

차원을 더할 때마다 시계열 수는 그 차원이 가진 값의 가짓수만큼 곱해집니다. 아래 그림은 요청 수 메트릭에 차원 셋을 차례로 붙입니다. 요청 방식 method, 응답 상태 status, 사용자를 가리키는 user_id 입니다.

flowchart TD
    A["요청 수 메트릭 · 시계열 1개"] -->|"method 3가지"| B["시계열 3개"]
    B -->|"status 5가지"| C["시계열 15개"]
    C -->|"user_id 1만 명"| D["시계열 15만 개"]

그림에서 마지막 한 단계가 시계열을 만 배로 늘립니다. 앞의 두 단계를 합친 것보다 훨씬 큰 폭입니다.

한 차원이 가질 수 있는 값의 가짓수를 카디널리티라고 합니다. 시계열마다 메모리와 저장 공간을 따로 차지합니다. 그래서 카디널리티가 큰 차원 하나가 모니터링 시스템 전체를 무겁게 만듭니다. 이 현상이 카디널리티 폭발입니다.

사용자 식별자나 요청 식별자처럼 값이 끝없이 늘어나는 것은 흔히 차원으로 붙이지 않습니다. 그런 값은 로그에 남깁니다.

배열의 차원

프로그래밍의 배열에도 차원이 있습니다. 여기서 차원은 칸 하나를 가리키는 데 드는 번호의 개수입니다. 번호 하나로 칸을 가리키면 1차원 배열입니다. 행 번호와 열 번호 둘이 필요하면 2차원 배열입니다.

이 뜻은 벡터의 차원과 쉽게 섞입니다. 아래는 파이썬의 수치 계산 라이브러리 NumPy 로 앞의 벡터를 배열로 만든 것입니다. ndim 은 배열의 차원 수를, size 는 칸 수를 돌려줍니다. 오른쪽 주석이 각 줄이 내는 값입니다.

Python
import numpy as np
a = np.array([0.2, 0.0, 0.7])
a.ndim   # 1 → 배열로는 1차원
a.size   # 3 → 벡터로는 3차원
m = np.array([[1, 2], [3, 4]])
m.ndim   # 2 → 2차원 배열

같은 값 a 를 두 뜻으로 세면 답이 다릅니다. 번호 하나로 칸을 가리키니 배열의 차원은 하나입니다. 칸이 셋이니 벡터의 차원은 셋입니다. m 처럼 행과 열로 늘어놓은 2차원 배열은 행렬이라고도 합니다.

차원이 늘었다는 말

같은 문장이 뜻마다 다른 일을 가리킵니다. 「차원을 하나 늘리자」가 무엇을 바꾸는지를 두 맥락으로 나눠 봅니다.

맥락 차원을 하나 더하면 비용이 느는 모양
벡터 벡터마다 숫자 칸이 하나 는다 칸 수에 비례해 는다
분석 · 메트릭 숫자를 가를 기준이 하나 는다 그 기준의 가짓수만큼 곱해진다

벡터에서 차원 하나는 칸 하나라서 비용이 한 칸만큼 늡니다. 분석과 메트릭에서 차원 하나는 기준 하나라서 비용이 그 기준이 가진 값의 가짓수만큼 곱해집니다. 같은 말로 회의를 해도 한쪽은 저장 공간을, 다른 쪽은 시계열 수를 걱정하게 됩니다.

어느 뜻인지 가리는 단서

대화에서 어느 뜻인지는 옆에 붙은 말로 가려집니다. 아래 표가 자주 보이는 단서입니다.

단서 가리키는 뜻
차원 앞에 수가 붙는다 · 「3만 차원」 벡터
임베딩 · 유사도 · 거리가 옆에 있다 벡터
「~별로」 · 측정값 · 차원 테이블이 옆에 있다 분석
라벨 · 태그 · 시계열이 옆에 있다 메트릭
「2차원 배열」처럼 배열과 함께 온다 배열

단서가 없으면 축 위에 무엇이 놓이는지를 물어봅니다. 숫자나 번호가 놓이면 벡터나 배열의 차원입니다. 서울이나 GET 같은 이름이 놓이면 분석이나 메트릭의 차원입니다. 벡터 공간 모델처럼 칸마다 맡은 낱말이 있어도 칸 위에 놓이는 것이 숫자라면 벡터 쪽입니다.

관련 항목

차원을 칸으로 갖는 벡터 표현

벡터 · 임베딩 · 벡터 공간 모델 · 희소 벡터 · 밀집 벡터 · 원-핫 인코딩

차원을 맞춰 벡터끼리 견주는 계산

내적 · 코사인 유사도 · 유클리드 거리 · 벡터 검색 · 최근접 이웃 탐색

차원 수가 늘 때 생기는 문제와 대책

차원의 저주 · 차원 축소 · 주성분 분석 · 양자화

분석의 차원이 놓이는 테이블 설계

차원 모델링 · 차원 테이블 · 팩트 테이블 · 측정값 · 스타 스키마 · 스노우플레이크 스키마 · 천천히 변하는 차원

차원으로 측정값을 쪼개는 질의 연산

집계 · GROUP BY · 집계 함수 · 데이터 큐브 · 드릴다운 · 롤업 · 피벗

분석의 차원을 다루는 시스템

데이터 웨어하우스 · 데이터 마트 · 비즈니스 인텔리전스 · OLAP · ETL · 데이터 분석

메트릭에 차원을 붙이는 모니터링 요소

메트릭 · 시계열 · 레이블 · 태그 · 카디널리티 · 카디널리티 폭발 · Prometheus · CloudWatch · 모니터링

차원이라는 낱말을 함께 쓰는 수학과 프로그래밍 개념

배열 · 행렬 · 텐서 · 좌표계 · 선형대수

다른 이름: dimension · dimensions · 디멘션