Skip to content

Repository files navigation

Re:terview

기업·직무·이력서 정보를 기반으로 맞춤 질문을 생성하고,
음성 답변과 비언어 신호를 분석해 면접 리포트를 제공하는 AI 모의면접 서비스

Overview

기존 면접 준비는 예상 질문을 정리하는 데 그쳐 실제 면접처럼 연습하기 어렵고, 답변의 구조와 전달 방식을 객관적으로 확인하기 어렵다는 문제가 있습니다.

Re:terview는 다음 과정을 하나의 서비스로 연결합니다.

  1. 기업·직무·JD·이력서 기반 맞춤 질문 생성
  2. 음성 기반 모의면접 진행
  3. 답변 내용과 비언어 신호 분석
  4. 구조화된 AI 면접 리포트 생성
  5. 리포트 기반 약점 보완 재면접

Key Features

맞춤형 Interview Space

  • 회사, 직무, 경력 수준 입력
  • 채용공고 JD 및 이력서 PDF 등록
  • 자기소개서·경력기술서 등 추가 자료 관리
  • 지원 정보별 독립적인 면접 Space 구성

AI 질문 생성

  • JD와 이력서 정보를 반영한 맞춤형 질문
  • 이전 답변의 맥락을 반영한 꼬리질문
  • 질문 개수와 면접 길이 선택
  • 4가지 면접관 페르소나 제공
    • 전문형
    • 친절형
    • 실무형
    • 압박형

음성 기반 모의면접

  • OpenAI TTS 기반 질문 음성 재생
  • OpenAI Whisper 기반 답변 STT 변환
  • 면접 시작 전 웹캠·마이크 장비 확인
  • 자기소개부터 시작하거나 본 면접부터 시작 가능
  • 면접 진행 상태를 상태 머신으로 관리

답변 및 비언어 분석

답변 내용은 다음 기준으로 구조화해 분석합니다.

  • STAR 구조
  • 직무 관련성
  • 답변 구체성
  • 논리 흐름

원본 영상을 저장하지 않고 다음 행동 요약 지표만 활용합니다.

  • 시선 안정성
  • 침묵 시간과 횟수
  • 말속도
  • 얼굴 미검출 구간

AI 면접 리포트

  • 면접 전체 총평
  • 답변 패턴 및 강점 분석
  • 개선이 필요한 답변과 코칭
  • 질문별 평가 결과
  • 비언어 신호 요약
  • 다음 면접을 위한 액션 아이템
  • 약점 보완 재면접

개인정보 보호

  • 외부 AI 전송 전 개인정보 마스킹
  • 이력서와 JD 원문 대신 구조화된 메타데이터 활용
  • 임시 음성·PDF 파일 처리 후 삭제
  • 원본 영상과 음성 경로를 DB에 영구 저장하지 않음
  • Supabase Access Token 기반 인증

Tech Stack

Frontend

React Vite MediaPipe Three.js Framer Motion

Backend

Java Spring Boot Spring Security JPA Flyway

AI & Data

OpenAI Whisper TTS PostgreSQL Supabase

Infrastructure

Docker Maven


System Architecture

flowchart LR
    User[User] --> React[React Client]

    React -->|Supabase Token| Security[Spring Security]
    React -->|Session and Interview API| API[Spring Boot API]
    React -->|Behavior Metrics| MediaPipe[MediaPipe]

    Security --> API
    API --> Session[Session Service]
    API --> Interview[Interview AI Service]
    API --> Speech[Speech Service]
    API --> Report[Report AI Service]

    Session --> PostgreSQL[(PostgreSQL)]
    Interview --> PII[PII Sanitizer]
    Report --> PII
    PII --> OpenAI[OpenAI API]
    Speech --> Whisper[Whisper STT]
    Speech --> TTS[OpenAI TTS]

    React --> Supabase[Supabase Auth]
Loading

Interview Flow

flowchart TD
    A[로그인] --> B[Interview Space 생성]
    B --> C[회사·직무·JD·이력서 입력]
    C --> D[페르소나와 질문 길이 선택]
    D --> E[웹캠·마이크 장비 확인]
    E --> F[AI 질문 생성 및 음성 재생]
    F --> G[사용자 음성 답변]
    G --> H[STT 변환]
    H --> I[답변 및 비언어 지표 평가]
    I --> J{마지막 질문인가?}
    J -- No --> F
    J -- Yes --> K[종합 AI 리포트 생성]
    K --> L[약점 보완 재면접]
