SQL 캠프 광고 이미지
  • SQL
  • 로그인 전용

알아두면 쓸데있는 데이터 모델링 (4) 엔티티 톺아보기

SQL 캠프 광고 이미지
SQL 캠프 광고 이미지
지금 간편하게 로그인하고 전문성 있는 정보를 확인해보세요.

데이터 분석가들이 직접 쓰는 다른 로그인 전용 글들도 무제한으로 이용할 수 있습니다.

🔖
알아두면 쓸데있는 데이터 모델링 모아보기
  1. 정규화
  1. 여러 종류의 Key 이해하기 (feat. PK, FK는 무엇인가?)
  1. ER 모델의 구성 요소 - 엔티티, 관계, 속성 [✨ 로그인 전용]
  1. 엔티티 톺아보기 [✨ 로그인 전용]
 
 
ER 모델의 구성 요소 3가지 - 엔티티, 관계, 속성 - 중에 모델링을 하는데 가장 중요한 요소는 무엇일까요?
엔티티입니다. 중요한 만큼 심오하기도 합니다. 혹시 ‘엔티티 정의가 심오하다고 🤔 그냥 네모 박스 그리고 회원, 주문, 주소 같은 이름을 붙여주면 되는거 아니야?’라고 생각하고 계시나요? 엔티티 정의는 예술의 영역이다라고 말하는 사람이 있을 정도로 ‘잘’하기 위해서 많은 경험과 노하우가 필요합니다. 굉장히 다양한 각도에서 생각할 수 있어야 ‘잘’ 할 수 있거든요.
이 글에서는 엔티티에 대한 다양한 이야기를 해보면서 직접 모델링을 할 수 있는 힘을 키워보겠습니다.
 
 

본질을 꿰뚫어보는 눈이 필요하다

엔티티를 잘 정의하기 위해서는 본질을 꿰뚫어보는 눈이 필요합니다. 시간이 지날수록 업무도 함께 변화하는 것은 당연한데, 한 번 정의한 데이터 모델은 수정하기가 쉽지 않기 때문입니다. 이후 변화한 업무도 처리할 수 있도록 하려면 눈에 보이는 그대로의 업무가 아니라 업무의 원형을 잘 반영한 엔티티 모델링을 해야합니다.
 
 

엔티티를 구분하는 여러가지 방법

엔티티의 유형을 살펴보면서 엔티티에 대해 다각도로 이해하고 본질을 꿰뚫어볼 수 있는 매의 눈(🦅👀)을 훈련해봅시다. 엔티티를 바라보는 관점은 굉장히 다양합니다. 책마다 설명이 다른 경우도 많습니다. 이때에 ‘누가 맞는 말을 하는거야…’ 혼란하다고 느끼기 쉬운 것 같습니다. 저도 이 과정을 거쳤는데요. 돌아보니, 엔티티를 구분하는 방법 자체가 중요하다기보다는, 엔티티를 바라보는 다양한 관점들을 이해하다보면 결국 엔티티를 정확하게 정의할 수 있는 능력이 키워지는 것이더라구요.
 
저는 이 글을 통해 엔티티를 구분하는 방법 두 가지를 소개해드리겠습니다.
  1. 마스터 엔티티와 트랜젝션 엔티티
  1. 핵심 엔티티, 중요 엔티티, 행위 엔티티
 

1. 마스터 엔티티와 트랜젝션 엔티티

예를 들어, 이런 서비스의 데이터 모델링을 한다고 해봅시다. 아래는 서비스 이용자들의 행동을 기록한 것입니다.
 
  • 사용자 ASQL 데이터 분석 캠프 마스터반2024년 2월 5일에 신청했다.
  • 사용자 B2024년 3월 데이터리안 세미나2024년 3월 1일에 신청했다.
 
여기에서 사용자는 사건의 주체입니다. 캠프, 세미나와 같은 프로그램은 대상이구요. 신청은 행위입니다.
행위는 주체와 대상이 없으면 존재할 수 없습니다. 사용자와 프로그램이 없으면 신청이라는 행위도 있을 수 없죠. 이때 사용자, 프로그램과 같이 기준이 되는 데이터를 마스터 데이터(Master Data)라고 부릅니다. 그리고 마스터 데이터의 상호작용에서 생기는 신청과 같은 행위 데이터를 트랜젝션 데이터(Transaction Data)라고 부릅니다. 데이터를 겉핥기로 보면 신청이라는 행위만 보이기 쉽습니다. 하지만 트랜젝션 데이터의 근간이 되는 마스터 데이터를 정확히 봐야 엔티티 모델링을 잘 할 수 있습니다.
 
