[BE-36] 사람인·원티드 재개 가능한 slice 페이지네이션

작업 내용 (설계 의도)

변경 사항

사람인과 원티드 adapter를 collectSlice 계약으로 전환한다. 사람인은 page 번호, 원티드는 서버가 준 next URL/cursor를 opaque continuation으로 보존한다. slice가 목록 페이지·공고 예산에 도달하면 다음 cursor를 반환하며, daily budget 도달은 dispatcher/domain이 BUDGET_EXHAUSTED로 처리한다. 총 결과 불일치는 complete 선언 전이면 실패로 기록한다. application.yml 공통 wire-up은 마지막 통합 티켓에서 한다.

의존

  • BE-33

다이어그램

처리 흐름

sequenceDiagram
    participant W as Worker
    participant A as Adapter
    participant P as Platform
    W->>A: collectSlice(cursor, budget)
    A->>P: bounded page requests
    P-->>A: items + next
    A-->>W: postings + continuation

클래스 의존

flowchart LR
    SaraminAdapter --> CollectionSliceDescriptor
    WantedAdapter --> CollectionSliceDescriptor
    SaraminAdapter --> SourceRequestExecutor
    WantedAdapter --> WantedJobClient

테스트 케이스

  • 사람인은 slice page cap에서 다음 page cursor를 반환하고 total-complete를 주장하지 않는다.
  • 원티드는 next link가 있어도 slice budget을 넘는 요청을 하지 않는다.
  • next link가 null이면 두 adapter 모두 complete slice를 반환한다.
  • malformed/허용 외 next URL과 총 건수 불일치는 FAILED outcome이다.