MuleRun|KR-04자기소개서 합격분석 워크벤치자동화 운영 중마지막 실행 2026-04-29 06:00 KST
847
분석 완료 자소서
▲ 23 (오늘)
78.4%
평균 STAR 구조 적합도
▲ 2.1%p 전주 대비
3.2
평균 개선 포인트 수
▼ 0.4 (개선 추세)
92%
역량 키워드 매칭률
▲ 5%p 전월 대비
최근 분석 자기소개서 — 샘플 데이터
ID
지원자
기업/직무
문항 유형
STAR 점수
키워드 매칭
문장 밀도
개선점
종합 등급
A-0847
김○○
삼성전자 / SW개발
지원동기
86%
95%
18.3 어절/문장
2건
A
A-0846
이○○
LG에너지솔루션 / 경영기획
성장과정
72%
78%
22.1 어절/문장
5건
B+
A-0845
박○○
현대자동차 / 마케팅
직무역량
91%
97%
16.7 어절/문장
1건
A+
A-0844
정○○
SK하이닉스 / 공정엔지니어
입사 후 포부
64%
71%
25.8 어절/문장
6건
B
A-0843
최○○
카카오 / 데이터분석
문제해결경험
83%
89%
19.4 어절/문장
3건
A-
A-0842
한○○
네이버 / 프론트엔드
협업경험
58%
62%
28.2 어절/문장
7건
C+
01STAR 구조 상세 분석 — A-0847 김○○ 삼성전자 SW개발 지원동기
STAR 요소별 점수
진단: Action 서술 우수(구체적 기술 스택 명시). Result 부분 정량적 성과 지표 보완 필요 — "성능 30% 개선" 등 수치 추가 권장.
문항 유형별 STAR 적합도 분포
02역량 키워드 매칭 분석
A-0847 추출 키워드 vs 직무 요구 키워드
직무 요구 키워드
자소서 내 출현
빈도
상태
문제해결능력
✓ "문제를 정의하고 해결"
3회
충분
협업/커뮤니케이션
✓ "팀원과 논의하여"
2회
적정
기술 전문성
✓ "Java, Spring Boot"
4회
충분
데이터 기반 의사결정
✓ "로그 분석을 통해"
1회
보완
리더십
✗ 미출현
0회
부재
고객 지향
✗ 미출현
0회
부재
자기주도성
✓ "스스로 학습하여"
2회
적정
글로벌 역량
✓ "해외 오픈소스"
1회
보완
매칭률: 6/8 (75%) → 키워드 보완 시 95% 도달 가능직무 적합도 B+
문장 밀도 & 가독성 분석
지표
측정값
권장 범위
판정
평균 문장 길이
18.3 어절
15~20 어절
적정
최장 문장
34 어절
≤25 어절
과다
문단 수
4개
3~5개
적정
접속사 비율
8.2%
5~10%
적정
피동 표현 비율
12.5%
≤8%
주의
총 글자 수
987자
900~1,000자
적정
문장 간 응집도
0.74
≥0.70
양호
주의: 3번째 문단 2번 문장(34어절)이 가독성 저해. 두 문장으로 분리 권장. 피동 표현 "~되어진", "~시켜진" 등 3곳 능동 전환 필요.
03개선 포인트 상세 — A-0847
#
위치
유형
현재 문장 (발췌)
개선 방향
우선순위
1
문단3, 문장2
구조
"...다양한 프로젝트를 진행하면서 많은 것을 배울 수 있었고 이를 통해 성장할 수 있었습니다"
추상적 서술 → 구체적 프로젝트명, 학습 내용, 성장 지표 명시
긴급
2
문단4, 문장1
정량화
"...성능이 크게 향상되었습니다"
"응답 시간 2.3초→0.8초 (65% 개선)" 등 수치 기반 서술로 전환
높음
04한국 취업 시장 — 자소서 분석 자동화의 필요성
시장 문제
대한민국 대졸 취업 시장 현황:
상위 30대 기업 평균 경쟁률 48:1, 자소서 서류 탈락률 72%
취업준비생 1인당 평균 14.3개 기업에 지원, 자소서 문항 평균 4.2개/기업
합격 자소서와 불합격 자소서의 구조적 차이를 객관적으로 분석할 수단 부재
사설 첨삭 비용 건당 3~8만원, 피드백 반영까지 3~5일 소요
기업별 인재상·직무역량이 수시 변경 → 수동 키워드 매칭의 한계
핵심 페인: "합격 자소서의 구조를 분석해 내 자소서를 더 설득력 있게 만들고 싶은데, 객관적 분석 도구가 없다."
MuleRun 솔루션 개요
자기소개서 합격 분석 워크벤치는 MuleRun Computer 상시 가동 인스턴스에서 다음을 자동 수행합니다:
합격 자소서 수집: 공개 합격 후기 사이트(잡코리아, 사람인, 링커리어 등)에서 합격 사례 크롤링
구조 분석: STAR 프레임워크 기반 문단 분류, 역량 키워드 자동 추출
비교 리포트: 사용자 자소서 vs 합격 평균 구조 비교, 개선 포인트 도출
일일 아카이브: MuleRun Drive에 날짜별 분석 결과 자동 저장
알림: 기업 인재상 변경 감지 시 자동 키워드 업데이트
분석 1건당 소요시간: 약 12초. 사설 첨삭 대비 비용 97% 절감.
05MuleRun Computer 일일 자동화 워크플로
STEP 1
스케줄 트리거
매일 06:00 KST cron 실행
→
STEP 2
합격 사례 수집
공개 합격후기 신규 데이터 크롤링
→
STEP 3
전처리 & 분류
문항유형 분류 중복 제거
→
STEP 4
STAR 분석
구조 점수 산출 키워드 추출
→
STEP 5
리포트 생성
개선점 도출 비교 분석표 작성
→
STEP 6
Drive 아카이브
/4guo/kr/kr-04/ YYYY-MM-DD/
2026-04-29 실행 타임라인
06:00
cron 트리거 실행 — MuleRun Computer 인스턴스 kr-04-prod 기동 확인
06:01
합격 사례 수집 시작 — 잡코리아/사람인/링커리어 신규 합격후기 탐색. 전일 대비 신규 23건 감지
06:04
크롤링 완료 — 23건 수집 (잡코리아 12건, 사람인 8건, 링커리어 3건). rate-limit 1회 발생 → 30초 대기 후 재시도 성공
06:05
전처리 완료 — 중복 2건 제거, 유효 21건. 문항유형 자동 분류 완료
06:08
STAR 분석 완료 — 21건 구조 점수 산출 (평균 76.2%), 역량 키워드 148개 추출
06:09
비교 리포트 생성 — 기존 847건 데이터와 병합, 통계 업데이트
06:10
Drive 아카이브 완료 — /4guo/kr/kr-04/2026-04-29/ 저장 (report.json, summary.csv, raw/)
06수집·분석 파이프라인 예시 코드
예시: 합격후기 수집 (스크래핑)
# 예시 — 실제 운영 코드의 간소화 버전import httpx, time
from bs4 import BeautifulSoup
SOURCES = [
{"name": "잡코리아", "url": "https://example.com/reviews"},
{"name": "사람인", "url": "https://example.com/pass"},
]
MAX_RETRIES = 3
RATE_LIMIT_WAIT = 30 # 초defcollect_reviews(source):
for attempt in range(MAX_RETRIES):
try:
resp = httpx.get(source["url"], timeout=15)
if resp.status_code == 429:
time.sleep(RATE_LIMIT_WAIT)
continue
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
return parse_reviews(soup)
except httpx.TimeoutException:
time.sleep(5 * (attempt + 1))
raise RuntimeError(f"수집 실패: {source['name']}")
예시: STAR 구조 분석
# 예시 — STAR 구조 점수 산출 로직import re
from collections import defaultdict
STAR_PATTERNS = {
"situation": [r"당시|상황|배경|~때"],
"task": [r"목표|과제|해야|필요"],
"action": [r"수행|실행|개발|구현|진행"],
"result": [r"결과|성과|달성|개선|향상"],
}
defanalyze_star(text: str) -> dict:
paragraphs = text.split("\n\n")
scores = {}
for element, patterns inSTAR_PATTERNS.items():
hits = sum(
1 for p in paragraphs
for pat in patterns
if re.search(pat, p)
)
scores[element] = min(hits / len(paragraphs), 1.0)
return {
"scores": scores,
"overall": sum(scores.values()) / 4,
"missing": [k for k, v in scores.items() if v < 0.3]
}
예시: 역량 키워드 추출 & 매칭
# 예시 — 기업별 직무 요구 키워드 DB와 자소서 내 키워드 매칭JOB_KEYWORDS_DB = {
"삼성전자_SW개발": ["문제해결", "협업", "기술전문성", "데이터기반", "리더십", "고객지향", "자기주도", "글로벌"],
"LG에너지솔루션_경영기획": ["전략사고", "분석력", "커뮤니케이션", "재무이해", "혁신"],
}
defmatch_keywords(text: str, company_job: str) -> dict:
required = JOB_KEYWORDS_DB.get(company_job, [])
found = [kw for kw in required if kw in text]
missing = [kw for kw in required if kw not in text]
return {"match_rate": len(found)/len(required), "found": found, "missing": missing}
# stale-data 체크: 키워드 DB 갱신일이 30일 초과 시 경고defcheck_freshness(db_updated: str) -> bool:
from datetime import datetime, timedelta
age = datetime.now() - datetime.fromisoformat(db_updated)
if age > timedelta(days=30):
log.warning("키워드 DB 갱신 필요: %d일 경과", age.days)
return False
return True
07MuleRun Drive 아카이브 구조
📁 /4guo/kr/kr-04/
├── 2026-04-29/
│ ├── report.json # 당일 분석 결과 전체 (21건)
│ ├── summary.csv # 요약 통계 (STAR 평균, 키워드 매칭률 등)
│ ├── improvements.json # 개선 포인트 집계
│ ├── keyword_db.json # 기업별 직무 키워드 DB 스냅샷
│ └── raw/
│ ├── jobkorea_12.jsonl # 잡코리아 원본 12건
│ ├── saramin_08.jsonl # 사람인 원본 8건
│ └── linkareer_03.jsonl# 링커리어 원본 3건
├── 2026-04-28/
│ ├── report.json
│ ├── summary.csv
│ └── raw/ ...
├── ...
└── latest -> 2026-04-29/# symlink 최신 데이터
보관 정책: 일별 스냅샷 90일 보관 → 이후 월별 요약으로 압축 아카이브. latest 심볼릭 링크로 항상 최신 데이터 접근 가능.
08오류 처리 · 보안 · 데이터 신뢰성
재시도 & Rate-Limit 처리
오류 유형
대응
HTTP 429
지수 백오프 30초→60초→120초, 최대 3회 재시도
HTTP 5xx
5초 대기 후 재시도, 3회 실패 시 다음 소스로 전환
Timeout (15초)
재시도 2회, 실패 시 해당 소스 건너뜀 + 경고 로그
파싱 실패
DOM 구조 변경 감지 → 관리자 알림 발송
빈 응답
이전 캐시 활용 + stale 플래그 설정
Stale-Data 관리
데이터
유효기간
만료 시 조치
합격 사례 원본
수집일 +1일
다음 실행 시 재수집
직무 키워드 DB
30일
기업 채용 페이지 재스캔
STAR 분석 모델
90일
새 합격 데이터로 가중치 재학습
기업 인재상
채용 시즌 단위
상/하반기 자동 갱신
보안 메모
개인정보 처리: 수집 자소서 내 실명·연락처 자동 마스킹 (정규식 + NER). 원본에 개인정보 포함 불가.
접근 제어: MuleRun Drive 디렉토리 /4guo/kr/kr-04/ 접근 토큰 기반 인증, 읽기 전용 외부 공유 불가.
전송 암호화: 모든 API 호출 TLS 1.3 적용, 로컬 저장 시 AES-256 암호화.