Loading

Project Structure

web_test
├── frontend
│   ├── public
│   └── src
│       ├── features/interview-space
│       │   ├── hooks
│       │   │   ├── auth
│       │   │   ├── behavior
│       │   │   ├── session
│       │   │   └── speech
│       │   └── ui
│       │       ├── auth
│       │       ├── dashboard
│       │       ├── session
│       │       ├── space
│       │       └── shared
│       ├── lib
│       └── styles
│
├── backend
│   ├── src/main/java/com/semi/interview
│   │   ├── common
│   │   │   ├── ai
│   │   │   ├── config
│   │   │   ├── exception
│   │   │   └── security
│   │   └── domain
│   │       ├── interview
│   │       ├── landing
│   │       ├── preference
│   │       ├── report
│   │       ├── resume
│   │       ├── session
│   │       └── speech
│   ├── src/main/resources/db/migration
│   └── docker-compose.yml
│
├── PROJECT_PLAN.md
├── INTERVIEW_RUNTIME_STATE_MACHINE.md
└── TEAM_README.md

Getting Started

Requirements

  • Node.js 18+
  • Java 21
  • Maven 3.9+
  • Docker
  • Supabase Project
  • OpenAI API Key

1. Clone Repository

git clone https://github.com/Re-terview/web_test.git
cd web_test

2. Start PostgreSQL

cd backend
docker compose up -d

기본 PostgreSQL 포트는 다음과 같습니다.

localhost:5433

3. Backend Environment

backend/.env 파일을 생성합니다.

DB_URL=jdbc:postgresql://localhost:5433/interview_app
DB_USERNAME=postgres
DB_PASSWORD=postgres

SUPABASE_URL=your_supabase_url
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
SUPABASE_ANON_KEY=your_anon_key

OPENAI_API_KEY=your_openai_api_key
FRONTEND_ORIGIN=http://localhost:5173

4. Run Backend

cd backend
mvn spring-boot:run

Backend:

http://localhost:8000

5. Frontend Environment

frontend/.env.local 파일을 생성합니다.

VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
VITE_API_BASE=http://localhost:8000

6. Run Frontend

cd frontend
npm install
npm run dev

Frontend:

http://localhost:5173

Runtime State

면접 과정에서 발생할 수 있는 STT·질문 전환·일시정지·종료·리포트 생성의 충돌을 방지하기 위해 런타임 상태를 명시적으로 관리합니다.

idle
→ preparing_question
→ ready
→ playing_question
→ recording
→ recording_stopping
→ stt_processing
→ stt_done
→ advancing
→ reporting

오류나 사용자 입력에 따라 다음 상태로 전환할 수 있습니다.

paused
error

자세한 상태 전이 기준은 INTERVIEW_RUNTIME_STATE_MACHINE.md에서 확인할 수 있습니다.


API Domains

Domain Responsibility
/api/sessions Space, 면접 세션, 턴 및 리포트 관리
/api/interview 질문 생성, 답변 평가, 다음 질문 전환
/api/speech STT 및 TTS 처리
/api/resume 이력서 PDF 텍스트 추출
/api/preferences 사용자 환경설정
/api/landing 랜딩 페이지 AI 기능

Team Collaboration

프로젝트는 다음 3개 도메인을 중심으로 역할을 분리했습니다.

Domain Responsibility
Interview Runtime 상태 전이, 질문 전환, 체감 속도와 비동기 요청 제어
AI Question & Evaluation JD·이력서 기반 질문, 답변 평가, 피드백 전략
Space UX 입력 구조, 시작 흐름, 페르소나 체인과 Space 관리

공용 상태와 데이터 구조를 변경할 때는 담당자 간 합의를 거쳐 충돌을 최소화했습니다.


Security & Privacy

  • Supabase JWT 기반 사용자 인증
  • Spring Security를 통한 보호 API 관리
  • OpenAI 전송 전 PII 마스킹
  • 원본 영상 미저장
  • STT 및 이력서 임시 파일 처리 후 삭제
  • 원문과 외부 AI 전달용 메타데이터 분리
  • Flyway 기반 DB 스키마 버전 관리

자세한 내용은 backend/PRIVACY_ARCHITECTURE.md에서 확인할 수 있습니다.


Documents

About

기업·직무·이력서 기반 맞춤 질문과 음성·비언어 분석 리포트를 제공하는 AI 모의면접 서비스

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages