[BE-38] 리멤버·잡코리아 slice 페이지네이션
작업 내용 (설계 의도)
변경 사항
리멤버의 incremental-since와 잡코리아의 페이지 흐름을 재개 가능한 slice cursor로 전환한다. lastSuccessfulCollectionAt은 완전 SUCCESS cycle에서만 전진한다; FAILED/BUDGET_EXHAUSTED cycle은 성공 기준을 오염시키지 않는다. 규약 회색지대 소스의 차단/robots 관련 실패는 existing source health 경로를 유지한다.
의존
- BE-33
다이어그램
처리 흐름
sequenceDiagram participant D as Dispatcher participant A as Adapter participant R as RunRepository D->>R: last complete SUCCESS D->>A: collectSlice(since, cursor) A-->>D: next cursor or complete
클래스 의존
flowchart LR RememberAdapter --> CollectionSliceDescriptor JobkoreaAdapter --> CollectionSliceDescriptor RememberAdapter --> SourceRequestExecutor JobkoreaAdapter --> SourceRequestExecutor
테스트 케이스
- 리멤버 partial/budget-exhausted cycle은 last successful timestamp를 갱신하지 않는다.
- 잡코리아는 slice page cap에 도달하면 다음 cursor를 반환한다.
- complete slice만 source health normal과 last successful timestamp 갱신 자격을 가진다.
- 403 또는 정책 위반은 같은 KST 일자 재호출 없이 terminal FAILED로 기록되고 false-close를 만들지 않는다.