P:dback — Service Flow Chart

서비스 전체 흐름 및 상세 프로세스

START
회원가입 / 로그인
이메일 + 비밀번호 입력
auth-user / 김유선
JWT 토큰 발급
면접 설정
직무 · 기술스택 · 경력연차 선택
카메라/마이크 권한 허용
interview / 이영진
POST /api/v1/interview/start
Gemini 첫 질문 생성
직무/스택 기반 면접 질문 프롬프트 → 시니어 개발자 페르소나
반복 (질문 수 제한까지)
AI 질문 표시
면접관 질문을 채팅 UI에 표시
음성 답변 (STT)
Web Speech API
음성 → 텍스트 변환
태도 분석
MediaPipe FaceMesh/Pose
시선이탈 · 자세 감지
답변 제출
STT 텍스트 + 태도 점수 → 백엔드 전송
Gemini 꼬리질문 생성
질문 수 도달 or 수동 종료
면접 종료
종료시간 기록 · 피드백 생성 요청
interview / 이영진
Gemini 종합 피드백 생성
전체 대화 기반 → 기술/논리/태도 점수 + 강점 + 개선점 + 모범답안
MongoDB 저장
feedbacks 컬렉션
피드백 결과 확인
점수 카드 · 차트 · 강점/개선점 · 모범답안
feedback / 박지영
히스토리 저장
유저별 면접 이력 · 점수 추이
재면접?
YES
면접 설정으로
NO
END

🔐 인증 플로우 auth-user / 김유선

사용자 접속
계정 있음?
NO (회원가입)
회원가입 폼
이름 · 이메일 · 비밀번호 입력
비밀번호 해싱
passlib + bcrypt
users 컬렉션 저장
MongoDB
가입 완료 → 로그인으로
YES (로그인)
로그인 폼
이메일 · 비밀번호 입력
비밀번호 검증
bcrypt.verify()
JWT 토큰 발급
access_token + 만료시간
메인 페이지 이동
localStorage에 토큰 저장
JWT 인증 미들웨어 (모든 보호 API)
  • Authorization 헤더에서 Bearer 토큰 추출
  • 토큰 디코딩 및 만료 확인
  • user_id 추출 → request.state.user에 주입
  • 실패 시 401 Unauthorized 반환

🎤 면접 진행 플로우 interview / 이영진 · ai-gemini / 김평일

면접 설정 완료
직무: 백엔드 · 스택: Python, FastAPI · 연차: 신입
POST /api/v1/interview/start
세션 생성
interviews 컬렉션에 문서 생성
session_id, user_id, 시작시간
Gemini 첫 질문 생성
시니어 면접관 페르소나
직무/스택 기반 기술 질문
면접 루프 (n회 반복)
1. 질문 표시
AI 면접관 질문 → 채팅 UI에 렌더링
2. 사용자 답변 (음성)
Web Speech API 활성화 → 음성을 실시간 텍스트 변환
MediaPipe 분석
FaceMesh: 시선이탈 횟수
Pose: 자세 안정도
→ 태도 점수 산출
STT 텍스트 전송
POST /api/v1/interview/answer
답변 텍스트 + 태도 점수
질문 수 제한
도달?
NO
Gemini 꼬리질문
대화 이력 기반
후속 질문 생성
↑ 루프 처음으로
YES
면접 종료로 →
면접 종료
POST /api/v1/interview/end
종료시간 기록 · 피드백 생성 요청 트리거
→ 피드백 생성 플로우로

📊 피드백 생성 플로우 feedback / 박지영 · ai-gemini / 김평일

면접 종료 트리거
면접 세션의 전체 대화 이력 수집
입력 데이터 수집
  • 전체 질문-답변 대화 이력 (Gemini chat history)
  • MediaPipe 태도 데이터 (시선이탈 횟수, 정면주시율, 자세 안정도)
  • 면접 메타 정보 (직무, 스택, 연차, 소요시간)
POST /api/v1/feedback/generate
Gemini AI 평가
기술 정확도 (1-10)
논리 구성력 (1-10)
강점 · 개선점 · 모범답안
태도 점수 산출
시선이탈 횟수 → 점수 변환
자세 데이터 → 점수 변환
태도 종합 점수 (1-10)
피드백 JSON 구조화
  • scores: { technical, logical, attitude }
  • strengths: ["강점1", "강점2", ...]
  • improvements: ["개선점1", "개선점2", ...]
  • model_answers: [{ question, answer }, ...]
feedbacks 컬렉션 저장
interview_id, user_id, scores, feedback_text
피드백 결과 페이지
GET /api/v1/feedback/{interview_id}
점수 카드 + Chart.js 시각화 + 강점/개선점 + 모범답안
히스토리 누적
유저별 면접 이력 · 점수 추이 데이터
완료