ATS 이력서 생성/최적화 Skill
작업 목표
- 본 Skill은 사용자가 ATS 친화적인 전문 이력서를 생성, 최적화 및 관리할 수 있도록 지원합니다.
- 기능: 이력서 생성, 이력서 최적화, 지원 가능성 검사, 버전 관리, 파일 내보내기
- 트리거 조건: 사용자가 새 이력서를 만들거나, 기존 이력서를 최적화하거나, 이력서를 비교/내보내려 할 때
사전 준비
- 의존성 설명: 본 Skill은 순수 로컬 Python 라이브러리를 사용하여 파일을 파싱하고 내보냅니다 (외부 서비스/네트워크 의존성 없음).
pdfplumber>=0.10.0 # PDF 이력서 파싱 python-docx>=1.1.0 # DOCX 생성 reportlab>=4.0.0 # PDF 생성 (내장 CJK 폰트 포함, 순수 pip; 미설치 시 HTML로 자동 폴백) - 디렉토리 준비: 현재 작업 디렉토리에 버전 관리 디렉토리를 생성합니다.
mkdir -p .resume-versions
핵심 원칙
하드 규칙
- 사용자 경험/데이터 절대 날조 금지: 누락된 내용은
【자리표시자】를 사용하고 "최소 보충 목록"을 출력합니다. - ATS 친화적: 기본 단일 컬럼, 테이블/텍스트 상자/아이콘 없음; 표준 문단 제목 사용.
- 지원 가능성: 진단 보고서는 HR 1차 스크리너 관점에서 제목 매칭, 경력/위치/연락처/근무 허가/입사 가능 시간을 확인하며, 사진/나이/혼인 여부/정치적 성향/희망 연봉 등 목표 시장 금기 정보가 있는지 반드시 점검합니다.
- 완전 출력: ResumeIR JSON, 진단 보고서, 지원 가능성 결론, 개선된 이력서 본문을 반드시 함께 출력합니다. 내보내기 파일은 필요 시 로컬 스크립트로 생성합니다("파일 내보내기" 참조).
- 사용자 입력 최소화: "텍스트 붙여넣기/파일 업로드"를 우선 지원하며, 핵심 필드 누락 시에만 질문합니다.
출력 구조
모든 작업은 다음 세 부분을 출력해야 합니다 (내보내기 파일은 필요 시 생성).
- ResumeIR JSON: 고정 필드명, ResumeIR.v1 스키마 준수.
- 진단 보고서: 문제 목록 + 심각도 + 제안, 진단 보고서 규격 준수.
- 지원 가능성 결론:
application_acceptability, "지금 지원 가능한지 / HR 1차 스크리너에서 어디가 걸리는지 / 무엇을 먼저 보충해야 하는지" 답변. - 개선된 이력서 본문: 일반 텍스트 미리보기.
- (선택 사항) 내보내기 파일: 사용자가 DOCX/PDF를 요청하면
scripts/render_resume.py를 호출하여 로컬에서 생성.
작업 단계
모드 선택
사용자 요구에 따라 모드를 선택합니다.
- 모드 1: 이력서 생성 (처음부터): 사용자가 처음부터 이력서를 작성하도록 돕습니다.
- 모드 2: 이력서 최적화 (기존 이력서): 사용자의 기존 이력서를 기반으로 최적화합니다.
모든 모드는 선택적 입력을 지원합니다.
- JD (사용자가 원문을 붙여넣음)
- 목표 직무: target_title / target_level (중국: P6/P7, 전문가/수석/임원; 미국 기술직: Senior/Staff, L5/L6, SDE II 등)
- 언어: zh-CN / en-US
- 업계: 인터넷/AI/데이터/개발/운영/영업/기능 등
- 템플릿: template_id (기본값 cn_ats_a4_v1)
모드 1: 이력서 생성 (처음부터)
단계 1: 정보 수집
최소한의 질문으로 사용자로부터 다음 정보를 수집합니다.
- 기본 정보: 이름, 전화번호, 이메일, 도시
- 목표 직무: target_title, target_level, target_industry
- 최근 2-3개 직무 경험: 각 항목에 회사, 직위, 시작/종료일, 3가지 성과 요점 포함
- 학력: 학교, 학위, 전공, 졸업일
- 기술: 주요 기술 (primary) 및 보조 기술 (secondary)
단계 2: ResumeIR 생성
수집된 정보를 ResumeIR 형식으로 변환합니다 (전체 필드는 ResumeIR.v1 스키마 참조). 누락된 필드는 【자리표시자】로 채웁니다. 최소 뼈대 예시:
{
"meta": {"version": "1.0", "language": "zh-CN", "locale": "zh-CN"},
"basics": {"name": "张三", "phone": "【자리표시자】", "email": "【자리표시자】", "target_title": "제품 관리자"},
"summary": "",
"skills": {"primary": ["요구 사항 분석", "데이터 분석"], "secondary": []},
"work": [{"company": "某회사", "title": "제품 관리자", "start": "2021-06", "end": "present",
"bullets": ["주도하여 ... 20% 향상"]}],
"projects": [],
"education": [{"school": "【자리표시자】", "degree": "학사", "start": "", "end": ""}]
}
단계 3: 첫 번째 버전 이력서 출력
- ResumeIR JSON 출력
- 일반 텍스트 미리보기 출력 (표준 순서로 정렬)
- 진단 보고서 생성 (완전성 중점 점검)
- 지원 가능성 결론 생성:
ready / needs_fix / do_not_submit, HR 1차 스크리너에서 걸릴 3개 이하 문제 나열 - 최소 보충 목록 출력 (최대 8개 문제)
단계 4: 버전 저장
자동으로 첫 번째 버전으로 저장: version_name = "{target_title}-{date}-{lang}"
모드 2: 이력서 최적화 (기존 이력서)
단계 1: 이력서 파싱
- 사용자가 파일(PDF/DOCX/TXT)을 업로드한 경우:
scripts/parse_resume.py를 호출하여 텍스트 추출. - 사용자가 텍스트를 붙여넣은 경우: 텍스트 내용을 직접 사용.
단계 2: 확인 메시지 표시
사용자에게 다음 핵심 필드를 표시하여 구문 분석 정확도를 확인합니다.
- 이름
- 최근 회사
- 최근 직위
- 근무 연수 추정치
단계 3: JD 수집 (선택 사항)
사용자에게 목표 JD가 있는지 묻고, 있으면 붙여넣도록 요청합니다.
단계 4: ResumeIR 및 진단 보고서 생성
- 이력서 텍스트에서 정보를 추출하여 ResumeIR 생성 (누락 시
【자리표시자】사용). - 진단 보고서 출력 (점수 0-100, 문제 목록 + 심각도 + 제안).
- 지원 가능성 결론 출력: 제목 매칭, 첫 페이지 가독성, 연락처, 위치/입사일/근무 허가, 시장 금기 정보, 직무 증거가 HR 1차 스크리너를 충족하는지 여부.
- 개선된 ResumeIR 생성.
- 일반 텍스트 미리보기 출력 (사용자가 파일을 요청하면 render_resume.py를 호출하여 내보내기).
단계 5: 버전 저장
자동으로 첫 번째 버전으로 저장: version_name = "{target_title}-{date}-{lang}"
이력서 작성 규범
직무 경험 Bullet 작성법
각 Bullet은 다음 구조를 따라야 합니다.
동사 + 작업 + 방법/도구 + 결과 (지표)
예시:
- ❌ 오류: 데이터 분석 및 보고서 생성 담당
- ✅ 올바름: Python과 SQL을 사용하여 사용자 행동 데이터를 분석하고, A/B 테스트를 통해 제품 기능을 최적화하여 일간 활성 사용자 20% 증가
정량화 요구 사항
- 구체적인 숫자, 백분율, 금액 등 정량적 지표를 최대한 사용합니다.
- 정량화할 수 없는 경우
【metric】자리표시자를 사용하고, 보충 목록에 알림을 추가합니다.
JD 키워드 커버리지 (JD가 있는 경우)
- primary skills에서 키워드 커버리지를 진행합니다 (≤12개).
- Bullet에 자연스럽게 반영하고, 억지로 단어를 쌓지 않도록 합니다.
버전 관리
버전 저장
스크립트를 사용하여 현재 ResumeIR을 저장합니다.
python3 scripts/version_manager.py save --version-name "제품관리자-2024-01-15-ko-KR" --resume-ir "resume_ir.json"
버전 이름 지정
python3 scripts/version_manager.py rename --old-name "v1" --new-name "제품관리자-2024-01-15-ko-KR"
버전 비교
python3 scripts/version_manager.py compare --version1 "v1" --version2 "v2"
버전 롤백
python3 scripts/version_manager.py rollback --version-name "v1"
파일 내보내기
로컬 내보내기 (순수 Python, 외부 서비스/네트워크 없음)
사용자가 내보내기를 요청하면 현재 ResumeIR을 JSON으로 저장한 후 스크립트를 호출합니다.
python3 scripts/render_resume.py --resume-ir "resume_ir.json" --output-formats "docx,pdf" --output-dir ./out
내보내기는 단계적 폴백을 사용하여 어떤 환경에서도 사용 가능한 파일을 생성할 수 있습니다.
- DOCX: python-docx로 생성, 단일 컬럼, 표준 제목, 테이블/텍스트 상자 없음, ATS 친화적 (지원 형식으로 권장).
- PDF: reportlab + 내장 CJK 폰트로 직접 생성 (순수 pip, 시스템 폰트/라이브러리 불필요); reportlab이 설치되지 않은 경우 출력에 최적화된 HTML을 자동으로 생성하고 "브라우저에서 열고 Ctrl+P로 PDF 저장" 안내.
- 스크립트는 원격 서비스에 의존하지 않으며, 로컬에 클론하여 바로 실행 가능.
사용 가능한 스타일
cn_ats_a4_v1(중국어, 기본값) /en_ats_a4_v1(영어); 실제 언어는 ResumeIR의meta.language에 따라 결정됩니다.- 확인:
python3 scripts/render_resume.py --list-templates - 이중 언어 또는 영어 이력서를 생성할 때는 references/en-resume-conventions.md를 참조하십시오 (동사 라이브러리, 사진/나이/결혼 금지, 1페이지 우선, 영어 날짜 MMM YYYY, 정량화 우선).
- 미국 기술직 (SWE/PM/DS) 대상: assets/examples/의
en-US-software-engineer.json,en-US-product-manager.json,en-US-data-scientist.json세 가지 렌더링 가능한 예제 (LinkedIn/GitHub, 미국 직급, p99/QPS/SLA 등 미국 기술 측정치 포함)를 직접 참조할 수 있습니다.meta.language=en-US일 때 렌더링 레이어는 자동으로 영어 블록 제목을 적용하고 ISO 날짜YYYY-MM을MMM YYYY로 변환합니다.
리소스 인덱스
필수 스크립트
- scripts/parse_resume.py: 이력서 파싱 스크립트, PDF/DOCX/TXT/MD 지원.
- 인수: 위치 인수
<파일 경로>(--input-file <경로>와 호환). - 출력: JSON
{"text": "...", "format": "pdf|docx|txt", "pages": N, "success": true}; 실패 시{"error": "...", "exit_code": N}반환.
- 인수: 위치 인수
- scripts/version_manager.py: 버전 관리 스크립트.
- 인수:
save/rename/compare/rollback+ 해당 인수. - 출력: 버전 작업 결과.
- 인수:
- scripts/render_resume.py: 로컬 내보내기 스크립트 (DOCX/PDF/HTML, 외부 서비스 없음).
- 인수:
--resume-ir <JSON 파일>,--output-formats docx,pdf,html,--output-dir,--file-name. - 출력: DOCX / PDF (또는 HTML 폴백) 파일.
- 인수:
도메인 참조
- references/resumeir-schema.md: ResumeIR.v1 스키마 정의 (읽는 시점: ResumeIR 생성 또는 파싱 시).
- references/diagnostic-report-spec.md: 진단 보고서 출력 규격 (읽는 시점: 진단 보고서 생성 시).
- references/en-resume-conventions.md: 영어 이력서 규범 (읽는 시점: 이중 언어/영어 이력서 생성 시).
대화 흐름 예제
시나리오 1: 처음부터 이력서 생성
사용자: 이력서를 생성해 주세요.
에이전트: 네, 이력서 작성을 도와드리겠습니다. 다음을 알려주세요.
1. 목표 직무는 무엇인가요?
2. 현재 직무 상황은 어떤가요 (회사/직위/근무 연수)?
...
[정보 수집]
에이전트: 첫 번째 버전 이력서가 생성되었습니다. 다음은 분석 결과입니다.
[진단 보고서]
최소 보충 목록 (8개 문제):
1. 구체적인 연락처를 입력해 주세요 (전화/이메일).
2. 첫 번째 직무 경험에서 언급한 【metric】의 구체적인 수치는 무엇인가요?
...
시나리오 2: 기존 이력서 최적화
사용자: 이 이력서를 최적화해 주세요 [파일 업로드]
에이전트: [이력서 파싱] 이력서에서 다음 정보를 추출했습니다. 확인해 주세요.
이름: 张三
최근 회사: 某科技公司
최근 직위: 제품 관리자
근무 연수: 3-5년
목표 JD가 있나요? 있다면 붙여넣어 주세요.
[JD가 있는 경우]
에이전트: 최적화가 완료되었습니다. 진단 보고서는 다음과 같습니다.
총점: 72/100
문제 목록:
[P0] 직무 경험 부분에 정량적 지표 부족 (심각)
제안: 각 Bullet에 구체적인 숫자나 백분율을 포함하세요.
예시 수정: "제품 반복 담당" → "5개의 제품 반복 주도, 사용자 유지율 15% 향상"
...
격차 목록 (JD 요구 사항이나 이력서에 누락된 부분):
1. SQL 기술 (JD에서 명시적으로 요구)
최소 보충 질문: SQL 사용 경험이 있습니까? 어떤 시나리오에서 사용했습니까?
[개선된 이력서 출력]
시나리오 3: 파일 내보내기
사용자: 이 이력서를 내보내 주세요.
에이전트: DOCX 및 PDF 파일을 생성 중입니다... [render_resume.py 호출]
생성된 파일:
- 张三-제품관리자-2024-01-15.docx
- 张三-제품관리자-2024-01-15.pdf
시나리오 4: 버전 비교
사용자: v1과 v2를 비교해 주세요.
에이전트: [version_manager.py compare 호출]
주요 차이점:
1. 직무 경험 - 某科技公司 (2019-2022)
v1: 제품 디자인 및 요구 사항 분석 담당
v2: 8개의 제품 반복 주도, 데이터 기반 최적화를 통해 사용자 만족도 25% 향상
2. 기술 - primary
v1: ["제품 디자인", "요구 사항 분석", "프로젝트 관리"]
v2: ["제품 디자인", "요구 사항 분석", "프로젝트 관리", "데이터 분석", "SQL", "A/B 테스트"]
제안: v2 버전의 내용이 더 완전하므로 v2 버전으로 지원하는 것을 권장합니다.
시나리오 5: 버전 롤백
사용자: v1으로 롤백해 주세요.
에이전트: [version_manager.py rollback 호출]
v1 버전 (제품관리자-2024-01-10-ko-KR)으로 롤백되었습니다.
주의 사항
실패 시 폴백
- 이력서 파싱 실패: 일반 텍스트를 붙여넣도록 요청하거나, "학력/경력/프로젝트" 항목별로 나누어 붙여넣도록 안내합니다.
- 정보 누락:
【자리표시자】+ 최소 보충 목록 (≤8 질문) 사용. - JD 너무 긴 경우: 직무 설명과 자격 요건 두 부분만 추출하고 나머지는 무시합니다.
- 생성된 내용 너무 일반적인 경우: 각 Bullet에 "결과/영향"을 강제로 포함시키고, 그렇지 않으면 P1 문제로 표시하고 수정 예제를 제공합니다.
ATS 친화성 (제약 대상은 "생성/내보내기"된 이력서; 사용자 업로드 파일 파싱 시 테이블 내용은 정상적으로 읽을 수 있음)
- 표준 문단 제목 사용 (직무 경험, 학력, 기술 등).
- 테이블, 텍스트 상자, 아이콘, 이미지 사용 금지.
- 기본 단일 컬럼 레이아웃.
- 표준 폰트 사용 (예: Arial, Calibri).
- 특수 문자 및 장식 요소 사용 금지.
품질 보증
- 모든 Bullet은 동사로 시작해야 합니다 (예: "주도", "설계", "구현", "최적화" 등).
- 각 Bullet이 명확한 결과나 영향을 가지도록 합니다.
- "담당", "참여" 등 약한 단어 사용을 피합니다.
- 능동태를 우선 사용하고 수동태는 피합니다.
사용 예제
예제 1: 처음부터 이력서 생성 (중/영문)
- 기능 설명: 사용자가 처음부터 중/영문 이중 언어 이력서를 만들 수 있도록 지원합니다.
- 실행 방식: 에이전트 대화 + 스크립트로 버전 저장.
- 핵심 매개변수: language=zh-CN/en-US, target_title, target_level.
- 단계:
- 기본 정보 및 경력 수집.
- 중문 ResumeIR 생성.
- 영문 ResumeIR 생성 (자동 번역).
- 두 개의 버전 (중문 및 영문) 저장.
예제 2: JD 기반 이력서 최적화
- 기능 설명: 특정 JD에 맞게 이력서 내용을 최적화합니다.
- 실행 방식: 에이전트 분석 + 스크립트 파싱.
- 핵심 매개변수: JD 텍스트, 원본 이력서 파일.
- 단계:
- 원본 이력서 파싱.
- JD 요구 사항 분석.
- 비교하여 격차 확인.
- JD 키워드를 커버하도록 이력서 개선.
- 비교 및 최적화 제안 출력.
예제 3: 다중 버전 관리
- 기능 설명: 여러 이력서 버전을 생성하고, 비교하여 최적 버전을 선택합니다.
- 실행 방식: 스크립트로 버전 관리.
- 핵심 매개변수: version_name, resume_ir.
- 단계:
- v1 버전 저장.
- 수정 후 v2 버전 저장.
- v1과 v2 비교.
- 최적 버전으로 롤백.
- 최종 버전 내보내기.