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를 선택한 이유:
- Claude Desktop / Claude Code에서 바로 사용 가능 — 별도 UI 개발 불필요
- Tool 기반 아키텍처 — 기능을 모듈 단위로 쪼개기 좋음
- 로컬 실행 — 이력서 같은 개인정보를 외부 서버에 올리지 않아도 됨
- 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에 양식 변환을 전부 맡기면:
- 응답 속도가 느림 (3~10초)
- 포맷이 매번 조금씩 다름
- API 비용 발생
그래서 규칙 기반 템플릿으로 1차 변환하고,
LLM은 선택적으로 문장을 다듬는 역할만 하도록 분리했다.
6. 남은 과제
단기 (다음 Phase)
- 로켓펀치 어댑터 구현
- 실 서비스 환경에서 크롤링 안정성 테스트
- LLM 프롬프트 품질 개선 (한국어 경력기술서 문체)
중기
- CLI 인터페이스 (MCP 없이도 직접 사용)
- 이력서 PDF 파싱 (현재는 텍스트만)
- 공고 변경 감지 (마감일 임박 알림)
장기
- 비개발자 직무 확장 (디자이너, PM, 마케팅)
- 면접 후기 크롤링 + 분석
- 연봉 데이터 연동
7. 배운 것
- "불편함"이 가장 강한 동기다 — 같은 서류를 6번 쓰는 짜증이 없었으면 이 프로젝트는 없었다.
- 한국 시장 도구는 직접 만들어야 한다 — 미국 도구를 번역해서 쓸 수 없는 영역이 있다.
- LLM은 만능이 아니다 — 규칙 기반으로 해결 가능한 건 규칙 기반이 빠르고 정확하다.
- 어댑터 패턴의 위력 — 사이트마다 API가 달라도, 추상화 한 번이면 나머지 코드는 건드릴 필요 없다.
- MCP가 개인 도구 개발에 적합하다 — UI 없이 Claude에서 바로 도구를 쓸 수 있는 건 강력하다.
'회고' 카테고리의 다른 글
| 프로젝트 중간 회고 - 머리카락 제거 문제 (0) | 2026.04.05 |
|---|---|
| Final Project 중간 회고 (0) | 2026.03.23 |
| [플레이데이터 SK네트웍스 Family AI 캠프 22기] 20주차 회고 (0) | 2026.03.16 |
| [플레이데이터 SK네트웍스 Family AI 캠프 22기] 19주차 회고 (1) | 2026.03.08 |
| [플레이데이터 SK네트웍스 Family AI 캠프 22기] 18주차 회고 (0) | 2026.03.01 |
