Revision 테이블 설계와 JSON 구조
- 리비전 테이블은 백오피스 시스템의 변경 이력을 단순하게 저장하기 위해 별도로 운영됩니다. 📜
- 변경 데이터는 JSONB 형태로 저장되어 검색 및 처리 성능을 향상시키고 인덱싱을 지원합니다. 🚀
- 데이터베이스에 JSONB를 저장하기 위해 MyBatis 환경에서는 PostgreSQL 드라이버의
PGobject를 활용하는 커스텀 타입 핸들러가 필요합니다. 🛠️
- 이벤트 모델(ChangeEvent, CreateEvent, ModifiedEvent 등)을 활용하여 비동기적으로 변경 이력을 리비전 테이블에 저장합니다. 📨
- 생성 이벤트와 수정 이벤트에 따라 JSON 구조를 다르게 설계합니다. 생성 시에는 전체 엔티티를, 수정 시에는
propertyName, oldValue, newValue를 포함하여 변경 내역을 명확히 기록합니다. 🔄
- 수정 이벤트의 JSON 구조는 나중에 변경 내역을 쉽게 비교하고 시각화할 수 있도록 돕는 오픈소스 라이브러리 활용을 염두에 둔 설계입니다. 💡
ChangeField라는 함수형 인터페이스 유틸리티를 사용하여 이전 객체와 새 객체를 비교하고 변경된 필드만 추출하여 JSON 형태로 변환합니다. 🔍
- 리비전 테이블은 변경 이력을 누적하는 용도이므로
modifiedAt, modifiedBy 필드 없이 createdAt, createdBy 필드만 포함합니다. ⏳