strelov1/freehire — freehire — the open-source search engine for job seekers
freehire — 구직자를 위한 오픈소스 채용 검색 엔진
freehire는 회사 채용 페이지와 ATS, 구인 게시판 등 320개 소스에서 공고를 모아 검색하는 오픈소스 서비스입니다. 공고를 표준화하고 중복을 합쳐 공개 API로 제공하며, 이력서 작성과 지원 추적 기능도 같은 저장소에 포함합니다.
- 주제
에디터 노트
공고 검색과 지원 관리 기능을 한 저장소에서 다루는 구성은 분명합니다. 특히 수집 작업자를 API 서버와 분리하고, 검색 색인을 큐로 갱신하며, 공고 중복 제거와 종료 처리를 명시한 점은 운영 구조를 파악하는 데 도움이 됩니다. 다만 README의 공고 수는 특정 날짜의 스냅샷이며, 실제 검색 결과도 고유 공고 기준으로 집계한다고 설명합니다. 출처별 건수는 중복 공고가 여러 유형에 포함돼 합계가 전체보다 커질 수 있습니다. 이력서 맞춤이 정보를 지어내지 않는다는 설명이나 공고 실재 신호의 판정 방식은 소개돼 있지만, 이 자료만으로는 정확도나 평가 기준을 확인하기 어렵습니다. 기능 범위와 수집 규모는 제시돼 있지만 품질을 판단할 측정 결과까지 제시하지는 않습니다.
AI 요약
freehire는 회사 자체 채용 페이지와 Workday, Greenhouse, Lever 같은 ATS에서 공고를 수집하는 구직 검색 서비스입니다. README는 320개 소스에서 470,000개가 넘는 기업의 공고 330만 건 이상을 모았다고 설명합니다. 공고는 공통 스키마로 정규화하고 안정적인 키로 중복을 제거합니다. 지역, 근무 형태, 경력 수준, 기술, 급여를 기준으로 전문 검색과 필터를 제공하며, 분류 항목은 직접 관리하는 사전에서 가져옵니다.
수집 파이프라인과 데이터
프로젝트는 ATS 플랫폼, 여러 기업의 공고를 재게시하는 집계 사이트와 구인 게시판, 기업별 채용 페이지를 소스로 구분합니다. README의 2026년 10월 20일 스냅샷에는 기업 477,323곳의 고유 공고 3,371,563건이 기록돼 있습니다. 이 가운데 ATS 플랫폼 117곳에서 2,936,676건, 집계 사이트와 게시판 133곳에서 444,654건, 기업 채용 페이지 52곳에서 23,293건을 수집했다고 밝힙니다. 공고가 여러 소스에 있으면 전체 고유 건수에는 한 번만 포함하지만, 소스 유형별 합계에는 각각 들어가므로 유형별 합은 전체보다 클 수 있습니다.
수집과 처리는 API 서버와 분리된 일회 실행형 작업자로 구성합니다. 작업자는 공고 수집, LLM 기반 보강, pgvector 임베딩 생성, Meilisearch 색인 반영, Telegram 게시물 수집과 공고 추출 등을 맡습니다. 스케줄러에서 실행하도록 설계했으며, 작업은 데이터베이스 연결 정보를 사용하고 실패하면 0이 아닌 상태 코드로 종료합니다. 공고를 완전히 삭제하지 않고 종료 상태로 처리합니다.
기업 추가는 이미 지원하는 ATS를 쓴다면 보드 카탈로그에 기업, 공급자, 보드 정보를 한 줄 등록하는 방식입니다. 새 ATS를 지원하려면 Go 어댑터를 구현하고 등록 목록에 추가합니다. 어댑터는 공통 Source 인터페이스를 따르며, 카탈로그에 보드를 등록할 때 공급자 정보를 검증합니다.
검색부터 지원 관리까지
공개 HTTP API는 인증 키 없이 공고 목록을 조회할 수 있습니다. 서비스는 저장 검색과 이메일 또는 Telegram 알림, 공유 보드, 시장 분석, 공고의 실재 여부를 나타내는 신호도 제공합니다. 구직자는 이력서 작성과 ATS에 맞춘 PDF 출력, 이력서와 공고 간 점수 계산, LLM 적합도 분석, 이력서 맞춤 기능을 사용할 수 있습니다. 프로젝트는 이력서 맞춤 기능이 정보를 지어내지 않는다고 설명합니다.
지원 관리에는 단계별 지원 보드, 지원 건에 연결하는 이메일 수신함, 변경 이력을 추가하는 이벤트 원장, 알림 기능이 들어갑니다. 채용 담당자 답장을 분류해 관련 지원 건에 연결하는 기능도 포함합니다. 앱 안의 에이전트는 대화, 웹 탐색, 프로필 조회, 이력서 맞춤, 면접 연습 모드를 제공합니다. Claude Desktop과 Claude Code용 MCP 서버, CLI, 브라우저 확장 프로그램과 ChatGPT Actions도 함께 제공합니다.
기술 구성과 실행
백엔드는 Go와 Fiber v2를 사용하고 PostgreSQL과 pgvector에 데이터를 저장합니다. SQL 쿼리는 sqlc로 타입 안전한 코드를 생성하며, Meilisearch가 전문 검색과 패싯 검색을 담당합니다. 프런트엔드는 SvelteKit 2와 Svelte 5, Tailwind 4로 구성합니다. Redis는 요청 제한과 실시간 전달에 쓰고, S3 호환 저장소에는 이력서와 이미지 등을 저장합니다. LLM 연결은 OpenAI 호환 엔드포인트를 사용하는 langchaingo로 제공하며, Bifrost가 사용자별 가상 키와 공급자 대체, 사용 비용 추적을 맡습니다. Langfuse는 LLM 호출 관측에 사용합니다.
Docker Compose로 API와 웹, 데이터베이스, 검색 엔진, Redis, 오브젝트 저장소를 띄울 수 있습니다. 데이터베이스 마이그레이션은 새 볼륨을 처음 초기화할 때 자동 적용되며, 이미 만든 볼륨은 별도 마이그레이션 명령으로 갱신해야 합니다. 인증과 LLM 자격 증명은 선택 항목이지만 서버 시작에는 JWT_SECRET이 필요합니다. 저장소는 MIT 라이선스로 공개하며, 수집 파이프라인과 데이터도 공개한다고 설명합니다.
원문: GitHub / 번역·요약: Trawling