본문 바로가기
개발/데이터베이스

[RDB] 이력 유형 데이터 모델

by Devsong26 2023. 11. 15.

시간에 따라 발생하는 데이터 형식을 이력이라고 합니다.

 

이력 데이터 모델의 특징은 다음과 같습니다.

  • 시간에 따라 발생
  • 동일한 컬럼에 발생
  • 대량 데이터가 발생할 가능성이 높음
  • 성능에 영향을 주는 경우가 많음

 

실전에서 적용하는 이력의 유형은 세가지로 구분할 수 있습니다.

 

테이블 구분에 따라 구분하는 방법

  • 내부스냅샷 이력
    • 별도의 테이블 없이 시간에 따라 자기 자신의 테이블에 데이터가 발생되는 구조
    • 이력 테이블이 마스터이므로 관계를 통해 PK구조도 모두 상속
    • 일부 속성값이 변경되어도 전체 속성값 생성
  • 1:M 스냅샷 전체 이력
    • 별도의 테이블에 마스터 테이블의 현재정보를 포함해 변경된 모든 정보를 보관함
    • 현재 정보 포함, 일부 변경되어도 전체 생성
  • 1:M 스냅샷 과거 이력
    • 마스터 테이블에는 현재 정보만 존재, 이력 테이블에는 과거 변경 정보만 보관
    • 과거정보, 일부 변경되어도 전체생성
  • 1:M 스냅샷 군집 전체 이력
    • 마스터 테이블의 일부 컬럼들을 묶어 별도의 테이블에 마스터 테이블의 현재정보를 포함한 모든 변경된 정보를 보관함
    • 트랜잭션 형식이 비슷하게 발생하는 컬럼을 묶어서 이력 테이블 구성, 현재 + 과거
  • 1:M 스냅샷 군집 과거 이력
    • 마스터 테이블의 일부 컬럼들을 묶어 별도의 테이블에 마스터 테이블의 과거정보만을 변경된 정보도 보관
    • 트랜잭션 형식이 비슷하게 발생하는 컬럼을 묶어서 이력 테이블 구성, 과거 정보

 

 

컬럼과 로우에 따라 구분하는 방법

  • 로우 단위 이력
    • 이력 테이블에는 마스터 테이블의 변경된 내용이 하나의 로우에 전체적으로 기록되는 형태(일반적인 이력)
  • 컬럼 단위 이력
    • 이력 테이블에는 마스터 테이블의 변경된 내용이 하나의 로우에 컬럼 한개가 변경된 내용이 기록된 형태

 

이력 데이터 발생 방법에 따라 구분하는 방법

  • 변경이력
    • 마스터 테이블의 컬럼이 변경되면 이력을 관리하는 형태
  • 발생이력
    • 마스터 테이블의 PK를 포함하여 전체에 대해 인스턴스 생성
    • 엄격하게 구분하면 이력 형식이 아닌 인스턴스 생성이라고도 구분할 수 있음
  • 진행이력
    • 업무진행 상태에 따라 업무의 상태정보를 관리
    • 상태정보가 계속 영향을 미치는 형

 

 

업무적으로 먼저 이력 유형을 결정하고, 그 이후에 이력 테이블에 데이터가 대량으로 적재될 것이 예상되면 성능을 고려한 기능상 컬럼을 추가하거나 테이블 통합/분리를 고려하면 됩니다.

 

 

이력 모델 선택 방법

 

 

참고로, 프로젝트에서 가장 많이 사용되는 모델은 스냅샷 전체 이력 모델과 스냅샷 과거 이력 모델 유형입니다.

일반적으로 컬럼 단위 이력 모델은 자주 이용하는 모델이 아닌데, 금융권 프로젝트의 경우 컬럼에 대한 엄격한 추적을 위해 컬럼 단위 이력 모델을 적용하는 경우도 있습니다.

 

아래는 업무적 성격에 따른 이력 모델을 선택하는 방법입니다.

분류 특징 장점 고려할 점
내부 스냅샷 이력 - 한 개의 테이블 - 이력 관계 설정 용이함
- 데이터 중복 없음
- 현재 관계만 필요할 경우 불필요한 PK 속성 상속
- 대량의 데이터가 한 군데 집중됨
1:M 스냅샷 전체 이력 - 두 개의 테이블
- 현재와 현재 + 과거 테이블
- 현재 / 이력 관계 설정 용이함
- 현재 데이터에 대한 성능 처리 용이함
- 현재 데이터 중복
- 관리 항목 증가
1:M 스냅샷 과거 이력 - 두 개의 테이블
- 현재와 과거 테이블
- 현재 / 이력 관계 설정 용이함
- 현재 데이터에 대한 성능 처리 용이함
- 현재 데이터 중복 없음
- 관리 항목 증가
- 현재와 과거 데이터 조회 시 조인이 발생하여 성능 저하됨
1:M 스냅샷 군집 전체 이력 - N개의 테이블
- 현재와 현재 + 과거 테이블
- 컬럼이 많은 테이블 관심사 분리
- 컬럼 분리로 DISK IO 경감
- 관심 항목 관계 설정 가능
- 관리 항목 증가 큼
- 과거 데이터 조회 시 조인 과다 발생으로 성능 저하
- 현재 데이터 중복
1:M 스냅샷 군집 과거 이력 - N개의 테이블
- 현재와 과거 테이블
- 컬럼이 많은 테이블 관심사 분리
- 컬럼 분리로 DISK IO 경감
- 관심 항목 관계 설정 가능
- 현재 데이터 중복 없음
- 관리 항목 증가 큼
- 현재와 과거 데이터 조회 시 조인이 과다 발생하여
성능 저하

 

 


 

참고 도서

- 아는 만큼 보이는 데이터베이스 설계와 구축