Skip to content

feat(cover-letter): 자소서(공채) 문항별 입력 + 분석 연동#129

Merged
i3months merged 1 commit into
devfrom
feature/cover-letter-input
Jun 28, 2026
Merged

feat(cover-letter): 자소서(공채) 문항별 입력 + 분석 연동#129
i3months merged 1 commit into
devfrom
feature/cover-letter-input

Conversation

@i3months

Copy link
Copy Markdown
Member

변경 사항

대기업 공채는 포트폴리오(이력서)보다 자소서 + 면접 자기소개 중심이라, 자소서를 새 자료 유형으로 추가. 결정: 문항별(질문+답변 여러 개) 텍스트 입력. 분석→임베딩→세션컨텍스트→질문생성 파이프라인은 source 무관이라 그대로 재사용.

DB (V20)

  • cover_letters 신규 (items JSONB = [{question, answer}], status).
  • analyzed_documents.cover_letter_id FK + 단일소스 CHECK 를 (resume/repository/cover_letter) 3-택1로 확장.

Backend (이력서 흐름 미러링)

  • coverletter 도메인(엔티티/서비스/컨트롤러): POST/GET/DELETE /api/cover-letters.
  • 생성 → CoverLetterUploadedEventrequestCoverLetterAnalysis: 문항을 마크다운으로 합쳐 inline으로 analyze.cover_letter 발행(이력서와 달리 S3 미사용).
  • AnalyzedDocument.forCoverLetter, AnalysisCallbackService COVER_LETTER 처리, resolveSourceType(질문생성 + 문서조회 DTO) 분기.
  • RabbitMQ ai.analyze.cover_letter 큐 + DLQ (definitions.json / RabbitMqConfig).

AI

  • TargetType/SourceType COVER_LETTER, TextSourceExtractor(inline 본문), cover_letter_consumer(ResumeAnalyzer 재사용), 자소서 전용 분석 프롬프트(지원동기·인성·경험·직무적합 중심).

Frontend

  • features/cover-letter: 문항(질문+답변) 반복 입력 폼 + 목록(상태 배지·분석 진행·삭제).
  • 워크스페이스 '자소서' 섹션 + 사이드바 네비 + /workspace/cover-letters 라우트.
  • 세션 생성 자료 선택기는 sourceType-무관이라 분석 완료된 자소서가 자동으로 면접 컨텍스트 후보에 포함. DocumentList에 COVER_LETTER 라벨.

검증

  • 백엔드 ./gradlew test BUILD SUCCESSFUL(전체), AI uv run pytest 297 passed + flake8 clean, 프론트 npm run build 통과 / lint 신규 파일 clean.
  • OpenAPI + 프론트 타입 재생성. 검증 중 read DTO(AnalyzedDocumentResult)의 누락 분기(자소서 → sourceType null)도 보강.

구현 메모

  • 자소서 items 는 JSONB(별도 테이블 없음, tech_stack 매핑과 동일 패턴).
  • ResumeAnalyzer 를 재사용(파라미터명이 resume-centric으로 읽히지만 기능 동일).

🤖 Generated with Claude Code

대기업 공채는 포트폴리오보다 자소서 + 면접 자기소개 중심이라, 자소서를 새 자료
유형으로 추가. 문항별(질문+답변) 텍스트 입력. 분석→임베딩→세션컨텍스트→질문생성
파이프라인은 source 무관이라 그대로 재사용.

DB (V20):
- cover_letters(items JSONB: [{question,answer}], status) 추가
- analyzed_documents.cover_letter_id FK + 단일소스 CHECK 를 3-택1로 확장

Backend (이력서 흐름 미러링):
- coverletter 도메인(엔티티/서비스/컨트롤러) — POST/GET/DELETE /api/cover-letters
- 생성→CoverLetterUploadedEvent→requestCoverLetterAnalysis: 문항을 마크다운으로 합쳐
  inline 으로 analyze.cover_letter 발행(S3 미사용)
- AnalyzedDocument.forCoverLetter + AnalysisCallbackService COVER_LETTER 처리
- resolveSourceType(질문생성·문서조회 DTO) COVER_LETTER 분기
- RabbitMQ ai.analyze.cover_letter 큐 + DLQ (definitions.json/RabbitMqConfig)

AI:
- TargetType/SourceType COVER_LETTER, TextSourceExtractor(inline 본문),
  cover_letter_consumer(ResumeAnalyzer 재사용), 자소서 전용 분석 프롬프트

Frontend:
- features/cover-letter(문항 반복 입력 폼 + 목록) + 워크스페이스 '자소서' 섹션/네비/라우트
- 세션 자료 선택기는 source 무관이라 자동 포함, DocumentList COVER_LETTER 라벨

검증: 백엔드 ./gradlew test 통과, AI 297 passed + flake8 clean, 프론트 npm run build 통과.
OpenAPI/프론트 타입 재생성. 회의적 검증으로 read DTO(AnalyzedDocumentResult) 누락 분기도 보강.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
stackup Ready Ready Preview, Comment Jun 28, 2026 2:27pm

@i3months i3months merged commit fe62643 into dev Jun 28, 2026
3 checks passed
i3months added a commit that referenced this pull request Jun 29, 2026
…ing-reland

fix(cover-letter): 자소서 입력 하드닝 재머지 (#129 누락분)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant