diff --git a/pom.xml b/pom.xml
index 30fae36..ca2538e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,6 @@
org.postgresql
postgresql
${postgresql.version}
- runtime
diff --git a/src/main/java/com/snp/batch/common/batch/repository/BaseJdbcRepository.java b/src/main/java/com/snp/batch/common/batch/repository/BaseJdbcRepository.java
index b12b52c..3bf752a 100644
--- a/src/main/java/com/snp/batch/common/batch/repository/BaseJdbcRepository.java
+++ b/src/main/java/com/snp/batch/common/batch/repository/BaseJdbcRepository.java
@@ -39,6 +39,9 @@ public abstract class BaseJdbcRepository {
protected String getIdColumnName() {
return "id";
}
+ protected String getIdColumnName(String customId) {
+ return customId;
+ }
/**
* RowMapper 반환 (하위 클래스에서 구현)
diff --git a/src/main/java/com/snp/batch/common/util/JsonChangeDetector.java b/src/main/java/com/snp/batch/common/util/JsonChangeDetector.java
new file mode 100644
index 0000000..96231f1
--- /dev/null
+++ b/src/main/java/com/snp/batch/common/util/JsonChangeDetector.java
@@ -0,0 +1,179 @@
+package com.snp.batch.common.util;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.security.MessageDigest;
+import java.util.*;
+
+public class JsonChangeDetector {
+
+ // Map으로 변환 시 사용할 ObjectMapper (표준 Mapper 사용)
+ private static final ObjectMapper MAPPER = new ObjectMapper();
+
+ // 해시 비교에서 제외할 필드 목록 (DataSetVersion 등)
+ // 이 목록은 모든 JSON 계층에 걸쳐 적용됩니다.
+ private static final java.util.Set EXCLUDE_KEYS =
+ java.util.Set.of("DataSetVersion", "APSStatus", "LastUpdateDate", "LastUpdateDateTime");
+
+ private static final Map LIST_SORT_KEYS = Map.of(
+ // List 필드명 // 정렬 기준 키
+ "OwnerHistory" ,"Sequence", // OwnerHistory는 Sequence를 기준으로 정렬
+ "SurveyDatesHistoryUnique" , "SurveyDate" // SurveyDatesHistoryUnique는 SurveyDate를 기준으로 정렬
+ // 추가적인 List/Array 필드가 있다면 여기에 추가
+ );
+
+ // =========================================================================
+ // 1. JSON 문자열을 정렬 및 필터링된 Map으로 변환하는 핵심 로직
+ // =========================================================================
+ /**
+ * JSON 문자열을 Map으로 변환하고, 특정 키를 제거하며, 키 순서가 정렬된 상태로 만듭니다.
+ * @param jsonString API 응답 또는 DB에서 읽은 JSON 문자열
+ * @return 필터링되고 정렬된 Map 객체
+ */
+ public static Map jsonToSortedFilteredMap(String jsonString) {
+ if (jsonString == null || jsonString.trim().isEmpty()) {
+ return Collections.emptyMap();
+ }
+
+ try {
+ // 1. Map으로 1차 변환합니다. (순서 보장 안됨)
+ Map rawMap = MAPPER.readValue(jsonString,
+ new com.fasterxml.jackson.core.type.TypeReference