ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 반정규화로 많이 사용되는 추출속성, 중복속성이란(feat. 성능개선)
    IT/DataModeling 2026. 3. 15. 15:25

    안녕하세요, Archix 입니다!

    반정규화 기법 중 실무에서 꽤 자주 보이는 추출속성중복속성을 정리했습니다. 이름만 들으면 낯설 수 있는데, 예시로 보면 바로 이해가 되실거에요.


    📌 추출속성 / 중복속성이란?

    한 문장으로 정리하면 이렇습니다.

    이미 존재하는 속성으로 만들어낼 수 있는 속성


    즉, 원래는 없어도 되는 속성인데 성능이나 편의를 위해 추가한 거예요.

    ✅ 장점 : 조회 성능 향상 / SELECT 쿼리 개발이 쉬워짐

    ❌ 단점 : 속성 값이 미일치하는 경우가 발생할 수 있음

    핵심은 이거예요.

    성능상 이슈가 존재하는 경우에만 제한적으로 사용!

    무분별하게 쓰면 데이터 정합성 문제가 생기기 때문에, 꼭 필요한 경우에만 사용해야합니다.


    🔍 해당 모델에서 추출속성, 중복속성을 찾아보세요

    위 ERD는 쇼핑몰 주문 시스템 모델입니다. 엔티티 구성은 다음과 같아요.

    • 고객 : 고객번호, 고객명, 생년월일, 전화번호, 배송지주소
    • 주문 : 주문번호, 고객번호(FK), 주문일시, 총주문금액, 배송지주소
    • 주문상품 : 주문번호(FK), 상품번호(FK), 주문수량, 상품명
    • 상품 : 상품번호, 상품명, 상품가격

    스크롤 내리기 전에, 어떤 속성이 추출속성이고 중복속성인지 직접 찾아보세요.


    ✅ 추출속성, 중복속성은 이렇습니다

    두 개념을 먼저 구분하면 이렇습니다.

    추출 속성 : 다른 엔티티들과 참조해서 계산한 값을 저장하는 속성
    중복 속성 : 단순히 조인을 피하고, 쿼리를 편하게 개발하려고 만들어놓은 속성

     

     

    이 ERD에서 각각에 해당하는 속성은 아래와 같습니다.

    추출 속성 → 주문.총주문금액 주문상품의 수량 × 상품가격을 계산한 값이에요. 단순 복사가 아니라 여러 엔티티를 참조해서 계산한 결과라 추출속성입니다.

    중복 속성 → 주문상품.상품명 / 주문.배송지주소 상품명은 상품 엔티티에, 배송지주소는 고객 엔티티에 이미 존재하는 값이에요. 조인 없이 바로 조회하려고 복사해둔 중복속성입니다.


    🧩 추가 문제 — 회원의 나이, 배송의 발송여부는 어떤 속성일까요?

    두 가지 케이스를 더 보겠습니다.

     

    회원 엔티티의 나이 속성

    • 회원번호
    • 회원명
    • 생년월일
    • 나이 ← ?

    나이는 생년월일만 있으면 계산할 수 있어요. → 중복속성입니다.

    매번 CURRENT_DATE - 생년월일로 계산하는 대신 나이를 미리 저장해두면 조회 성능이 정말 아주 조금은 좋아질 수 있습니다.

    하지만, 매년 업데이트가 안 되면 값이 틀려지는 문제가 생겨요. 이게 중복속성의 단점입니다.

     

    배송 엔티티의 택배사발송여부 속성

    • 배송번호
    • 주문번호(FK)
    • 송장번호
    • 택배사발송여부 ← ?

    택배사발송여부는 송장번호가 존재하면 판단할 수 있어요. → 중복속성입니다.

    송장번호가 IS NOT NULL이면 발송, NULL이면 미발송으로 유추가 가능합니다.


    🎯 결론

    중복 속성은 최소화, 추출 속성은 성능 이슈가 있는 경우 사용

     

    두 속성 모두 반정규화 기법이에요.

    단, 두 속성 모두 데이터 정합성 문제가 생길 수 있어요. 원본 데이터가 바뀌면 추출/중복속성도 같이 업데이트해줘야 하는데, 이걸 놓치면 값이 달라지는 상황이 발생합니다. 편의를 위해 추가했다가 오히려 유지보수 비용이 올라갈 수 있으니, 꼭 필요한 경우에만 제한적으로 사용하는 게 좋습니다. 물론, 단순히 조인을 피하고자, 귀찮아서 추가하는 중복속성은 더욱 더 최소화해야합니다.

     

     


    더 자세한 내용이 궁금하다면 아래 강의를 참고해주세요! 

    쉽게 배우는 데이터 모델링 : 기본부터 실전 테이블 설계까지 (DASP/DAP)

    (강의 링크 : https://inf.run/nxhnr)

    'IT > DataModeling' 카테고리의 다른 글

    엔티티(Entity)가 뭐에요 ??  (0) 2026.03.06

    댓글