이력 관리: 점이력, 선분이력에 대해

matisse·2020년 7월 10일
0

이력 관리

브랜디 셀러 어드민 페이지를 클론할 때, 수정 이력을 관리해야하는 문제가 있었다. 셀러(판매자)의 정보를 수정하거나, 상품이 등록된 이후 정보가 변경된 케이스였다. 관리하지 않아도 되는 데이터라면 상관이 없지만, 상품 할인이나 셀러의 금융 정보와 같이 히스토리 조회가 필요한 정보들은 덮어 씌워지면 안 되는 문제가 있었다.

처음에는 수정한 시점만 저장해서 점이력으로 관리하려고 했다. 하지만 점이력으로 데이터를 저장하게 되면, 특정 시점에 대해 조회할 때 해당 정보를 찾을 수 없게 되는 문제가 발생한다. 예를 들어 두 개의 점 사이에 존재하는 기간을 조회하게 되면, 어떤 이력을 가져와야 하는지 알 수 없게 된다. (이미지 출처: DBA커뮤니티구루비)


그래서 선분이력을 통해 데이터의 이력을 연결된 기간으로 저장하게 했다. 점이력은 등록된 시점 column만 있는 것과 다르게, 선분이력은 기간으로 만들어야 하기 때문에 시작 시점과 종료 시점이 두 개의 column이 존재하게 된다.

예시

예를 들어 2020년 7월 1일에 서비스에 가입한 회원이 있다. 선분 이력으로 관리하기 위해 해당 레코드의 시작 시점은 7월 1일로, 종료 시점은 예시와 같이 엄청난 미래(9999년 12월 31일과 같이)로 설정한다.

7월 11일이 되어 회원이 자신의 계좌 정보를 변경했다. 이 때 가입 시점 레코드의 종료일을 7월 11일로 바꿔준다. 그리고 가입 시점의 정보를 불러와 계좌 정보만 수정하고, 새로운 레코드로 저장한다. 이 때 저장된 새로운 레코드의 시작일은 7월 11일, 종료시점은 마찬가지로 엄청난 미래로 설정한다.

이렇게 되면 요 회원의 데이터는 끊김 없이 연결된 상태로 유지된다. 그리고 데이터를 불러올 때는 종료시점이 where 종료시점 = 9999년 12월 31일인 데이터를 불러오면 되고, 특정 시점의 데이터도 조회할 수 있게 된다.

0개의 댓글