첫번째 질문이 사용자에게 제공이되고, 다음 질문이 자소서 기반의 메인 질문이 될지, 사용자 말한 답변에 대한 꼬리질문이 될지를 판단하는 분기 로직 설계를 해야한다. 판단 기준을 고려하고, 가능한 범위에서 합당한 방법을 찾아야한다.
| 방식 | 아이디어 | 장점 | 단점 | 결론 |
|---|---|---|---|---|
| 랜덤 꼬리질문 | 무작위로 메인/꼬리 선택 | 구현 단순, 지연 無 | 합당성·일관성 부족, 사용자 경험 불안정 | ❌ 제외 |
| LLM 판단 | LLM이 답변 읽고 분기 | 맥락 이해 탁월, 품질 높음 | 추가 호출 지연, 비용 증가, 일관성 낮음 | ❌ 제외 |
| 키워드 판단 | 자소서 키워드 vs 답변 키워드 매칭 | 빠름, 비용 낮음, 일관된 기준 | 동의어/의미 유사 처리 필요 | ✅ 채택 |
키워드 판단 선택 이유:
LLM 모델은 실시간 서비스 특성상 지연이 크면 UX가 크게 떨어짐.
LLM은 정확하지만 느리다
랜덤방식은 근거가 없음.
따라서 빠르고 합리적인 키워드 기반 분기 로직을 채택했다.
| 항목 | 설명 |
|---|---|
| resume_text | 사용자 자소서 내용 (PDF에서 추출 or 사용자 입력) |
| user_answer | 사용자가 방금 한 답변 (텍스트 형태) |
| extract_resume_keywords() | KeyBERT를 활용하여 자소서에서 핵심 키워드 추출 |
| matched_keywords | 사용자 답변 내 자소서 키워드와 일치한 단어 리스트 |
| 분기 기준 | matched_keywords의 길이가 2 이상이면 꼬리질문 진행 |
{
"resume_text": "저는 컴퓨터공학과 재학 중 다양한 프로젝트를 통해 실무 역량을 키웠습니다. 특히 AI 관련 캡스톤 디자인에서 리더를 맡아 팀을 이끌었고, 자연어처리와 딥러닝 기반의 텍스트 분류 모델을 개발한 경험이 있습니다.",
"user_answer": "저는 대학생 시절 인공지능 프로젝트에 참여하여 모델을 학습시키는 경험을 했습니다."
}

resume_text 또는 user_answer가 비어 있을 경우 → 400 Bad Request[] 반환 + 서버 로그 출력access_token 사용 시 → "이메일이 토큰에 없습니다." 403 응답
