현재 검색조건 list 전체를 paging 처리 없이 전체 api 호출하는 로직 추가
apiResponse.isSuccess() == true 일 경우, [tb_car_ffnlg_trgt.CAR_BASS_MATTER_INQIRE_ID, tb_car_ffnlg_trgt.CAR_LEDGER_FRMBK_ID] 값 update
- **`VmisRequestEnricher`에서 조회구분코드 자동 설정**
- `inqireSeCode`의 기본값을 `"1"(열람)`으로 자동 설정하도록 변경.
- 중복된 수동 설정 로직 제거.
- **JSP에서 조회구분코드 필드 제거**
- `inquiry.jsp`에서 드롭다운 및 관련 코드 삭제 (`inqireSeCode` 필드).
- 자바스크립트에서도 조회구분코드 처리 로직 제거.
- **API 요청 관련 코드 간소화**
- `ExternalVehicleApiServiceImpl` 및 `InternalVehicleInfoServiceImpl`에서 `inqireSeCode` 수동 설정 코드 제거.
- 프론트엔드에서 전달할 필요 없어져 해당 변수 제거.
- **기본 요청 설정값 변경**
- `VmisRequestEnricher`에서 `detailExpression` 기본값을 `"2"(최종내역)`에서 `"1"(전체내역)`으로 변경.
- `README.md`, `COMPARISON_GUIDE.md`, `이첩조건_추가방법.md`, `VMIS_INTEGRATION_COMPLETE.md`, `VMIS_INTEGRATION_STRATEGY_DESIGN.md` 파일 삭제.
- Chain of Responsibility 패턴 비교 규칙 관련 문서.
- 서비스 및 구현 방법에 대한 가이드 문서 포함.
- 이첩 조건 추가 방법 및 통합 완료 가이드 문서.
- 조회구분코드 : 자동차기본정보조회, 갑부에 따라 구분코드 다르게 설정하는 부분 기본셋팅값으로 추가 함
- VehicleInquiryController 신설: 차량 통합 조회, 기본정보 조회, 등록원부(갑) 조회 기능 제공
- `/getIntegratedInfo.do`: 차량 통합 조회 엔드포인트 추가
- `/getBasicInfo.do`: 차량 기본정보 조회 엔드포인트 추가
- `/getLedgerInfo.do`: 차량 등록원부(갑) 조회 엔드포인트 추가
- Swagger API 문서화 추가
- 차량 정보 조회 화면 JSP 파일 추가: `/WEB-INF/views/carInspectionPenalty/callApi/inquiry.jsp`
- 조회 필드 및 조회 결과 표시 UI 구현
- 차량 통합 조회, 기본 조회, 등록원부 조회 옵션 제공
- 입력값 유효성 검증 및 초기화 버튼 기능 구현
- AJAX 기반 API 요청/응답 처리 로직 추가
- 서비스 계층 VehicleInfoService 의존성 주입하여 통합 로직 처리
✅ 새로운 차량 조회 기능 제공 및 사용자 편의성 개선
- Getter: 모든 필드에 대해
- Setter: 모든 final이 아닌 필드에 대해
- toString(): 모든 필드 포함
- equals(): 모든 필드 기반
- hashCode(): 모든 필드 기반
- RequiredArgsConstructor: final 필드에 대해
- LedgerRequest의 detailExpression 기본 값을 "1"로 수정 (전체내역 조회)
- application-local.yml 기본 VMIS 모드 external로 전환
- Internal/External 구현체에서 detailExpression 값 통합 수정
✅ BUILD SUCCESSFUL
- getVehicleInfo 오버로딩 추가: 차량번호 -> 요청 객체로 확장
- 기본/등록원부 요청 시 필수 파라미터 적용 로직 추가
- 고정값 설정: 개인정보공개, 경로구분코드, 내역표시, 조회구분코드
- External/Internal 모드 구현체에서 통합 로직 적용 및 레코드 기반 LedgerRequest 구성
- Request, Response 객체의 필드 설명 보강 (Swagger)
- Controller, Service 전반적으로 요청 구조 통일
- application-local.yml 기본 모드 internal로 변경
✅ BUILD SUCCESSFUL
- 내부/외부 VMIS 모드 통합 및 외부 REST URL 동적 구성
- VehicleInfoService로 서비스 계층 역할 재구성
- BasicResponse 및 LedgerResponse 단독 조회 기능 추가
- VMIS 통합 속성 구조 변경 및 application-{profile}.yml 수정
- 컨트롤러 메서드 간결화 및 모드 기반 분기 로직 추가
- 중복 모델 제거 및 Envelope 구조 통일
- Swagger 테스트 컨트롤러 보강
- ExternalVehicleApiServiceImpl: 외부 VMIS API 호출 구현
- 차량 기본정보 및 등록원부 조회 로직 추가
- 오류 처리 및 실패 응답 객체 생성 로직 포함
- VmisCarBassMatterInqireServiceImpl/VmisCarLedgerFrmbkServiceImpl:
- 내부 서비스 관계와 API 호출 보강, 응답 로그 저장 로직 추가
- 오류 시 트랜잭션 독립적 로그 작성 보장
- 관련 로그 서비스 구현체 (VmisCarBassMatterInqireLogServiceImpl, VmisCarLedgerFrmbkLogServiceImpl): 요청/응답 로그 저장 및 오류 로그 추가
- 기존 인터페이스 및 클래스 위치 이동 (VehicleInfoService 등)
- VMIS RestTemplate 설정을 내부/외부 모드로 분리
- Internal Mode: 정부 API 호출 설정(빠른 타임아웃)
- External Mode: 외부 API 호출 설정(완화된 타임아웃)
- application-{profile}.yml에 환경별 VMIS 설정 추가
- RestTemplateProperties -> VmisProperties로 대체하여 설정 통합
- 타임아웃, 연결 풀, Rate Limit 설정을 모드별로 분기
- 기존 regionCode -> sigunguCode로 수정하여 의미 명확화
- 로그 포맷 개선 및 나열 정보 추가
## 효과
- 환경 구성 단순화 및 명확화
- RestTemplate 설정 관리 용이성 향상
- 코드 유지보수성 및 가독성 개선
✅ BUILD SUCCESSFUL
중복 VO 제거 및 응답 모델 단순화
## 제거된 파일
- ❌ VehicleBasicInfoVO.java
- ❌ VehicleLedgerVO.java
- ❌ VehicleResponseMapper.java (변환 로직 제거)
## 변경된 사용처
- VehicleApiResponseVO: BasicResponse, LedgerResponse 직접 사용
- InternalVehicleInfoServiceImpl: Mapper 제거하고 BasicResponse/LedgerResponse 직접 반환
- ExternalVehicleApiService: 동일하게 BasicResponse/LedgerResponse 사용
## 최종 모델 구조 (9개)
```
api/model/
├── Envelope.java # 공통 Envelope
├── VehicleApiResponseVO.java # 최상위 응답
├── request/ # 요청 (2개)
│ ├── BasicRequest.java
│ └── LedgerRequest.java
└── response/ # 응답 (5개)
├── BasicResponse.java ⭐ 클라이언트 응답용
├── LedgerResponse.java ⭐ 클라이언트 응답용
├── VmisCarBassMatterInqireVO.java # DB 저장용
├── VmisCarLedgerFrmbkVO.java # DB 저장용
└── VmisCarLedgerFrmbkDtlVO.java # DB 저장용
```
## 효과
- 중복 모델 제거 (3개 파일 삭제)
- 변환 레이어 제거 (VehicleResponseMapper 삭제)
- Internal/External 모두 동일한 응답 모델 사용
- 코드 간소화 및 유지보수성 향상
## 빌드 결과
✅ BUILD SUCCESSFUL
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
이름만 다르고 필드가 동일한 클래스 통합
## 통합된 클래스
### 1. Envelope (완전히 동일)
- ❌ api/internal/model/common/Envelope.java (삭제)
- ✅ api/vo/Envelope.java (유지)
- 변경: internal 패키지 전체에서 import 경로 수정
### 2. BasicRequest (더 완전한 버전 사용)
- ❌ api/vo/VehicleBasicRequestVO.java (삭제)
- ✅ api/internal/model/basic/BasicRequest.java (유지)
- 변경: ExternalVehicleApiService에서 BasicRequest 사용
### 3. LedgerRequest (더 완전한 버전 사용)
- ❌ api/vo/VehicleLedgerRequestVO.java (삭제)
- ✅ api/internal/model/ledger/LedgerRequest.java (유지)
- 변경: ExternalVehicleApiService에서 LedgerRequest 사용
## 효과
- 중복 클래스 3개 제거
- Internal/External 모두 동일한 모델 사용
- 코드 일관성 및 유지보수성 향상
## 빌드 결과
✅ BUILD SUCCESSFUL
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
API 패키지 구조, Internal/External 패턴, 데이터 흐름 상세 설명
## 문서 내용
- API 패키지 전체 구조 및 각 구성요소 설명
- Strategy Pattern을 통한 Internal/External 모드 전환
- 각 모드별 상세 동작 원리 및 데이터 흐름
- 설정 가이드 및 사용 예제
- 트러블슈팅 및 성능 최적화 가이드
## 주요 섹션
1. 개요 및 설계 원칙
2. 패키지 구조 (디렉토리 트리)
3. 아키텍처 패턴 (Strategy, DI, 계층화)
4. Internal Mode 상세 (GPKI, 정부 API 연동)
5. External Mode 상세 (REST API 호출)
6. 공통 구성요소 (VO, Properties, Config)
7. 데이터 흐름 다이어그램
8. 설정 가이드 (개발/운영 환경)
9. 사용 예제 (Controller, Service)
10. 모드 전환 시나리오
11. 트러블슈팅
12. 성능 최적화
13. 보안 고려사항
14. 확장 가능성
## 파일 위치
docs/API_ARCHITECTURE.md
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>