본문 바로가기

# 미사용

[4-3-4]: 이력 관리

01. 이력 관리

관심있게 보는 사건(Event)의 발생정보를 관리하는 것.

이력 관리 대상 선정 기준

  • 변경 내역을 감시할 필요가 있는가?
  • 시간의 경과에 따라 데이터가 변할 수 있는가?
  • 시간의 경과에 따라 관계가 변할 수 있는가?
  • 과거의 데이터를 조회할 필요가 있는가?
  • 과거 버전을 보관할 필요가 있는가?

이력 데이터의 종류

  • 발생 이력
  • 변경 이력
  • 진행 이력

이력 관리 형태

  • 점    이력
  • 선분 이력  (시작 점 이력 + 종료 점 이력)

이력 관리 형태별 조회방법

  • 점 이력은 where = max() 함수로 조회
  • 선분 이력은 between 또는 부등호로 조회.

선분 이력 성능이슈

  • 최근 선분이력의 종료값을 NULL  : 인덱스 사용 못함
  • 최근 선분이력의 종료값을 최대값 : 인덱스 사용 가능. 성능상 유리 
  • 자세한 성능 이슈는 SQLP에서 배움.

02. 이력 관리 레벨

관리 레벨에 따라 로깅 조건이 바뀐다.

레벨

  • Low (인스턴스 레벨) : 하나의 인스턴스가 변경되면 모든 인스턴스 로깅.
  • Colum (속성 레벨)   : 속성 값이 변할때, 해당 이벤트의 로그만 생성.
  • Subject (주제 레벨)  : 그룹을 지정하여 그룹 단위로 로깅.

인스턴스 레벨 장단점

  • 스냅샷 쉬움
  • 저장공간 낭비
  • 변경점 찾으려면 과거 스냅샷과 merge 해야 함.
  • 특정 순간의 스냅샷만 보는게 아니라면 복잡해진다.
  • 변화가 빈번하게 발생한다면 고려해볼만 하다.

속성 레벨 장단점

  • 명확하고 독립적인 로깅이 가능하다.
  • 통합 이력 관리가 가능하다.
  • 변화 가능성은 매우 낮으면서, 관리 대상이 많은 경우에 유리하다.
  • 여러 속성에 대한 이력이 필요할 때 많은 merge 가 발생한다.
  • 액세스 쿼리에서 조건 검색이 조금 어렵다.
  • 변화가 너무 많은 경우에는 적용이 곤란하다.

주제 레벨 장단점

  • 위의 2개의 레벨의 장점을 모두 수용하는 형태의 관리 형태.
  • 확장성이 확보됨.
  • 독립적인 로깅이 가능.
  • 다른 엔터티와 통합 이력 관리가 가능하다.
  • 속성 레벨의 단점을 해소할 수 있음.
  • 전체를 참조할 때 인스턴스 레벨에 비해 Merge가 많이 발생.
  • 주제에 따라 변경 정도의 차이가 심한 경우에 유리.