DATOR


서브젝트 이력관리 사례 #3 데이터모델


서브젝트 이력과 연관된 변경이력 사례를 하나 더 소개 해 봅니다.

아마도 이번에 소개 하는 것은 현장에서 많이 발견되는 유형일 겁니다.


[ 그림 1 ] 상품의 여부 속성들

그림4.jpg

 

[ 그림 1 ]은 상품 테이블의 여러 속성 중에서 프로모션과 관련된 제한여부, 가능여부, 제한된 금액을 관리하는 속성들이다.

위 속성들의 이력관리는 어떻게 구현 할 수 있을까 ?

해당 속성들의 쓰임새를 분석해 본 결과는 다음과 같다.

  -- 제한 관련된 속성을 세팅하는 화면이 별도로 존재한다.

  -- 데이터가 변경되면 어떤 속성이 어떻게 변경되었는지 추적 가능해야 한다.

  -- 어느 시점에 무슨 값 이었는지는 관심 없다.  현재 값이 중요하다

 

어떤 이력/로그 관리를 해야 할까 ?

잠시 고민에 빠져 본다.


[ 그림 2 ] 이력 후보 모델

그림5.jpg  

1형은 바로 직전의 컬럼 값만을 저장한 로그 테이블을 생성할 수 있다.  이전 컬럼값을 백업한다는 개념이다. 이전값 만을 복사하여 저장 할 경우, 상품마스터의 값이 실수로 다른 값으로 변경된 경우 원복 할 수가 없을 수도 있다.

3형은 컬럼 스냅샷 형태로 변경되는 컬럼만 이전값, 이후값을 관리하는 형태이다. 개별 컬럼의 변경 이벤트를 알 수 있는 유연성이 좋은 형태이다. 변경되는 컬럼만 저장해야 하는 로직이 추가적으로 필요 하겠다.

두 개의 모델 모두 적용 가능하겠다.

그럼 실전에서는 실제로 어떻게 적용 되었을까 ?


[ 그림 3 ] 실제 적용 모델

 그림6.jpg

[ 그림 3 ]과 같이 최종적으로 구현되었다.

이유가 무엇일까 ?

가장 큰 이 유 는

O O O

O O

O

ASIS 테이블이 [그림3] 처럼 관리 되고 있었다.  ASIS의 모든 테이블들이 모두 구조 변경되어야 하는 것은 아니다. 그 형태를 그대로 유지 하거나 할 수 밖에 없는 것들도 존재한다.

데이터 이행시 1,  2형으로의 변환이 만만하지 않아 보인다. 데이터 클린징의 문제도 발생 할 수 있다.

제한로그를 관리하는 별개 화면 UI [ 그림3 ] 테이블의 데이터를 그대로 읽어와서 변경된 컬럼값을 비교하여 화면에 뿌리고 있었다.  고객과 개발자 모두 화면과 프로그램 로직의 변경을 바라지 않는다. 

데이터를 발생시키는 로직은 쉬운데 반해 검색시 조금의 불합리함이 존재 한다.  1개 컬럼 값이 언제 변경되었는지의 이벤트는 알 수가 없다.  7개 컬럼 중 1개만 바뀌어도 1 row를 복제하는 형태이기 떄문이다.  실제로 화면 UI에서는 이전 값과 비교하여 컬럼값이 틀려지면 빨간색으로 노출 시키고 있었다. ( 프로그램에서 변경된 컬럼을 비교하여 판단하고 있다 )

현재 상품 마스터의 값이 어디에서 잘못 수정되었다면 로그테이블의 이후OO 컬럼값을 이용하여 복원 할 수도 있다.

 

주 의 사 항

위와 같은 로그형 테이블에서는 컬럼값이 실제로 변경 되었을 때에만 데이터가 발생해야 한다. 그러나 많은 개발 프로그램들이 화면에서 데이터 값의 수정과 상관없이 저장 버튼만을 누르면 이벤트가 동작되어 데이터를 발생시키는 사례가 종종 있다.  변경로그 테이블에 변경되지 않은 더미 데이터도 수두룩 쌓여 있곤 하다.  이전 이후 값의 변경여부를 체크하는 로직을 뺴 먹었기 때문이겠다.

 

교 훈

* 데이터 모델과  테이블을 구성하는 방법은 다양하다.

* 어떻게 / 왜 구성하였는지를 관련자들과 협의 하고 결정하는 것이 중요하다.

* 위 로그 테이블의 구성은 전체 모델링 과정 중에서 맨 마지막에 위치하며 , 어떻게 설계하든 대세엔 영향이 없다.  너무 많은 시간 낭비와 고민은 오히려 독이 될 수 있다.

* 참조 : ASIS를 분석하는 리버스 모델링시 백업, 로그, 인터페이스, 시스템 관련 테이블의 분석은 맨 뒤로 미루어 두어도 된다.   설령 모델링시 누락 시켰어도 TOBE 개발하다가 다시 나타나게 된다.  이때 분석 후 설계해도 늦지 않는다.  리버스 때 100% 테이블을 모두 분석해야 한다는 강박관념에서 벗어나자. 이것들 말고 중요한 곳에 시간을 투자하자.

 

 

* 따뜻한 데이터 세상 만들기 - FROM 핫신 *
Tag :

Leave Comments