- **`Step 1` 공통 로직 도입**
- `ComparisonServiceImpl`에서 차대번호 기반 API 호출(`Step 1`)을 공통화:
- `step1Response` 생성 및 응답 데이터 유효성 검증 추가.
- 오류 처리 및 로깅(`log.warn`, `log.error`) 강화.
- 응답 객체를 각 검사 로직에서 재사용하도록 수정.
- **`delay_checker` 메서드 시그니처 업데이트**
- 기존 `check(CarFfnlgTrgtVO existingData, String userOrgCd, NewBasicResponse step0Response)` →
`check(CarFfnlgTrgtVO existingData, String userOrgCd, NewBasicResponse step0Response, NewBasicResponse step1Response)`로 변경:
- 모든 `delay_checker`(`OwnerCloseWithin31Checker`, `ProductUseChecker`, `TransferCase115DayChecker` 등)에 반영.
- 공통 API 호출(`Step 1`) 결과를 재활용하여 불필요한 중복 호출 제거.
- `createBasicRequest`, `bassMatterLogService.updateCarFfnlgTrgtIdByTxIdNewTx` 처리 로직 정리.
- **로직 순서 정리 및 가독성 개선**
- 처리 흐름 단순화:
- 검사 단계 순서를 공통 체크 → 내사종결 → 날짜 수정 후 부과로 정리.
- 각 체커 로직에서 호출 단계별 주석 추가.
- **`ComparisonOmServiceImpl` 로직 재정렬**
- 명의이전 로직(`ownerTransferOmChecker`) 순서를 뒤로 이동:
- 기존 이첩 로직 다음 단계로 조정하여 처리 가독성 강화.
- **불필요한 호출 제거**
- `delay_checker` 내 중복된 `Step 1` 호출 제거:
- 공통화된 `step1Response` 객체를 활용하도록 모든 로직 간소화.
- **기타**
- 주석 및 로깅 일관성 개선:
- 호출 단계별 로그 추가 및 기존 주석 정리.
- `step1Response` 응답 유효성 검증 및 오류 시 로깅 처리 강화.
- **`Step 0` 공통 로직 도입**
- `ComparisonServiceImpl`에 차량번호 기반 API 호출(`Step 0`) 공통화:
- API 호출하여 `step0Response` 객체 생성.
- 결과 데이터 유효성 검증 후 체크 로직에서 재사용.
- 필요 시 null 반환 및 적절한 로그 출력(`log.warn` / `log.error`).
- **`delay_checker` 클래스 메서드 시그니처 수정**
- 기존 `check(CarFfnlgTrgtVO existingData, String userOrgCd)` →
`check(CarFfnlgTrgtVO existingData, String userOrgCd, NewBasicResponse step0Response)`로 변경:
- `OwnerCloseWithin31Checker`, `ProductUseChecker`, `TransferCase115DayChecker` 등 전범위 반영.
- `step0Response`를 활용하여 기존 중복 API 호출 제거.
- 불필요한 `Step 0` 호출 및 데이터 매핑 로직 제거.
- **로직 개선 및 코드 정리**
- 중복 호출 제거 및 API 응답 데이터 재사용을 위해 호출 순서 정리:
- 공통 체크(상품용/명의이전 등) → 내사종결 → 날짜 수정 및 부과 순서로 간소화.
- 각 단계별 로직 정리 및 부적절한 중복 호출 제거.
- **기타**
- 불필요한 주석 제거 및 메서드 내 주석 추가로 가독성 강화.
- `createBasicRequest` 메서드 추가로 API 호출 로직 캡슐화.
- **명의이전 날짜 비교 조건 추가**
- `ProductLevyOver31Checker`, `ProductCloseWithin31Checker` 로직 수정:
- `유효기간만료일 - 90일 <= 변경일자 <= 검사종료일자` 조건으로 비교 강화.
- 기존 검사 종료일자와의 비교 조건을 대체.
- 날짜 비교 로직 내 `vldPrdExpryDate`, `vldPrdExpryDateMinus90`, `inspEndDate` 변수를 추가하여 명확한 기준 설정.
- **비고 상세 생성 개선**
- `ComparisonRemarkBuilder` 로직 확장:
- `유효기간만료일`, `검사종료일자` 등을 비고 상세 정보로 추가.
- 검색 조건, 날짜
- **차량번호 대신 차대번호 활용**
- `OwnerCloseWithin31Checker`, `ProductLevyOver31Checker`, `ProductUseChecker` 등 여러 `delay_checker` 및 `om_checker` 클래스:
- Step 0 단계에서 API 호출을 통해 차대번호(`vin`)를 조회하도록 수정.
- Step 1 단계 및 이후 요청에서는 차량번호 대신 차대번호를 사용.
- **Step 0 로직 추가**
- 명의이전 및 상품용 지연 케이스 모두 Step 0 단계 신설:
- API 호출로 차대번호 조회.
- 응답 데이터 유효성 검증 추가:
- 응답 데이터가 없거나 비정상이면 null 반환.
- 로깅(`log.info` 및 `log.warn`) 강화:
- 오류나 응답 없음 등 상태에 따라 적절히 로그 출력.
- `bassMatterLogService.updateCarFfnlgTrgtIdByTxIdNewTx` 호출로 로그 데이터 초기화.
- **JSP 검색 조건 로직 수정**
- 검색 조건에서 날짜 포맷 관련 `.replace("-", "")` 제거:
- 원본 값을 그대로 활용.
- `searchCond.schRcptYmdStart`, `searchCond.schRcptYmdEnd` 등 검색 타임라인 유지.
- **서비스 로직 유지보수**
- `inspYmd` 또는 `levyCrtrYmd`와 같은 기존 요청 포맷에 따라 Step 0의 차대번호를 전달하도록 기존 메서드 호출 방식 수정.
- 불필요한 중복 호출 및 데이터 매핑 로직 제거.
- **기타**
- 공통화된 API 호출 및 처리 로직 반영.
- 관련 로직 가독성 강화를 위한 주석 및 변수명 수정.
- **`OwnerTransferOmChecker` 및 `ProductUseOmChecker` 클래스 수정**
- 날짜 데이터에서 불필요한 `.replace("-", "")` 호출 제거 및 기존 포맷 그대로 사용하도록 변경.
- 날짜 형식을 처리하기 위해 `inspVldPrd`, `levyCrtrYmd` 등 필드에 처리 로직 조정.
- `DATE_FORMATTER` → `DATE_FORMATTER_DASH` 상수로 변경하여 일관성 확보.
- **데이터 저장 로직 수정**
- `taskPrcsYmd`, `carRegFrmbkChgYmd` 데이터에 기존 포맷 유지:
- `LocalDate.now().format(DATE_FORMATTER_DASH)` 호출로 저장 포맷 명확화.
- 기존 `.replace("-", "")` 변환 로직 제거하여 데이터 원본 그대로 유지.
- **유지보수성 향상**
- 코드 중복 제거 및 주석 추가로 가독성 및 유지보수성 강화.
- 기존 메서드에서 불필요한 호출 로직 제거 및 필요한 부분만 변수 재활용.
- **기타**
- 기존 데이터 처리 로직과 연계, 호환성 확인.
- **날짜 형식 포맷 통일**
- 기존 `yyyyMMdd` → `yyyy-MM-dd` 포맷 변경.
- `AbstractComparisonChecker` 및 `AbstractComparisonOmChecker`에 `DATE_FORMATTER_DASH` 상수 추가.
- 모든 `delay_checker` 및 `om_checker` 클래스에서 `DATE_FORMATTER_DASH` 적용.
- **JSP 초기값 수정**
- `schRcptYmdStart` 검색 기간 초기값 조정:
- 기존 `-15일` → `-10일`로 변경.
- 초기화 버튼 클릭 시 변경된 초기값 반영.
- **페이징 UI 및 로직 제거**
- 불필요한 페이징 관련 코드 삭제:
- JSP에서 `perPageSelect`, `currentPage`, `totalPages` 삭제.
- JS에서 관련 전역 변수(`GRID_PAGINATION_INFO`) 및 `setOptPageOptions` 코드 제거.
- `readData` 메서드 호출 시 항상 첫 페이지(`1`) 로드하도록 변경.
- 그리드에서 일련번호 계산 단순화:
- 기존 전체 페이지 기반 → 현재 페이지의 키 값만 사용.
- **DB 변경**
- `tb_car_ffnlg_trgt_incmp` 스키마에서 날짜 필드 길이 확장:
- `RCPT_YMD`, `TASK_PRCS_YMD`, `CAR_REG_FRMBK_CHG_YMD` 등 날짜 관련 필드 길이 `8 → 10`.
- **기타**
- JSP 및 JS에서 사용하지 않는 포맷팅 코드 제거:
- `moment()` 호출 비활성화 및 주석화.
- **재검 여부 필터 추가**
- `검색 조건`에 재검 여부(`재검(Y)`, `미재검(N)`) 선택 기능 추가.
- 재검 여부에 따른 데이터 필터링 로직 구현:
- JSP: 검색 영역에 재검 여부 체크박스 추가.
- JS: 검색 조건(`schReinspYn`)에 재검 여부 값 추가 및 다운로드 URL에 포함되도록 설정.
- MyBatis: 쿼리에 재검 여부 필터 추가.
- **그리드 컬럼 및 데이터 처리 개선**
- 결과 그리드에 `재검 여부` 열 추가:
- JSP 및 그리드 설정에 관련 컬럼 반영.
- MyBatis 또는 데이터 처리 단계에서 `재검 여부` 값 처리 및 가공 로직 구현.
- 일련번호 계산 로직 단순화:
- 기존 페이징 정보 활용 대신 로우 키만 활용하도록 변경.
- **서비스 및 내부 로직 변경**
- 데이터 처리 단계에서 `재검 여부` 설정:
- `ServiceImpl`: 일수(`daycnt`) 값에 `*` 포함 여부로 재검 여부 결정 후 저장.
- VO 및 Mapper 수정:
- `CarFfnlgTrgtVO`, `CarFfnlgTrgtExcelVO`: 재검 여부(`reinspYn`) 필드 추가.
- DB: `tb_car_ffnlg_trgt` 테이블에 `REINSP_YN` 칼럼 추가, 마이그레이션 SQL 작성.
- **불필요한 페이징 관련 코드 제거**
- 조회 페이징용 전역 변수 및 관련 UI 제거:
- `perPageSelect`, `currentPage`, `totalPages` 등 페이징 UI 요소 삭제.
- JS 및 컨트롤러에서 페이징 관련 전역 로직 제거 및 단순화.
- **기타 개선**
- 검색 초기화 버튼에 재검 여부 관련 로직 추가.
- 검색 조건 정리(`SEARCH_COND`) 및 관련 주석 추가.
- DEBUG 로그 추가: `재검 여부` 설정 및 출력 내역 기록.
- **날짜 형식 처리 개선**
- `inspYmd`, `vldPrdExpryYmd`, `inspEndYmd` 데이터에 대해 `.replace("-", "")` 호출로 날짜 형식을 변환하도록 수정.
- 모든 `delay_checker` 관련 클래스(`OwnerCloseWithin31Checker`, `ProductLevyOver31Checker` 등)에서 동일한 `.replace` 로직 추가하여 입력 데이터의 통일성을 보장.
- **불필요한 replace 호출 제거**
- `CarRegFrmbkChgYmd` 필드에서 `.replace("-", "")` 호출을 제거하여 데이터 원본 그대로 사용.
- **서비스 로직 정리**
- `ComparisonServiceImpl`:
- 날짜 검증 순서 중 재사용성이 높은 `transferCase115DayChecker` 로직 순서를 앞쪽으로 이동.
- 기존 순서를 재정렬하여 처리 흐름을 명확하게 개선:
- 이첩 로직 → 내사종결 → 날짜 수정 후 부과 순서로 정리.
- 처리 단계별 주석 추가로 가독성 개선.
- **유지보수성 강화**
- `ComparisonServiceImpl` 및 관련 `Checker` 간 호출 순서 명확히 정리.
- 중복 코드를 완화하고 관련 주석 및 로깅 추가.
- **차량번호 및 최종등록일 별표(`*`) 처리 로직 구현**
- 차량번호와 최종등록일 앞에 별표가 포함된 경우, 별표를 별도의 필드(`vhclno-asterisk`, `last-reg-ymd-asterisk`)로 분리하여 처리.
- 별표 제거 후 본 데이터와 함께 파싱 및 조립 로직 반영:
- `CarFfnlgTrgtServiceImpl`에 별표 분리 및 데이터 처리 코드 추가.
- 별표가 포함된 경우 다시 앞부분에 별표를 붙이는 로직 구현.
- **`application.yml` 필드 길이 설정 변경**
- `vhclno-asterisk`, `last-reg-ymd-asterisk` 필드 추가 및 길이(1바이트) 정의.
- 기존 필드들의 바이트 길이 수정:
- `vhclno`: 13 → 12 (2바이트), 12 → 11 (3바이트)
- `last-reg-ymd`: 12 → 11 (2바이트), 11 → 10 (3바이트)
- 기타 관련 필드 길이 조정.
- **DB 스키마 변경**
- `tb_car_ffnlg_trgt` 테이블:
- 날짜 필드(`RCPT_YMD`, `INSP_YMD`, `LAST_REG_YMD`, 등)의 길이 기존 8 → 10으로 확장.
- `DAYCNT` 필드 길이 4 → 5, 유효기간 만료일자(`VLD_PRD_EXPRY_YMD`) 등 관련 필드 길이 변경.
- **로깅 개선**
- 별표 존재 여부 및 최종 데이터 확인용 DEBUG 로그 추가:
- 차량번호 및 최종등록일 시 별표 처리 전후 내역 상세 기록.
- **유지보수성 및 가독성 향상**
- 반복적인 고정폭 필드 처리 로직 리팩토링:
- `padRightBytes` 호출부 정리.
- 중복 및 불필요한 변수 제거, 관련 주석 정리.
- **날짜 형식 처리 방식 변경**
- 기존 YYYYMMDD → YYYY-MM-DD 변환 로직 제거:
- JSP 화면, Excel 다운로드, DB 쿼리에서 날짜 변환 없이 원본 날짜 값을 그대로 사용하도록 수정.
- `formatYmd` 및 관련 변환 메서드 제거.
- **날짜 형식 검증 로직 비활성화**
- 입력 데이터에서 '*' 포함된 특수 형식이 있는 경우를 고려하여 날짜 검증 로직 삭제:
- `isValidDate` 호출 제거 및 주석 처리.
- 검사일자, 검사종료일자, 유효기간만료일자 등에 대한 검증 로직 비활성화.
- **DB 스키마 변경**
- `tb_car_ffnlg_trgt`, `tb_car_ffnlg_trgt_incmp` 테이블:
- `RMRK_DTL` 컬럼 타입 `MODIFY COLUMN`으로 변경.
- **MyBatis 매퍼 수정**
- `CarFfnlgTrgtMapper_maria.xml`:
- SELECT 구문에서 DATE_FORMAT 제거, 원본 날짜 필드 그대로 반환하도록 수정.
- **서비스 로직 개선**
- `CarFfnlgTrgtServiceImpl`:
- `DateTimeFormatter` 추가 및 사용하지 않는 변수를 명확히 삭제.
- `padRightBytes`, `padLeftBytes` 호출부에서 날짜 형식 그대로 처리.
- **기타**
- `application.yml`에서 주석 정리 및 일관성 유지.
- 코멘트 추가 및 불필요한 변환 관련 로직 제거.
- **비고 상세 생성 및 업데이트**
- `ComparisonOmRemarkBuilder` 및 `ComparisonRemarkBuilder` 수정:
- 비고 상세 생성 시 API 호출 및 비교 과정, 판정 근거 등 추가 기록.
- 각 판정 유형별로 세부 정보를 포함하도록 형식 개선.
- **Checker 로직 개선**
- `OwnerCloseWithin31Checker`, `OwnerLevyOver31Checker` 등 `delay_checker` 클래스:
- 명의이전일자 및 검사일 간 조건 비교 로직 확장.
- 추가 쿼리 조건 및 상세한 레코드 비교 로직 포함.
- **DB 스키마 변경**
- `tb_car_ffnlg_trgt`, `tb_car_ffnlg_trgt_incmp` 테이블:
- `RMRK_DTL` 컬럼 타입을 `TEXT`로 변경.
- `RMRK_DTL` 컬럼 신규 추가로 비고 상세 저장 로직을 지원.
- **API 수정**
- `ComparisonRemarkBuilder.buildOwnerLevyOver31RemarkDetail` 메서드:
- `vldPrdExpryYmd`, `inspEndYmd` 등 추가 파라미터 처리.
- 검사종료일 및 유효기간만료일에 따른 추가 비교 로직 반영.
- **기타**
- 기존 비고 생성 로직 리팩토링 및 상세 기록을 위한 주석 추가.
- 변경 사항을 반영한 추가 SQL 파일 작성 및 테이블 변경 적용.
- **병렬 처리 시 사용자 정보 전달 구현**
- 세션 기반 사용자 정보 조회 로직 추가: `SessionUtil.getLoginUser()`.
- 사용자 정보를 병렬 처리의 각 작업으로 전달하기 위해 메소드 서명 수정:
- `processOneTarget`, `executeComparison`에 `LoginUserVO` 매개변수 추가.
- **Comparison 서비스 로직 업데이트**
- 기존 세션 종속 비교 로직을 호출부에서 사용자 정보를 전달하도록 수정:
- `ComparisonOmServiceImpl`, `ComparisonServiceImpl` 코드 변경.
- `ComparisonOmChecker`, `delay_checker`의 호출 방식 업데이트.
- **코드 리팩토링**
- 중복된 세션 접근 코드를 `try-catch` 처리로 통합.
- 불필요한 세션 의존성 최소화 및 호출부 주입 방식으로 변경.
- **병렬 처리 개선**
- `CompletableFuture` 기반 병렬 처리에 사용자 정보가 올바르게 전달되도록 수정.
- 스레드 풀 크기 최적화: `(CPU 코어 수 * 2)`.
- **기타**
- 주석 추가 및 로그 개선: 세션 조회 실패 경고 로그 및 사용자 정보 전달 내역 로깅.
- 기존 트랜잭션 처리 방식과 병렬 처리 간의 연계 유지.
- **사용자 조직코드 추가**
- `ComparisonChecker` 및 `ComparisonOmChecker`의 `check` 메서드에 `userOrgCd` 매개변수 추가.
- 세션에서 사용자 정보를 가져오던 방식 제거 후, 호출부에서 조직코드를 전달하도록 변경.
- **Checker 클래스 수정**
- `ProductUseChecker`, `OwnerCloseWithin31Checker`, `OwnerLevyOver31Checker` 등 모든 `delay_checker` 및 `om_checker` 클래스에서 새로운 매개변수(`userOrgCd`)를 활용하는 방식으로 수정.
- 사용자 조직코드 유효성 검사 추가.
- **세션 의존성 제거**
- 불필요한 `SessionUtil` 및 `LoginUserVO` 관련 코드 삭제.
- 사용자 정보의 외부 주입 방식을 통해 세션 로그인을 사용하지 않는 호출도 가능하도록 개선.
- **비교 서비스 로직 수정**
- `ComparisonServiceImpl` 및 `ComparisonOmServiceImpl`에서 세션 기반 사용자 정보 조회 후 조직코드 추출 및 모든 관련 호출로 전달.
- 비교 로직 유지보수성 강화.
- **기타**
- 중복 코드 제거 및 코드 정리.
- 주석 업데이트.
- **명의이전일자 ~ 검사일 계산 조건 보완**
- `명의이전일자 < 검사종료일` 조건을 추가하여 검사종료일에 따른 비교 로직 세분화.
- 검사일과 명의이전일자 간 기준 일수 비교 조건 명확화:
- 검사종료일 기준 조건 추가.
- 명의이전일자가 검사일 내 포함되는지 확인 로직 개선.
- **적용 대상**
- `OwnerCloseWithin31Checker`
- `OwnerLevyOver31Checker`
- `ProductCloseWithin31Checker`
- `ProductLevyOver31Checker`
- **로그 레벨 조정**
- `TransferOmChecker` 관련 `log.debug`를 `log.info`로 변경하여 로그 가시성 강화.
- **문서 업데이트**
- `자동차과태료_비교로직_정리-[지연].md`에 관련 변경사항 반영:
- 명의이전일자 비교 기준 및 로직 설명 수정.
- **기타**
- 중복 코드 제거 및 가독성을 위한 리팩토링.
- 검사일자의 파싱 처리 및 최신 명의이전일자 계산 로직 정리.
- **비고 생성 메서드 수정 및 분리**
- `ComparisonOmRemarkBuilder` 및 `ComparisonRemarkBuilder`:
- `buildProductCloseLevyRemark` 메서드를 `buildProductCloseRemark`와 `buildProductLevyRemark`로 각각 분리.
- 비고 형식과 요구사항에 따라 명확히 구분된 메서드 제공.
- `OwnerTransferRemarkBuilder`와 관련된 비고 생성 메서드 개선:
- 파라미터 추가(`sggNm`, `ownerNm`)로 상세 정보 포함 가능.
- **Checker 클래스 로직 수정**
- `ProductLevyOver31Checker`, `ProductCloseWithin31Checker`, `OwnerTransferOmChecker`:
- 분리된 비고 생성 메서드 호출 방식으로 변경.
- 불필요 매개변수 제거 및 명확성 증가.
- **비고 형식 변경**
- 31일 이내: `명의이전(YYYY.MM.DD) 이전소유자 상품용`
- 31일 초과: `시군구명/소유자명, 미수검명의이전(YYYY.MM.DD)`
- **기타**
- 중복된 메서드 제거 및 가독성을 위한 리팩토링.
- 기존 로직 및 형식에 맞춰 코드 정리.
- **주요 변경 사항**
- `RMRK_DTL`(비고 상세) 컬럼 추가:
- `tb_car_ffnlg_trgt`, `tb_car_ffnlg_trgt_incmp` 테이블에 `RMRK_DTL`(비고 상세, 최대 4000자) 컬럼 추가.
- MyBatis 매퍼 및 VO 수정:
- 관련 쿼리(`SELECT`, `INSERT`, `UPDATE`)에 `RMRK_DTL` 필드 추가.
- `CarFfnlgTrgtVO`, `CarFfnlgTrgtExcelVO` 등 데이터 모델에 `RMRK_DTL` 속성 추가.
- 비고 상세 생성 로직 추가:
- `ComparisonRemarkBuilder`, `ComparisonOmRemarkBuilder`에 비고 상세 생성 메서드 다수 추가(`buildProductUseRemarkDetail` 등).
- 로직 내 기존 `RMRK` 생성 메서드와 함께 호출하여 상세 내용을 추가 저장.
- Checker 개선:
- `delay_checker`, `om_checker` 등 모든 체크 로직에서 비고 상세(`RMRK_DTL`) 생성 후 DB 업데이트.
- **화면 및 UI 변경**
- JSP 업데이트:
- 상세 화면 및 Excel 다운로드 시 ‘비고 상세’ 열 추가.
- ‘비고’는 너비 증가(`200px → 300px`), ‘비고 상세’는 신규 추가(`200px`).
- 내용이 길 경우 30자 요약 표시 및 팝업 기능 추가.
- **기타**
- SQL 정리 및 누락된 매퍼 반영.
- 가독성 개선을 위한 코드 리팩토링.
- 주석 및 문서 업데이트 (`자동차과태료_비교로직_정리-[미필].md`).
- **비고 형식 변경 및 단순화**
- 불필요한 다중 매개변수를 제거하고 단일 매개변수 처리로 변경
- 상품용, 명의이전, 이첩 등의 비고 생성 로직에서 복잡한 문자열 빌더 사용 제거, 단순 문자열 반환 방식으로 수정
- **시군구명 및 소유자명 추가**
- 명의이전 및 이첩 비고 생성 시 시군구명(`sggNm`)과 소유자명(`ownerNm`)을 파라미터로 추가
- `carFfnlgTrgtMapper.selectSggNmBySggCd` 호출을 통해 시군구명 조회 로직 적용
- **불필요 메서드 삭제**
- `NewBasicResponse` 및 `NewBasicResponse.Record` 관련 비고 생성 메서드 제거 (`buildProductUseRemark`, `buildProductUseChangeRemark` 등)
- **Checker 로직 수정**
- `OmChecker`, `delay_checker` 내 비고 생성 로직 모두 단일화된 메서드 호출로 변경
- 모든 비고 생성 로직에 시군구명 및 소유자명 적용
- 호출 매개변수 최소화 및 유지보수성 강화
- **기타**
- 기존에 사용되었던 복잡한 비고 생성 포맷 정리 및 관련 주석 제거
- 중복 코드 제거 및 가독성을 위한 리팩토링
- **병렬 처리 도입**
- 대상 데이터 처리 작업을 병렬화하여 성능 최적화
- CPU 코어 수의 2배 스레드 풀 생성 및 `CompletableFuture` 활용
- **트랜잭션 단위 변경**
- 기존: 전체 트랜잭션으로 관리, 하나의 실패 시 전체 롤백
- 변경: 개별 대상별 트랜잭션 적용, 실패 데이터만 롤백
- **통계 및 로그 추가**
- 성공/실패, 유형별 처리 건수(상품용, 이첩, 정상 등) 통계 데이터 제공
- 병렬 처리 상태 및 작업 내역 로그 추가
- **기타**
- `TransactionTemplate` 도입 및 가독성을 위한 코드 리팩토링
- 문서 업데이트 (`자동차과태료_비교로직_정리-[미필].md`, `자동차과태료_비교로직_정리-[지연].md`)
- **소유자명 검증 보완**
- 소유자명은 null 또는 공백 입력도 가능하도록 로직 수정
- 길이 초과(75자) 제한만 유효하게 유지
- **특수문자 '*' 제거 처리 추가**
- 차량번호 및 일수(`daycnt`)에서 전출차량 및 재검여부를 나타내는 '*' 제거 후 검증
- `createLedgerRequest`, `createBasicRequest` 등 차량번호를 사용하는 API 호출 로직에 적용
- 숫자값 검증 및 비교 수행 시 특수문자 제거 처리 추가
- **차량번호 형식 검증 로직 보완**
- '*' 특수문자 포함 여부를 허용하도록 정규식 및 검증 프로세스 수정
- '*'만 포함된 경우는 유효하지 않도록 처리
- **Comparison 로직 수정**
- 비교 로직 시작 시 차량번호 및 일수에서 '*' 제거 기능 추가
- **샘플 데이터 수정**
- 샘플 데이터 파일 수정 (`docs/지연-샘플용-utf-8-1.txt`)
- 차량번호 및 일수에서 전출차량 및 재검여부를 나타내는 '*' 적용 예시 추가
- **기타**
- 가독성을 위한 주석 정리 및 로직 구조 개선
- **병렬 처리 도입**
- 대상 데이터별로 처리 작업을 병렬화하여 성능 개선
- I/O 작업 처리 시 CPU 코어 수의 2배 스레드 풀 적용
- **트랜잭션 단위 변경**
- 기존: 전체가 하나의 트랜잭션으로 관리되어 하나의 대상 실패 시 전체 롤백 처리
- 변경: 개별 데이터에 대해 독립적인 트랜잭션 적용, 실패 데이터만 롤백
- **통계 데이터 추가**
- 성공/실패, 유형별 처리 건수(상품용, 이첩, 정상) 통계 제공
- **기타**
- `TransactionTemplate` 및 `CompletableFuture` 활용
- 병렬 처리 로그 및 예외 처리 추가
- 코드 주석 및 가독성 개선