로그인 필요 공고 실존 확인: recruit.incruit.com/wooribank/job/2507310011 이 “비공개 공고 로그인 페이지”로 동작합니다 → 수동 등록 대상 판별 로직이 필요합니다.
한 회사가 복수 소스를 가질 수 있음이 확인됩니다 → Company : JobSource = 1:N.
애그리게이터 소스 조사 (2026-07-22 추가)
회사 지정 소스와 성격이 다릅니다 — 회사에 종속되지 않는 전역 소스이며, “검색 조건”으로 수집합니다.
원티드 — 공개 JSON API 2종 동작 확인
GET https://www.wanted.co.kr/api/v4/jobs?country=kr&job_sort=job.latest_order&locations=all&years=-1&limit=5
→ 200, JSON, 인증 불필요. 커서 페이지네이션(`links.next`에 offset 포함)
GET https://www.wanted.co.kr/api/chaos/navigation/v1/results?job_group_id=518&country=kr&job_sort=job.latest_order&limit=5
→ 200, JSON, 직무 그룹(`job_group_id`) 필터 지원
응답에 company.id·company.name·title·address·reward_total·status(active) 포함. 회사 ID가 있어 회사 단위 그루핑이 가능합니다.
robots.txt가 CloudFront WAF에 의해 403입니다 — robots 기준 판단이 불가하고, API는 현재 열려 있으나 WAF 정책 변경 시 예고 없이 차단될 수 있습니다. 소스 고장 감지(FR-19)가 여기서 특히 중요합니다.
전체 플랫폼 조사 결과 (11종 실측)
기술적 가능 여부와 규약상 허용 여부가 서로 다릅니다. “200이 온다”와 “수집해도 된다”를 분리해 판정했습니다.
사람인은 무료 공개 API도 존재합니다 (oapi.saramin.co.kr/job-search, access-key 신청·승인제). 발급받으면 HTML 파싱에서 JSON으로 전환하는 게 안전합니다.
사람인 curl 기본 UA는 307로 막힙니다 — UA 헤더만 넣으면 통과합니다 (WAF·캡차 없음).
점핏은 alwaysOpen=true일 때 closedAt을 마감 판정에 쓰면 안 됩니다.
규약 회색지대 — 채택 시 사용자 판단 필요
플랫폼
기술 평가
규약 문제
리멤버 커리어
조사한 것 중 가장 깔끔 — POST career-api.rememberapp.co.kr/job_postings/search 무인증 JSON, min_updated_at 증분 필터 지원(1일 1회 델타 수집에 최적), ends_at+explicit_due로 상시채용 명시, per 상한 50, 백엔드 258건
상세에 JSON-LD JobPosting — identifier·hiringOrganization·validThrough(ISO)를 정규화 없이 사용. 봇 차단 없음. 백엔드 1,958건
robots.txt가 ClaudeBot·anthropic-ai 등 AI 크롤러를 Disallow: /로 명시 차단. 키워드 검색 경로는 일반 크롤러에게도 차단. 허용 경로는 목록 1페이지 수준
불가
플랫폼
사유
잡플래닛
Cloudflare WAF가 robots.txt 외 전 경로 403 하드 블록. UA·전체 브라우저 헤더·다른 네트워크 모두 동일. cf-mitigated: challenge 없음 = JS 챌린지가 아니라 즉시 거부 → 헤드리스로도 통과 보장 없음. 응답 본문 미수신으로 나머지 전부 미검증
POST api.surfit.io/v1/jobs/all body {"page":N} (JSON, 무인증)
id
is_closed 불리언 + close 문자열(“상시채용”) + ads_end_at
없음 → 필드 해시
UTF-8
조건부 — 약관 회색지대
잡알리오
GET job.alio.go.kr/getCSVRecruitList.do (CSV 전량 export) + recruit.do(HTML 목록) + recruitview.do?idx=(상세)
idx (CSV엔 없고 HTML 목록에만)
마감일항상 실제 날짜(상시채용 센티널 없음)
등록일만
CSV는 MS949(EUC-KR), HTML은 UTF-8
수집 가능
워크넷: 키 없는 호출이 messageCd 002(인증키 오류)에서만 막히고 나머지는 200 통과 → 유효 키만 있으면 즉시 동작. callTp=L(목록)/D(상세), 직종·지역·경력·기간·페이지 필터 존재. 회사 식별자는 busiNo(사업자등록번호). XML 파서 필수, 지역·직종은 공통코드 API(15037287)로 매핑 선행. 갱신 실시간. 일일 트래픽 한도·키 승인 소요는 발급 후 확인(미검증). 사용자가 data.go.kr에서 직접 인증키를 신청해야 합니다.
서핏: SPA(webpack)였지만 번들 grep으로 api.surfit.io/v1 baseURL + POST /jobs/all 발견. 전체 약 971건(개발 직군 최대 비중). WAF·캡차 없음, Origin/Referer 필요. robots.txt는 /jobs 미차단. 다만 기업 서비스 약관에 크롤링·미러링 금지 취지 문구 존재(정확한 국문 원문은 페이지 리다이렉트로 미검증). speciality 필터 값 포맷 미확정(slug_path는 500). 리멤버·잡코리아와 같은 회색지대.
잡알리오: 가장 수집이 쉬움 — getCSVRecruitList.do가 진행 공고 전량(약 959건)을 CSV로 한 번에 반환. 서버 렌더링이라 SPA 문제 없음. robots.txt 부재, WAF 없음. 정부 사이트라 리스크 낮음. 주의 2건: ① CSV는 MS949 디코딩 필수(인크루트와 같은 함정) ② CSV에 idx가 없어 안정 ID는 HTML 목록에서 취득해야 함. 공공기관 전용이라 개발 직무 비중은 낮음.
아직 미검증 — 향후 확장 후보
플랫폼
판단
OKKY Jobs (jobs.okky.kr)
개발자 전용, Next.js(__NEXT_DATA__)라 접근 방법론 동일. 중복 적음. P1 이후
제외 권고 8종 — 캐치·슈퍼루키·커리어리·그리팅·잡다·나라일터·클린아이·인디드류 메타서치. 사유는 개발 공고 부재, 다른 플랫폼과 중복 과다, 또는 애그리게이터가 아님(그리팅은 ATS 호스팅이라 통합 검색 없음).
금융권 전용 애그리게이터는 존재하지 않습니다 — 은행 채용은 ①잡알리오(금융공기업) ②각 은행 자체 페이지 ③인크루트·잡코리아 채용대행으로 흩어지며, 이미 조사된 소스로 커버됩니다.
애그리게이터가 기존 설계에 주는 영향 (P1 설계 시 필수 고려)
영향
내용
소스 모델 변경
현재 Company : JobSource = 1:N으로 소스가 회사에 종속됩니다. 애그리게이터는 회사에 속하지 않는 전역 소스이고 수집 파라미터가 “회사 slug”가 아니라 “검색 조건(직무 그룹·지역·경력)“입니다. 소스 유형을 회사 종속형·애그리게이터형 2종으로 분리해야 합니다
크로스 소스 중복
같은 공고가 당근 Greenhouse와 원티드에 동시 존재합니다. 현재 식별 키 (job_source_id, source_job_id)로는 별개 공고로 저장돼 알림이 2번 갑니다. 회사·제목·마감일 기반 크로스 소스 중복 판정과 대표 공고 선정 규칙이 필요합니다
볼륨 폭증
회사 지정 소스는 회사당 수십 건인데, 원티드에서 직무 그룹 하나만 걸어도 수백~수천 건입니다. “매칭 실패 공고도 저장”(FR-25) 원칙이 여기서 폭발하므로, 애그리게이터는 수집 단계 필터링이 필요합니다
회사 자동 생성
애그리게이터 공고의 회사가 등록되지 않은 회사일 수 있습니다. 자동 생성할지, 등록된 회사의 공고만 취할지 정책이 필요합니다
어댑터 개발 표준 절차
새 회사 등록 시 아래 순서로 판정합니다. 위 단계에서 해결되면 아래로 내려가지 않습니다.