JsonDiff vs MapDifference (Json타입 2개 객체 비교)

주야·2024년 4월 23일

JsonDiff

JSON 형식의 데이터 간 차이를 비교하는 도구로 변경 사항을 시각적으로 표시해 두 데이터 세트 간의 차이를 쉽게 파악할 수 있게 합니다. (2009년에 Jesper Nøhr에 의해 만들어졌다.)

  • 특징
    JsonDiff 도구는 커스터마이징이 가능하여 사용자가 비교 프로세스를 조정할 수 있음.

  • 장점

  1. 데이터 간 차이를 시각적으로 명확하게 표현하여 비교를 용이하게 합니다.
  2. 대부분의 JsonDiff 도구는 빠르고 간편하게 사용할 수 있습니다.
  3. 비교 과정을 자동화하여 대규모 데이터 세트를 처리할 수 있습니다.
  • 단점
  1. 대용량 데이터 세트의 경우 성능이 저하될 수 있습니다.
  2. 특정 JsonDiff 도구는 복잡한 데이터 구조에 대한 처리에 제한이 있을 수 있습니다.

MapDifference

Google Guava (구글 자바 프로그래밍 오픈소스 라이브러리) 라이브러리에서 개발되었습니다. MappDifference는 두 개의 Map 객체를 비교하여 키와 값의 차이를 보고합니다.

  • 특징
    추가, 제거, 변경된 항목을 명확하게 식별하고 보고하며, 세부 정보에 접근도 가능합니다.
    Guava의 ImmutableMap 클래스와 함께 사용할 수 있어 변경 불가능한 Map을 다룰 때 유용합니다.
  • 장점
  1. 두 Map 객체 간의 차이를 세밀하게 보고하여 데이터 비교를 용이하게 합니다.
  2. 변경 불가능한 Map에 대한 지원이 있어 안정적이고 안전한 비교가 가능합니다.
  • 단점
  1. Guava 라이브러리에 종속되어 있기 때문에 프로젝트에 추가적인 의존성이 발생합니다.
  2. 비교적 간단한 비교 작업에도 상대적으로 복잡할 수 있습니다.

3depth 객체 기준으로 결과값기준으로 jsonDiff가 훨씬 가독성이 있었다. JsonDiff글 보러가기
jsonDiff는 커스텀해서
수정 시 ⮕ 변경 전 & 변경 후 값을 모두 출력되게 만듬.
삭제 시 ⮕ 객체 비교 후 달라진 부분(삭제된 값)을 출력하게 함.
추가 시 ⮕ 배열타입변수에 한정됨.

같은 조건으로 mapDifference의 경우
jsonDiff와 유사했으나
배열 내 하나하나의 값은 비교가 불가능 함.

예시코드

Map<String, Object> map1 = new HashMap<>();
map1.put("key", new String[]{"value1", "value2"});
Map original = mapper.convertValue(map1, Map.class);

Map<String, Object> map2 = new HashMap<>();
map2.put("key", new String[]{"value1", "value3"});
Map change = mapper.convertValue(map2, Map.class);


MapDifference<String, Object> difference2 = Maps.difference(original1, change2);

결과값

위의 코드에서 map1과 map2의 'key'의 값 비교 시 배열 통째로 비교하여, 배열 안에 있는 각각의 값을 비교해주지는 않는다.

필요 시 변경 전 & 후 값을 추출해서 직접 비교해야한다고 할 듯 싶다.

profile
개발자

0개의 댓글