---
type: knowledge
domain: data
status: active
last-reviewed: 2026-07-03
---

# 데이터 원리

> 한 줄 정의
> 저장소 유형 선택과 데이터 모델링의 기술 무관 원리. 특정 DB 문법은 공식 문서에서. 구체 제품 비교는 `05_도구/Database`·`05_도구/VectorDB` 참조.

## 저장소 유형 — 질의 패턴이 결정한다

| 유형 | 맞는 질의 | 대표 함정 |
|------|----------|----------|
| 관계형 (기본값) | 조인·트랜잭션·제약이 있는 업무 데이터 | 처음부터 샤딩 걱정 (수백만 행까지는 인덱스 문제) |
| Document | 스키마 가변, 문서 단위 읽기·쓰기 | 문서 간 조인이 필요해지는 순간 관계형이 답이었던 것 |
| Key-Value | 초저지연 키 조회 (세션·캐시·rate limit) | 범위·검색 질의 시도 |
| Search Engine | 전문 검색·집계 | 진실 저장소로 사용 (파생 인덱스여야 함) |
| Vector DB | 의미 유사도 검색 (RAG) | RAG 결정 전 도입 ([[TECHNOLOGY-DECISION-GUIDE]] 8축) |
| Graph DB | 다단계 관계 탐색이 핵심 질의 | 조인 2~3개로 되는 것을 그래프로 |

원칙: **주 저장소는 관계형 1개, 특수 질의만 파생 저장소.** 파생 저장소는 재구축 가능해야 한다(진실은 주 저장소).

## 모델링

- 업무 엔티티·관계를 먼저 (ERD), 프레임워크 모델 클래스는 그 다음.
- 정규화가 기본, 비정규화는 측정된 읽기 병목에 대한 의식적 결정 + 갱신 경로 문서화.
- 모든 테이블에: 생성/수정 시각, (멀티테넌트면) 테넌트 ID, (소프트 삭제면) 삭제 시각.
- PII 필드는 모델링 시점에 표시 — 수명주기·마스킹 대상이 됨.

## 인덱스

- 실제 쿼리 패턴에서 역산 (SELECT 없는 인덱스 금지, 모든 컬럼 인덱스 금지).
- 복합 인덱스는 등호 조건 → 범위 조건 순서.
- 느린 쿼리는 추측 말고 실행 계획으로.

## 트랜잭션·동시성

- 트랜잭션 경계 = 업무상 "전부 아니면 전무" 단위. 외부 API 호출을 트랜잭션 안에 넣지 않는다.
- 동시 수정: 낙관적 락(버전 필드)이 기본값, 비관적 락은 충돌이 잦고 재시도 비용이 클 때.
- 카운터·재고처럼 경합 큰 필드는 원자적 갱신 연산으로 (읽고-계산하고-쓰기 금지).

## 파티셔닝·수명주기

- 파티셔닝은 단일 테이블 수억 행 또는 오래된 데이터 일괄 삭제 요구가 생겼을 때 — 미리 하지 않는다.
- 데이터 수명주기를 spec에 명시: 보존 기간 → 아카이브 → 삭제. 특히 로그·이벤트·LLM 대화 기록 (무한 적재가 기본이 되기 쉽다).

## AI 시스템 데이터 특수사항

- LLM 대화·트레이스는 폭증한다 — 보존 정책과 PII 마스킹을 첫날 설계.
- 임베딩은 파생 데이터: 원문 버전과 함께 저장, 모델 교체 시 전체 재계산 경로 확보 → [[Embedding]].
- 평가 케이스 셋(Ground Truth)도 데이터다 — 버전 관리 대상 → [[Ground Truth]].

## 관련 문서

- [[데이터-모델-템플릿]] · [[백엔드 원리]] · [[TECHNOLOGY-DECISION-GUIDE]] 7·8축 · [[Vector Database]]
