본문 바로가기

Slack 채널 정리

Javers

기존 데이터와 비교해서 변경된 것이 있을 때만 DB 에 저장하기 위해 Javers 를 이용해보았습니다. 시작하고 보니 생각지 못했던 문제들(비교할 두 놈을 분리하기 위해 Deep Copy 해야했던거나 등등) 있었지만 그런 것들 제하고 Javers 로 빈 비교 하는 부분에서 추가 작업 필요했던 것만 정리해보자면 ...


1. Entity 그대로 사용하려고 하니 비교가 제대로 되지 않습니다. 우선 문제가 되는게 Entity 에는 DB 테이블 매핑 위해 @Id 애노테이션 선언한 속성이 있는데 이런 속성 값은 비교 시 제외할 방법을 못 찾았습니다. Javers 인스턴스 생성 시에 비교 제외할 속성 등록하는 방법이 문서에 있긴 하던데 애노테이션 등이 적용된 속성 일부는 이게 잘 안먹는 듯(물론 Javers 제대로 몰라서 그럴 가능성이 있긴 하지만) ... 아무튼 그래서 좀 노가다는 되었지만 비교할 속성들만 가진 VO 를 따로 만들고 BeanUtils.copyProperties(dbEntity, vo0); 식으로 옮겨 담아 문제 우회했습니다.
2. BigDecimal 타입 등의 속성 때문에 비교에 문제가 있었습니다.  가령, 기존 DB 에는' 4.00' 들어 있었는데 새로 넘어 온 데이터에는 '4.0'  이면 변경된 것으로 감지됩니다. 이 문제는 새로 생성한 VO 에서 BigDecimal 타입의 set 메서드에 자릿 수 등을 고정 시켜버려 해결 했습니다. 아래 같은 식으로 ...   

public void setTwlkCd(BigDecimal twlkCd) {
       this.twlkCd = twlkCd.setScale(2, BigDecimal.ROUND_HALF_UP);
}

 

'Slack 채널 정리' 카테고리의 다른 글

Spring Boot 에서 hessian 사용하기  (0) 2019.12.02
bean 담긴 리스트 핸들링  (0) 2019.11.29
리눅스 fuser 명령어  (0) 2019.11.29
git HTTP Basic: Access denied 에러  (0) 2019.11.29
armeria 사용 gradle 설정  (0) 2019.11.29