GitHub: https://github.com/PracLee/job_hunting_mcp

1. 왜 이걸 만들게 되었는가

문제의 시작: "같은 서류를 6번 쓰는 고통"

취업 준비를 하면서, 채용 사이트에 이력서를 등록하는 과정이 가장 짜증나는 작업이었다.

원티드는 한 줄 소개 + 성과 중심 bullet + 기술 태그.
사람인은 표 기반 이력서 + 4문항 자기소개서.
잡코리아는 이력서 + 경력기술서 분리.
점핏은 기술 중심 프로필 + 프로젝트 카드.

같은 경력인데, 사이트마다 양식이 다르다.
결국 같은 내용을 6번 복사하고, 붙여넣고, 양식에 맞게 다시 정리하고 있었다.

그리고 공고마다 강조해야 할 포인트가 다르다.
백엔드 공고면 API/DB 경험을 앞에, AI 공고면 RAG/LLM 경험을 앞에.
이것까지 매번 수동으로 하고 있었다.

"이건 자동화할 수 있다" 라는 확신이 들었고, 그래서 이 프로젝트를 시작했다.

기존 도구들의 한계

미국 시장에는 resume optimizer 같은 도구가 많다.
하지만 한국 취업 시장에 맞는 도구는 거의 없었다.

  • 한국식 자기소개서 (지원동기/성장과정/입사후포부) 지원 ❌
  • 사람인/잡코리아/원티드 등 한국 채용 사이트 양식 지원 ❌
  • "경력기술서" 개념 자체가 미국 이력서와 다름
  • 한국어 기술 동의어 처리 ("자바" = "Java", "스프링부트" = "Spring Boot") ❌

한국 시장에 특화된 도구가 필요했다.


2. 어떻게 구상했는가

핵심 아이디어: "마스터 프로필 → 공고별/사이트별 변환"

전체 구상의 핵심은 단순하다:

이력서/경력기술서를 한 번만 입력
→ 마스터 프로필로 구조화
→ 공고에 맞게 강조 포인트 조정
→ 각 사이트 양식에 맞는 복붙 텍스트 생성

이 흐름을 MCP(Model Context Protocol) 서버로 구현하기로 했다.
MCP를 선택한 이유:

  1. Claude Desktop / Claude Code에서 바로 사용 가능 — 별도 UI 개발 불필요
  2. Tool 기반 아키텍처 — 기능을 모듈 단위로 쪼개기 좋음
  3. 로컬 실행 — 이력서 같은 개인정보를 외부 서버에 올리지 않아도 됨
  4. LLM 연동이 자연스러움 — 서류 작성 보조에 LLM을 바로 활용

아키텍처 결정

결정 선택 이유
실행 방식 로컬 실행 개인정보 보호 (이력서, 연락처 등)
LLM 각자 API키 또는 Ollama 비용 분산, 오프라인 가능
DB SQLite (better-sqlite3) 로컬 파일, 설치 불필요, 충분한 성능
공고 검색 어댑터 패턴 사이트별 API가 다르므로 추상화 필수
양식 변환 템플릿 패턴 LLM 없이도 기본 동작, LLM으로 보강 가능

"LLM 없이도 돌아가야 한다"

이 프로젝트에서 가장 중요하게 잡은 원칙이다.

  • 매칭: 규칙 기반 (기술 사전 + 가중치 계산) → LLM 불필요
  • 양식 변환: 템플릿 기반 변환 → LLM 불필요
  • 프로필 파싱: 정규식 + 섹션 분리 → LLM 불필요
  • 서류 생성: 여기만 LLM 사용 (문장 다듬기, 자소서 초안)

Ollama를 쓰면 API 키 없이도 전체 기능을 사용할 수 있다.


3. 지금까지 구현된 것

Phase 0: 프로젝트 셋업 + 16개 Tool 스켈레톤

  • MCP 서버 진입점 + StdioTransport 연결
  • 16개 Tool 전체 등록 (채용공고/프로필/매칭/서류/지원관리/면접)
  • SQLite DB + Repository 패턴
  • LLM 클라이언트 추상화 (Anthropic / OpenAI / Ollama)
  • 기술 사전 (80+ 항목, 한국어 동의어 포함)
  • Zod 기반 입력 검증

Phase 1-2: 프로필 파서 고도화 + 원티드 어댑터

  • 이력서 파서 (규칙 기반)
    • 한국 이력서 섹션 자동 분리 (인적사항/학력/경력/기술/프로젝트/자격증)
    • 기술스택 자동 추출 (tech-dictionary 연동)
    • 프로젝트별 성과/역할/기간 파싱
    • 경력 연차 자동 계산
  • 원티드 어댑터 (실시간 API)
    • 원티드 v4 API 연동
    • 검색 + 상세 조회
    • 공고 자동 정규화 + DB 캐싱
  • 공고 정규화 엔진
    • 주요업무/자격요건/우대사항/기술스택 자동 분류
    • 경력 범위 파싱 (3~5년, 5년 이상 등)
    • 직무 카테고리 자동 분류

Phase 3-4: 플랫폼 양식 템플릿 + resume_export 개선

  • 6개 플랫폼 양식 템플릿
    • 원티드: 한 줄 소개 + 성과 bullet + 기술 태그
    • 사람인: 표 기반 이력서 + 인적사항 + 문항별 자소서 구조
    • 잡코리아: 이력서 + 경력기술서 분리
    • 점핏: 기술 중심 프로필 + 프로젝트 카드
    • 로켓펀치: 링크드인 스타일 요약 + 경험 타임라인
    • 범용: 이메일 지원 / 일반 이력서용
  • resume_export 개선
    • LLM 없이 템플릿 기반 변환 (기본)
    • enhance_with_llm: true 옵션으로 LLM 문장 보강 (선택)
    • 공고 지정 시 맞춤 강조 포인트 조정

Phase 5: 채용 사이트 어댑터 추가

  • 사람인 어댑터 (Open API 기반)
    • 공식 API 연동 (SARAMIN_API_KEY 필요)
    • 직무 코드 / 지역 코드 매핑
    • 검색 + 상세 조회
  • 잡코리아 어댑터 (웹 파싱)
    • HTML 검색 결과 파싱
    • 상세 페이지 파싱 (주요업무/자격요건/우대사항)
  • 점핏 어댑터 (내부 API)
    • 기술 태그 기반 검색
    • API 실패 시 웹 검색 폴백
    • 상세 조회

테스트 현황

  • 63개 테스트 전체 통과
  • 테스트 분류:
    • 기술 사전 테스트 (동의어, 추출, 매칭)
    • 이력서 파서 테스트 (섹션 분리, 필드 추출)
    • 공고 정규화 테스트
    • 플랫폼 템플릿 테스트 (6개 플랫폼)
    • 매칭 스코어링 테스트
    • E2E 통합 테스트 (프로필→공고→매칭→양식변환→지원관리)

4. 현재 구현 상태 종합

어댑터 (공고 검색)

사이트 상태 방식 API 키
원티드 REST API (v4) 불필요
사람인 Open API 필요
잡코리아 웹 HTML 파싱 불필요
점핏 내부 API + 웹 폴백 불필요
로켓펀치 🔜 미구현 -

양식 변환 (이력서 복붙)

사이트 상태 특징
원티드 한 줄 소개 + 성과 bullet
사람인 표 기반 + 자소서 문항 구조
잡코리아 이력서 + 경력기술서 분리
점핏 기술 태그 중심 프로필
로켓펀치 링크드인 스타일
범용 이메일 지원용

Tool 구현 상태

Tool 구현 LLM 필요
jobs_search ✅ 완전 동작
jobs_get_detail ✅ 완전 동작
jobs_add ✅ 완전 동작
profile_parse_resume ✅ 규칙 기반 + LLM 보강 선택적
profile_get ✅ 완전 동작
match_score_job ✅ 규칙 기반
match_rank_jobs ✅ 규칙 기반
resume_tailor ✅ LLM 기반
resume_export ✅ 템플릿 + LLM 선택적 선택적
coverletter_brainstorm ✅ LLM 기반
coverletter_generate ✅ LLM 기반
portfolio_reorder ✅ LLM 기반
application_create ✅ 완전 동작
application_update_status ✅ 완전 동작
application_list ✅ 완전 동작
interview_prepare ✅ LLM 기반

16개 Tool 전부 구현 완료. LLM 없이도 10개 Tool이 완전 동작.


5. 핵심 기술적 결정과 이유

기술 사전 (tech-dictionary)

한국 채용공고에는 같은 기술이 여러 표기로 등장한다.

  • "자바", "Java", "JAVA" → 모두 같은 기술
  • "스프링부트", "Spring Boot", "SpringBoot" → 모두 같은 기술
  • "k8s", "쿠버네티스", "Kubernetes" → 모두 같은 기술

80개 이상의 기술과 한국어 동의어를 사전으로 관리하여,
매칭 정확도를 비약적으로 올렸다.

어댑터 패턴

각 채용 사이트의 API/HTML 구조가 완전히 다르다.

  • 원티드: 깔끔한 REST API
  • 사람인: 공식 Open API (키 필요)
  • 잡코리아: 공식 API 없음 → HTML 파싱
  • 점핏: 비공식 내부 API + 웹 폴백

SourceAdapter 인터페이스로 추상화하고,
search() / fetchDetail() / isAvailable()만 구현하면 새 사이트를 추가할 수 있게 설계했다.

템플릿 패턴 (양식 변환)

LLM에 양식 변환을 전부 맡기면:

  1. 응답 속도가 느림 (3~10초)
  2. 포맷이 매번 조금씩 다름
  3. API 비용 발생

그래서 규칙 기반 템플릿으로 1차 변환하고,
LLM은 선택적으로 문장을 다듬는 역할만 하도록 분리했다.


6. 남은 과제

단기 (다음 Phase)

  • 로켓펀치 어댑터 구현
  • 실 서비스 환경에서 크롤링 안정성 테스트
  • LLM 프롬프트 품질 개선 (한국어 경력기술서 문체)

중기

  • CLI 인터페이스 (MCP 없이도 직접 사용)
  • 이력서 PDF 파싱 (현재는 텍스트만)
  • 공고 변경 감지 (마감일 임박 알림)

장기

  • 비개발자 직무 확장 (디자이너, PM, 마케팅)
  • 면접 후기 크롤링 + 분석
  • 연봉 데이터 연동

7. 배운 것

  1. "불편함"이 가장 강한 동기다 — 같은 서류를 6번 쓰는 짜증이 없었으면 이 프로젝트는 없었다.
  2. 한국 시장 도구는 직접 만들어야 한다 — 미국 도구를 번역해서 쓸 수 없는 영역이 있다.
  3. LLM은 만능이 아니다 — 규칙 기반으로 해결 가능한 건 규칙 기반이 빠르고 정확하다.
  4. 어댑터 패턴의 위력 — 사이트마다 API가 달라도, 추상화 한 번이면 나머지 코드는 건드릴 필요 없다.
  5. MCP가 개인 도구 개발에 적합하다 — UI 없이 Claude에서 바로 도구를 쓸 수 있는 건 강력하다.

+ Recent posts