feat(session): 직무 맞춤 면접 모드 — 회사·JD 기반 질문 + 직무 적합도 피드백#119
Merged
Conversation
새 면접 모드 JOB_TAILORED 추가. 지원 회사명 + 채용공고(JD)를 받아, 적합도· 지원동기·갭(이력서↔JD 교집합) 질문을 생성하고, 피드백에 '직무 적합도' 평가를 더한다. 기존 모드(기술/인성/통합)와 직교 — JD 입력·프롬프트·피드백이 모두 mode==JOB_TAILORED 하나로 분기된다. - Core: SessionMode.JOB_TAILORED + V18(mode CHECK 갱신 + target_company_name/ target_job_description 컬럼). 그 모드만 JD 필수(SESSION_JD_REQUIRED) + assignTargetRole 보관. JD 를 generate.questions(SelfIntroAnsweredEvent 경유)· generate.feedback 페이로드에 함께 실음. SessionResult/Response 라운드트립. - AI(질문): GenerateQuestionsRequest + chain 에 company/JD 추가, 프롬프트가 target_role 블록으로 받아 적합도·지원동기 질문 우선(다른 모드는 무시). - AI(피드백): job_fit_evaluation 프롬프트 + LlmJobFitEvaluator(Pro). 직무 맞춤 모드 + JD 있을 때 JD 대비 적합도·갭 평가를 panel_breakdown 의 evaluator=직무 적합도 항목으로 append(첫인상과 같은 병렬·미집계). InterviewMode Literal 에 JOB_TAILORED. - Frontend: 모드 선택지 + 직무 맞춤 시 회사명/JD 입력(JD 필수), 피드백 리포트에 '직무 적합도' 섹션. OpenAPI 재생성. - 테스트(Core/AI) + docs(database/messaging/glossary/CLAUDE) 갱신. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
검토 중 발견한 직무 맞춤 모드의 프론트 노출 공백 보강:
- 히스토리 카드(SessionCard) 모드 라벨에 JOB_TAILORED='직무 맞춤' 추가
(기존엔 'JOB_TAILORED' 원문이 그대로 노출됐음).
- 제목 미입력 시 직무 맞춤 면접은 회사명을 제목 앞에 붙임
("토스 백엔드 직무 맞춤 면접") — 입력한 회사명이 히스토리·라이브 헤더에
드러나게(기존엔 회사명이 UI 어디에도 안 보였음).
- 프론트 테스트: 직무 맞춤 선택 시 JD 입력 노출·필수 검증·요청 페이로드 커버.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
면접의 본질이 직무 적합성이라, 직무 맞춤 모드 피드백을 두 축으로 분리했다:
- 직무 적합도(fit): JD 요구 기술·경험·책임을 실제로 갖췄는가(역량 매칭)
- 직무 이해도(understanding): 직무가 무엇을 하는 자리인지 이해하고 지원동기로
연결했는가(역량 보유와 독립)
한 번의 구조화 LLM 호출(JobFitResult{fit, understanding})로 두 축을 함께
평가해 추가 비용 없이, panelBreakdown 에 evaluator='직무 적합도'·'직무 이해도'
두 항목으로 분리해 표시한다(종합 점수 미집계 유지). 프론트 리포트에 '직무 이해도'
전용 섹션 추가. 프롬프트가 두 축을 독립적으로 채점하도록 명시.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
변경 사항
새 면접 모드
JOB_TAILORED(직무 맞춤 면접) 을 추가합니다. 지원 회사명 + 채용공고(JD)를 받아 회사·직무에 대한 이해를 바탕으로 면접을 진행합니다.기존 모드(기술/인성/통합)와 직교합니다 — JD 입력·프롬프트·피드백이 전부
mode == JOB_TAILORED하나로 깔끔하게 분기됩니다.상세
Core
SessionMode.JOB_TAILORED+ V18 마이그레이션(mode CHECK 갱신 +target_company_name/target_job_description컬럼)SessionService검증 →SESSION_JD_REQUIRED),InterviewSession.assignTargetRole로 보관(create시그니처 불변)SelfIntroAnsweredEvent→generate.questions와generate.feedback페이로드에 동봉.SessionResult/SessionResponse라운드트립AI
GenerateQuestionsRequest+ chain 에 company/JD 추가, 프롬프트가target_role블록으로 받아 적합도·지원동기 질문 우선(다른 모드는 '(일반 면접)' 안내라 무시)chain/prompts/job_fit_evaluation.py+LlmJobFitEvaluator(Pro). 직무 맞춤 + JD 있을 때panel_breakdown에evaluator="직무 적합도"항목 append — 종합 점수엔 미포함(feat(feedback): 자기소개 첫인상 평가 추가 (종합 점수 미포함) #118 첫인상과 동일 병렬·미집계 메커니즘).InterviewModeLiteral 에JOB_TAILORED추가Frontend
테스트
SessionServiceTestJD 필수·저장 케이스 추가, 전체 백엔드 스위트 통과(Flyway V18 검증 포함)tsc+ 인터뷰/피드백 테스트 통과문서
docs/database.md(V18 컬럼·mode CHECK),docs/messaging.md(payload),docs/glossary.md,backend·aiCLAUDE.md🤖 Generated with Claude Code