전체 목록
데이터베이스Medium#211

정규화와 반정규화의 장단점을 설명해주세요.

#데이터베이스#Normalization#Denormalization#설계

답변 포인트

중복 제거와 조회 성능의 균형를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

정규화는 중복을 줄이고 무결성을 높이지만 조인이 늘 수 있습니다. 반정규화는 조회 성능을 위해 중복을 허용하지만 동기화와 정합성 관리 비용이 생깁니다.

정규화는 데이터 중복을 줄이고 변경 이상을 막기 위해 테이블을 잘게 나누는 설계이고, 반정규화는 조회 성능이나 단순성을 위해 의도적으로 중복을 허용하는 설계입니다.

정규화의 장점

회원 정보와 주문 정보를 분리하면 회원 이름 변경 시 한 곳만 수정하면 됩니다.

SQL
users(id, name, email)
orders(id, user_id, total_amount, created_at)

이 구조는 중복이 적고 외래 키로 관계를 명확히 표현할 수 있습니다. 삽입/수정/삭제 이상도 줄어듭니다.

정규화의 단점

조회할 때 join이 많아질 수 있습니다. 대시보드에서 주문, 회원, 상품, 배송 정보를 매번 합치면 쿼리가 복잡해지고 인덱스 설계도 어려워집니다.

반정규화의 예

SQL
orders(
  id,
  user_id,
  user_name_snapshot,
  total_amount,
  item_count,
  created_at
)

주문 당시 회원 이름을 snapshot으로 저장하면 회원 이름이 나중에 바뀌어도 주문 내역은 당시 값을 보여줄 수 있습니다. 이 중복은 성능뿐 아니라 도메인 요구사항 때문에도 필요할 수 있습니다.

반정규화의 위험

중복 컬럼을 여러 곳에 저장하면 갱신 누락으로 데이터가 어긋납니다. 따라서 트리거, 이벤트, 배치 재계산, materialized view, 캐시 무효화 전략이 필요합니다.

판단 기준

  • 쓰기 정합성이 중요하고 변경이 잦으면 정규화가 유리합니다.
  • 읽기 빈도가 매우 높고 join 비용이 크면 반정규화를 검토합니다.
  • 반정규화는 먼저 측정한 병목을 해결하기 위해 적용하는 것이 안전합니다.
  • 중복 데이터의 소유자와 갱신 경로를 문서화해야 합니다.

면접 답변 포인트

정규화는 중복과 이상 현상을 줄이는 기본 설계이고, 반정규화는 조회 성능이나 도메인 snapshot을 위해 중복을 감수하는 선택입니다. 중요한 것은 둘 중 하나가 항상 옳은 것이 아니라 정합성, 성능, 운영 복잡도의 균형입니다.

관련 질문

같은 카테고리/태그 기준