AS-IS
01. 아키텍처
// content / inavtive
Scheduler (ExpediaBatchScheduler)
├─ syncHotelInfo()
├─ syncInactiveHotelInfo()
↓
Service (ExpediaSyncHotelServiceImpl)
└─ expediaHotelInfoSync()
↓
DAO (직접 호출)
// regions
Scheduler (syncExpediaCityInfoTrigger)
├─ syncCityInfo()
↓
Service (expediaSyncCityService)
└─ syncCityInfo()
↓
DAO (직접 호출)
02. 흐름도
graph TD
A[스케줄러 시작] --> B[ExpediaBatchScheduler]
B --> C{언어 타입 체크}
C -->|languageType 있음| D[콘텐츠 동기화]
C -->|languageType 없음| E[비활성화 + 룸그룹]
D --> D1[배치 이력 생성]
D1 --> D2[마지막 업데이트 날짜 조회]
D2 --> D3[국가 목록 조회]
D3 --> D4{국가 Loop}
D4 --> D5[도시 정보 API 호출]
D5 --> D6[호텔 정보 API 호출]
D6 --> D7{호텔 Loop}
D7 --> D8[expediaHotelInfoSync]
D8 --> D9[호텔 기본정보 저장]
D9 --> D10[이미지 저장]
D10 --> D11[시설 저장]
D11 --> D12[테마 저장]
D12 --> D13[객실 저장]
D13 --> D14[주소 저장]
D14 --> D15[마스터 호텔 업데이트]
D15 --> D7
D7 --> D4
D4 --> D16[배치 이력 완료]
E --> E1[비활성화 동기화]
E1 --> E2[-7일 날짜 계산]
E2 --> E3[Inactive API 호출]
E3 --> E4[100개 단위 파티션]
E4 --> E5[UseYn 업데이트]
E5 --> E6[룸그룹 동기화]
E6 --> E7[국가별 처리]
E7 --> E8[50개 단위 파티션]
E8 --> E9[호텔 정보 조회]
E9 --> E10[룸그룹 업데이트]
style D8 fill:#ff6b6b
style D4 fill:#ffe66d
style D7 fill:#ffe66d
graph TD
A[스케줄러 시작<br/>매일 04:00] --> B[ExpediaSyncCityService]
B --> C{프로덕션<br/>환경 체크}
C -->|production 아님| Z[종료]
C -->|production| D[도시 동기화 시작]
D --> D1[배치 카운터 초기화<br/>TOTAL/SUCCESS/FAIL = 0]
D1 --> D2[마지막 배치 이력 조회<br/>기본: 2015-01-01]
D2 --> D3[공급사 국가 목록 조회<br/>HotelSyncDAO]
D3 --> D4{국가 Loop}
D4 --> D5[SupplierCityInfoRequest 생성<br/>nationIso2 설정]
D5 --> D6[Geography API 호출<br/>/geography/properties]
D6 --> D7{페이지 Loop<br/>token 존재?}
D7 --> D8[JSON 응답 파싱]
D8 --> D9{도시 데이터 Loop}
D9 --> D10{type = 'city'?}
D10 -->|아니오| D9
D10 -->|예| D11{호텔 ID 존재?}
D11 -->|아니오| D9
D11 -->|예| D12[expediaCityInfoSync]
D12 --> D13[SupplierCityInfoVO 생성]
D13 --> D14[데이터 정제<br/>HTML/이모지/길이제한]
D14 --> D15[국가 코드 변환<br/>HK→CN]
D15 --> D16[호텔 ID 250개 단위 분할]
D16 --> D17[리스트 추가<br/>TOTAL_CNT++]
D17 --> D18{리스트 크기<br/>>= 1000?}
D18 -->|예| D19[1000개 배치 저장<br/>insertUpdateSupplierCityInfoList]
D19 --> D20[SUCCESS_CNT 증가]
D20 --> D21[리스트 초기화]
D21 --> D9
D18 -->|아니오| D9
D9 --> D7
D7 --> D4
D4 --> D22[남은 데이터 저장]
D22 --> D23[배치 이력 기록<br/>총/성공/실패 건수]
D23 --> D24[완료 로그 출력<br/>소요 시간]
style D12 fill:#ff6b6b
style D4 fill:#ffe66d
style D7 fill:#ffe66d
style D9 fill:#ffe66d
style D19 fill:#4ecdc4
style D23 fill:#95e1d3