사용자, 프로그램과 같은 마스터 데이터를 정확하게 볼 수 있어야 합니다
사용자, 프로그램과 같은 마스터 데이터를 정확하게 볼 수 있어야 합니다
 
눈치 채신 분도 있겠지만 위의 예시는 데이터리안의 프로그램 신청 과정을 축약해서 만들었어요. 하지만 어떤 업종의 데이터든 이렇게 주체와 대상, 그리고 행위로 거칠게 요약할 수 있습니다. 이 중에서 주체, 대상과 같이 다른 데이터들의 근간이 되는 데이터를 마스터 데이터라고 부르고요.
 
주체 (마스터 데이터)
대상 (마스터 데이터)
행위 (트랜젝션 데이터)
온라인 교육
수강생
프로그램
신청
인터넷 쇼핑몰
회원
옷, 식품 등
주문, 환불
은행
고객
상품
계좌 개설
 
마스터 데이터와 트랜젝션 데이터를 각각 엔티티로 만들면 마스터 엔티티, 트랜젝션 엔티티라고 부릅니다.
마스터 엔티티는 주로 강한 엔티티에 속합니다(강한 엔티티와 약한 엔티티에 대해서 알고싶으시다면 이전 글 ER 모델의 구성 요소 - 엔티티, 속성, 관계를 읽어주세요). 엔티티들의 종속 관계에서 최상위에 있는 부모 데이터가 되는 경우가 많습니다. 윗 물이 맑아야 아랫 물이 맑다는 속담이 있죠. 부모 데이터를 잘 정의하지 않으면 거기에 종속되는 자식 데이터 레벨로 내려갈수록 모델링이 혼잡해지기 때문에 마스터 엔티티를 잘 정의하는 것이 중요합니다.
이 개념은 모델링을 할 때에도 유용하지만 아주 많고 복잡한 테이블들을 구조적으로 이해하는데에도 도움이 됩니다.
 

2. 핵심 엔티티, 중요 엔티티, 행위 엔티티

엔티티를 핵심 엔티티(Key Entity), 중요 엔티티(Main Entity), 행위 엔티티(Action Entity)로 세분화하는 것도 엔티티를 이해하는데 아주 유용합니다.
 

핵심 엔티티

위에서 이야기한 마스터 엔티티의 개념과 비슷합니다. 행위의 주체 또는 대상이 되는 경우 이를 핵심 엔티티라고 합니다. 다른 엔티티의 영향을 받지 않고 독립적으로 존재합니다.
아래 데이터들이 핵심 엔티티가 됩니다.
  • 주체: 고객, 회원, 수강생, 사원
  • 대상: 상품
  • 유형 및 분류 기준: 카테고리, 상품분류코드
  • 장소: 주소
 

중요 엔티티

행위에 의해서 발생하는 엔티티 중에서도 업무를 대표하는 것을 중요 엔티티라고 말합니다. 예를 들어 주문은 중요 엔티티입니다.
중요 엔티티의 종속 관계에 대해서 잠시 얘기해보겠습니다. 고객, 상품이 없다면 주문도 없는 것처럼 중요 엔티티는 핵심 엔티티에게 종속적인 관계를 가집니다. 하지만 어떤 엔티티에게는 중요 엔티티가 부모 역할을 해주기도 합니다. 예를 들어, 주문이라는 중요 엔티티는 주문 상세 엔티티에게 부모 역할을 해줍니다. 주문은 주문 번호라는 독립적인 주 식별자를 가지고 있고, 주문 상세는 주문 번호라는 식별자를 상속받아 사용합니다. 이렇기 때문에 중요 엔티티는 전체 엔티티 사이에서는 비교적 독립적인 성격을 가집니다.
아래 데이터들처럼 업무 영역에서 핵심 데이터를 중요 엔티티라고 부릅니다.
  • 주문
  • 프로그램 신청
  • 배송
 

행위 엔티티

이런 중요 엔티티를 중심으로 상세 데이터나, 이력을 관리하기 위한 데이터들이 자식 엔티티로 구성되는데요. 이런 엔티티들을 행위 엔티티라고 합니다.
예를 들어, 주문 상세는 행위 엔티티입니다. 중요 엔티티인 주문의 주문 ID라는 식별자를 상속받아 각 주문에 어떤 상품들이 속해있는지 상세하게 보여주는 역할을 하기 때문입니다.
 
주문과 주문 상세의 관계
주문과 주문 상세의 관계
 
또 다른 예를 들어보겠습니다. 아래 그림에서 배송은 중요 엔티티, 배송 이력은 행위 엔티티로 분류할 수 있습니다.
 
배송과 배송 이력의 관계
배송과 배송 이력의 관계
 
이건 ERD만 봐서는 이해하기가 어려울 수 있어 테이블 안에 데이터가 어떻게 들어가는지도 함께 살펴보겠습니다. 아래와 같이 2023년 12월 1일 오후 3시 51분에 배송 완료 처리된 택배가 있다고 생각해보겠습니다. 배송이라는 테이블은 송장 번호를 주 식별자로 하고 상태가 바뀔 때마다 상태, 시각 컬럼을 최신으로 업데이트 합니다.
 
Table <배송>
송장 번호
상태
시각
12345
배송 완료
2023-12-01 15:51:20
 
그런데 배송을 하는 비즈니스에서 항상 택배의 최신 상태, 그리고 그 상태가 된 시각 데이터만 필요할까요? 아닙니다. 간단한 예로 아마 쿠팡 같은 온라인 쇼핑몰에서 물건을 구매하신 분들은 이런 배송 조회 화면을 보신 적이 있을거예요. 배송 완료 이전의 상태들도 기록을 해놓을 필요가 있습니다.
 
쿠팡 배송 조회 화면
쿠팡 배송 조회 화면
 
이 때에 필요한 것이 배송 이력입니다. 원래 엔티티와 동일한 형태로 이력을 관리하는 경우가 많기 때문에 원 엔티티(여기에서는 배송)과 거의 비슷한 속성을 가집니다. 그리고 상태와 시각이 업데이트가 될 때마다 데이터가 추가됩니다. 영어로 테이블 명을 짓는 경우 ‘~ logs’라고 이름 붙여진 테이블들이 이런 이력을 관리하는 테이블이라고 보면 됩니다.
 
Table <배송 이력>
배송 이력 ID
송장 번호
상태
시각
10
12345
집하
2023-11-29 20:30:00
11
12345
Hub 상차
2023-11-29 23:00:00
12
12345
Hub 하차
2023-11-30 5:45:00
13
12345
Spoke 상차
2023-11-30 23:45:00
14
12345
Spoke 하차
2023-12-01 6:30:00
15
12345
배송 출발
2023-12-01 8:20:35
16
12345
배송 완료
2023-12-01 15:51:20
 
 

마무리

지금까지 엔티티에 대한 다양한 이야기들을 해보았습니다.
데이터 모델링을 밑 바닥부터 시작하거나, 새로운 회사에 입사에서 데이터를 처음 볼 때 수많은 데이터 사이에서 압도당하기 쉬운 것 같아요. 하지만 큰 데이터 덩어리를 마스터 데이터, 트랜젝션 데이터 또는 핵심, 중요, 행위 엔티티로 구분하다보면 어떤 데이터가 가장 중요한 데이터인지, 시간이 지나고 업무가 변화해도 흔들리지 않을 데이터인지 판단하는 눈이 생길겁니다.
특히 데이터 모델링을 하고 있다면 당장 내 눈에 보이는 주문, 결제 데이터보다 더 중요한 마스터 데이터를 찾아내는 연습을 많이 하시길 바랍니다. 김춘수 시인의 ‘꽃’처럼 내가 그 이름을 불러주었을 때 나에게로 와서 핵심 엔티티가 되어줄거예요. 핵심이 되는 데이터들을 잘 정의해야 그 이후로 따라오는 자식 엔티티들도 잘 정의할 수 있다는 것을 꼭 기억하기 바랍니다.
 
 

참고 자료

  • 핵심 데이터 모델링 - 유동오 지음
  • 프로젝트 성패를 결정짓는 데이터 모델링 이야기 - 김상래 지음
 
 
윤선미데이터 분석가

어느새 7년차 데이터 분석가이고, 4년째 데이터 분석 교육을 하고 있습니다. 데이터리안 멤버들과 함께 일하면서 데이터의 힘을 더 믿게 되었습니다.

함께 읽어보면 좋은 글

주식회사 데이터리안