이력 관리란?
- 데이터는 현재의 프로세스만 처리하고 버리는 것이 아니라 오랜 기간의 데이터를 유지시켜 좀 더 가치 있는 정보를 제공할 수 있는 밑거름이 되도록 해야 한다.
이력 관리 대상 선정
사용자 조사
사용자 검증 과정
- 변경 내역을 감시할 필요가 있는가?
- 시간의 경과에 따라 데이터가 변할 수 있는가?
- 시간의 경과에 따라 관계가 변할 수 있는가?
- 과거의 데이터를 조회할 필요가 있는가?
- 과거 버전을 보관할 필요가 있는가?
이력 데이터의 종류
- 발생 이력 데이터
- 어떤 데이터가 발생할 때마다 이력 정보를 남겨야만 한다면 이력은 발생 이력이라고 볼 수 있다.
- 이벤트가 발생할 때에만 이력 데이터를 발생하는 방법이 있고, 이력이 발생하지 않더라도 날마다 데이터를 생성하는 경우도 있다.
- 변경 이력 데이터
- 데이터가 변경될 때마다 변경 전과 후의 차이를 확인해야 한다면 변경 이력을 남길 수 있다.
- 예를 들어, 고객이 주문을 하고서 주문 정보를 변경하였을 때 이전 주문과 변경된 새로운 주문 정보를 관리하기 위해 변경된 새로운 주문 정보를 이력 정보로 남겨야 한다.
- 진행 이력 데이터
- 업무의 진행에 따라 이 데이터를 이력 정보로 남겨야만 하는 경우가 있다.
- 대부분의 주문 업무 처리의 경우 각 단계가 언제 누구에 의해서 처리되고, 현재 단계는 무엇인지에 관한 정보가 필요한 경우가 많다. 이러한 경우의 업무를 처리하기 위해서는 진행 이력이 중요하다.
이력 관리 형태
- 시점 이력 : 데이터의 변경이 발생한 시각만을 관리
- 선분 이력 : 데이터 변경의 시작 시점부터 그 상태의 종료 시점까지 관리
선분 이력 관리 유형
- 인스턴스 레벨 이력 관리 : 하나의 인스턴스의 어떤 변경이라도 발생하면 전체 인스턴스를 새롭게 생성하는 방식의 이력 관리 유형이다.
인스턴스 레벨 이력 관리 특징
- 한 번의 액세스로 스냅샷을 참조하는 것이 가능하다. 즉, 한 번의 액세스로 해당 시점의 모든 데이터를 참조하는 것이 가능하다.
- 로그성 데이터를 저장할 목적인 경우 적당한 방법이다.
- 다른 이력 관리 유형에 비해 저장하기가 쉽다.
- 가장 큰 단점 중 하나는 하나 이상의 컬럼에 변경이 발생했을 때 이벤트가 모호해진다는 점이다.
- 만약 이벤트가 자식 정보를 가지게 된다면 매우 치명적이다.
- 이력 관리의 다른 유형들에 비해 저장 공간의 낭비를 초래할 수 있다.
- 특정 순간의 스냅샷만 보는 게 아니라면 처리가 복잡해지는 경향이 있다.
- 변화가 빈번하게 발생하는 상황이라면 고려해 볼 수 있는 유형이다.
- 속성 레벨 이력 관리 : 이력을 관리할 대상 속성에서 변화가 생길 때만 이력을 생성하는 방식이다.
속성 레벨 이력 관리 특징
- 변경 이벤트가 매우 분명하게 관리된다. 즉, 실제 어떤 데이터가 변경되었는지가 분명하다.
- 하나의 이력 관리 엔티티에서 다른 엔티티와 통합 이력 관리가 가능하다.
- 변경된 것만 처리하기 때문에 독립적 처리가 가능하다.
- 변화가 발생할 가능성은 매우 낮으면서 이력 관리 대상 속성은 매우 많은 경우에 사용하는 것이 유리하다.
- 특정 속성들에 변화가 집중되는 경우에 해당 속성에 대해서만 이력을 관리할 수 있기 때문에 유리하다.
- 여러 속성에 대한 이력이 필요할 때 많은 Merge가 발생한다.
- 이력 관리의 다른 유형들에 비해서 향후 사용될 데이터 액세스 쿼리에서 조건 검색이 조금 어렵다.
- 변화가 너무 많은 경우에는 적용이 곤란하다.
- 주제 레벨 이력 관리 : 내용이 유사하거나 연동될 확률이 높은 것 별로 인스턴스 레벨 이력을 관리하는 방법이다.
주제 레벨 이력 관리 특징
- 인스턴스 레벨과 속성 레벨의 장점을 모두 수용하는 형태의 이력 관리 형태이다.
- 목적이 분명한 엔티티를 생성함으로써 확장성을 확보할 수 있는 용도로 사용할 수 있다.
- 변경 부분만 처리가 가능하다.
- 다른 엔티티와 통합 이력 관리가 가능하다.
- 속성 레벨의 단점을 해소할 수 있다.
- 전체를 참조할 때 인스턴스 레벨에 비해 Merge가 발생하는 문제점이 존재한다.
- 부문에 따라 변경 정도의 차이가 심한 경우 유리하다.
선분 이력 관리용 식별자 확정
선분 이력에서 식별자 결정 시 고려 사항
- 선분 이력을 관리하는 엔티티의 UID를 확정하는 것은 향후에 테이블로 만들어지고 사용될 때의 성능 측면도 고려되어야 한다.
선분 이력에서 종료점 처리 시 주의 사항
- 종료점이 미정이므로 NULL
- 논리적으로는 타당하지만 비교가 불가능
- 인덱스를 사용하지 못하므로 수행 속도 저하
- 수렴하므로 최대치 부여
- 아직 종료되지 않았으므로 무한히 계속되는 것으로 간주
- 최대치 부여(예 : 일자라면 9999/12/31)
- 가능한 테이블 생성 시 Defaulf Constraints 부여
- 수행 속도에 유리
'DAP' 카테고리의 다른 글
[DAP 전문가 가이드] 4.4.1 물리 데이터 모델링 이해 (0) | 2025.04.30 |
---|---|
[DAP 전문가 가이드] 4.3.5 논리 데이터 모델 품질 검토 (0) | 2025.04.30 |
[DAP 전문가 가이드] 4.3.3 엔티티 상세화(2) (0) | 2025.04.29 |
[DAP 전문가 가이드] 4.3.3 엔티티 상세화(1) (0) | 2025.04.29 |
[DAP 전문가 가이드] 4.3.2 속성 정의 (0) | 2025.04.29 |