← 학습 카테고리

Learn

SQL

32개 모듈 · 현재 6번째

SQL 모듈 6/32 sql-learn-06

데이터 모델링 기초 — 개념/논리/물리 모델, 정규화와 역정규화

50 Data Modeling Interview Questions for DEs (2026 Guide) — DataVidhya blog Core Concepts & Fundamentals, Q1-5 (pp.1-3) + SQL doc Q28-29

이 모듈을 다 읽으면

  • 데이터 모델링이 왜 필요한지, 그리고 개념/논리/물리 모델의 차이를 설명할 수 있다
  • 정규화의 1NF/2NF/3NF 각 단계가 제거하는 문제를 구체적 예시로 설명할 수 있다
  • 역정규화를 언제, 어느 계층에 적용해야 하는지 트레이드오프 관점에서 판단할 수 있다

데이터 모델링의 목적, 개념·논리·물리 모델의 계층 구조, 정규화 1NF/2NF/3NF, 그리고 역정규화를 언제 어디에 적용해야 하는지를 다룬다. 이 내용은 SQL 인터뷰 문서의 정규화/역정규화 질문(Q28-29)과 겹치므로 여기서 한 번만 다루고 통합한다.

데이터 모델링이 필요한 이유와 세 가지 모델 계층

데이터 모델링은 데이터가 시스템 전반에서 어떻게 구조화되고, 저장되고, 서로 관계를 맺는지 정의하는 과정이다. 이것이 없으면 '매출(revenue)'이라는 단어가 어느 팀이 만든 파이프라인이냐에 따라 세 가지 다른 의미를 갖는, 일관성 없는 테이블들로 가득 찬 웨어하우스가 만들어진다. 모델링은 한 번 하고 끝나는 작업이 아니라 비즈니스 요구사항이 바뀌고 새 소스가 온보딩될 때마다 함께 진화해야 한다.

개념 모델(conceptual model)은 '고객이 주문을 한다'처럼 상위 수준의 엔티티와 관계만 정의한다. 논리 모델(logical model)은 여기에 속성, 데이터 타입, 키를 더하되 특정 데이터베이스 엔진은 고려하지 않는다. 물리 모델(physical model)은 컬럼 타입, 인덱스, 파티셔닝 전략, 저장 포맷까지 포함한 실제 구현이다. 개념에서 물리로 곧바로 건너뛰는 것이 흔한 실수이며, 그 결과 원작성자 외에는 아무도 이해할 수 없는 스키마가 만들어진다.

핵심 포인트

  • 데이터 모델링은 정의(definition)의 일관성을 지키기 위한 작업이며 한 번으로 끝나지 않고 계속 진화한다.
  • 개념 모델은 엔티티/관계, 논리 모델은 속성/타입/키, 물리 모델은 실제 구현(컬럼 타입, 인덱스, 파티셔닝)을 다룬다.
  • 개념에서 물리로 곧바로 건너뛰면 이해하기 어려운 스키마가 만들어진다.

정규화 — 1NF, 2NF, 3NF

정규화는 중복을 줄이고 무결성을 강화하기 위해 데이터를 구조화하는 과정이다. 1NF(제1정규형)는 각 컬럼 값이 원자적(atomic)이어야 하며 반복되는 그룹이 없어야 한다는 조건이다. 2NF(제2정규형)는 부분 함수 종속(partial dependency)을 제거한다 — 즉 복합 기본 키를 사용하는 테이블에서, 키의 일부에만 의존하는 컬럼이 있으면 안 된다. 3NF(제3정규형)는 이행 함수 종속(transitive dependency)을 제거한다 — 컬럼 C가 컬럼 B에 의존하고 B가 다시 기본 키 A에 의존한다면, C는 별도 테이블로 분리되어야 한다.

구체적 예로, sales 테이블에 customer_id와 함께 customer_name을 같이 저장하는 것은 3NF 위반이다 — name은 customer_id에 의존하는 것이지, 판매(sale) 자체에 의존하는 것이 아니기 때문이다.

핵심 포인트

  • 1NF: 컬럼 값이 원자적이어야 하고 반복 그룹이 없어야 한다.
  • 2NF: 복합 키의 일부에만 의존하는 부분 함수 종속을 제거한다.
  • 3NF: 비키 컬럼이 다른 비키 컬럼에 의존하는 이행 함수 종속을 제거한다.

역정규화 — 언제, 어디서 할 것인가

역정규화는 쿼리 시점의 JOIN 횟수를 줄이기 위해 의도적으로 중복을 도입하는 것이다. 읽기 성능이 중요하고 쓰기 빈도가 낮은 상황 — 전형적인 데이터 웨어하우스 영역 — 에서 역정규화를 선택한다. 위험 요소는 데이터 불일치다. 고객 이름이 바뀌면 역정규화된 모든 테이블에서 값을 갱신해야 하거나, 오래된 값을 감수해야 한다.

실무 원칙은 소스 오브 트루스 계층(스테이징/원본 레이어)은 정규화하고, 서빙 계층(마트/ 프레젠테이션 레이어)은 역정규화하는 계층화 전략이다. 이렇게 계층을 나눠 설명하는 것이 단순히 '정규화 vs 역정규화' 중 하나를 고르는 것보다 트레이드오프를 이해하고 있다는 신호가 된다.

핵심 포인트

  • 역정규화는 JOIN을 줄이기 위한 의도적 중복이며, 읽기 위주·쓰기 드문 웨어하우스 환경에 적합하다.
  • 역정규화의 위험은 값이 바뀔 때 여러 곳을 갱신해야 하는 데이터 불일치다.
  • 실무 원칙: 원본/스테이징 계층은 정규화하고, 서빙(마트) 계층은 역정규화한다.