View on GitHub

2026-capstone-60

2026-capstone-template created by GitHub Classroom

πŸŽ™οΈ RAG 기반 AI λͺ¨μ˜λ©΄μ ‘

μ‹€μ‹œκ°„ μŒμ„± λ©΄μ ‘ Β· RAG 맞좀 질문 Β· AI ν”Όλ“œλ°± 리포트λ₯Ό μ œκ³΅ν•˜λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜


ν”„λ‘œμ νŠΈ μ†Œκ°œ

μ·¨μ—… 쀀비생이 μ‹€μ „κ³Ό λ™μΌν•œ ν™˜κ²½μ—μ„œ AI λ©΄μ ‘κ΄€κ³Ό 1:1 μŒμ„± 면접을 μ—°μŠ΅ν•  수 μžˆλŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.
이λ ₯μ„œΒ·μžμ†Œμ„œλ₯Ό 기반으둜 직무에 κΌ­ λ§žλŠ” μ§ˆλ¬Έμ„ μ‹€μ‹œκ°„μœΌλ‘œ μƒμ„±ν•˜κ³ , λ©΄μ ‘ μ’…λ£Œ ν›„ LLM이 닡변을 뢄석해 μ’…ν•© ν”Όλ“œλ°± 리포트λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.


μ£Όμš” κΈ°λŠ₯

πŸ” JWT 인증

이메일/λΉ„λ°€λ²ˆν˜Έ 둜그인 ν›„ JWT 토큰을 λ°œκΈ‰λ°›μ•„ λͺ¨λ“  API μš”μ²­μ— μžλ™μœΌλ‘œ μ²¨λΆ€ν•©λ‹ˆλ‹€.
μ•± μž¬μ ‘μ† μ‹œ μ €μž₯된 ν† ν°μœΌλ‘œ μ„Έμ…˜μ„ μžλ™ λ³΅μ›ν•©λ‹ˆλ‹€.

πŸ“ 4단계 μœ„μ €λ“œ μ„Έμ…˜ μ„€μ •

λ©΄μ ‘ μ‹œμž‘ μ „ 단계별 κ°€μ΄λ“œλ₯Ό 톡해 섀정을 μ™„λ£Œν•©λ‹ˆλ‹€.

단계 λ‚΄μš©
1 이λ ₯μ„œ / μžμ†Œμ„œ μ—…λ‘œλ“œ 및 선택
2 지원 직무 Β· λ©΄μ ‘ μ‹œκ°„ μ„€μ •
3 마이크 μ˜€λ””μ˜€ 레벨 ν…ŒμŠ€νŠΈ
4 전체 μ„€μ • μš”μ•½ 확인 ν›„ λ©΄μ ‘ μ‹œμž‘

πŸŽ™οΈ μ‹€μ‹œκ°„ μŒμ„± λ©΄μ ‘

LiveKit WebRTC 기반 μŒμ„± μ—°κ²°λ‘œ μ‹€μ œ λ©΄μ ‘κ³Ό λ™μΌν•œ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“Š AI ν”Όλ“œλ°± 리포트

λ©΄μ ‘ μ’…λ£Œ ν›„ LLM이 λ‹΅λ³€ 전체λ₯Ό 뢄석해 리포트λ₯Ό μžλ™ μƒμ„±ν•©λ‹ˆλ‹€.

μ§€ν‘œ μ„€λͺ…
기술 μ •ν™•μ„± 기술 κ°œλ…μ˜ μ˜¬λ°”λ₯Έ 이해 및 μ„€λͺ… μˆ˜μ€€
논리성 λ‹΅λ³€μ˜ ꡬ쑰와 κ·Όκ±° μ „κ°œ 방식
깊이 μ£Όμ œμ— λŒ€ν•œ 심화 이해도
전달λ ₯ λͺ…ν™•ν•˜κ³  κ°„κ²°ν•œ μ˜μ‚¬μ „λ‹¬ λŠ₯λ ₯

μ’…ν•© μ μˆ˜μ™€ ν•¨κ»˜ μ§ˆλ¬Έλ³„ λ‚΄ λ‹΅λ³€ vs λͺ¨λ²” λ‹΅μ•ˆ 비ꡐλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“ λˆ„μ  λ©΄μ ‘ 기둝

κ³Όκ±° λ©΄μ ‘ μ„Έμ…˜μ˜ λͺ©λ‘ 및 상세 기둝(점수, ν”Όλ“œλ°±, 질문/λ‹΅λ³€)을 μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ₯  ν¬μΈˆμΏ ν‚€

λ©΄μ ‘ μ „ κΈ΄μž₯을 ν’€μ–΄μ£ΌλŠ” μ†Œμ†Œν•œ 재미 μš”μ†Œμž…λ‹ˆλ‹€.
μΏ ν‚€λ₯Ό ν΄λ¦­ν•˜λ©΄ 20κ°€μ§€ 응원 λ©”μ‹œμ§€ 쀑 ν•˜λ‚˜κ°€ 랜덀으둜 λ“±μž₯ν•©λ‹ˆλ‹€.


ν™”λ©΄ 흐름

ν™ˆ ν™”λ©΄
  β”‚
  β”œβ”€β”€ 둜그인
  β”‚
  └── λ©΄μ ‘ μ‹œμž‘
        β”‚
        β–Ό
  μ„Έμ…˜ μ„€μ • μœ„μ €λ“œ
  Step 1 Β· Step 2 Β· Step 3 Β· Step 4
        β”‚
        β–Ό
  μ‹€μ‹œκ°„ λ©΄μ ‘ μ§„ν–‰
  (μŒμ„± μ—°κ²° Β· 타이머 Β· 질문 ν‘œμ‹œ)
        β”‚
        β–Ό
  AI 평가 쀑...
        β”‚
        β–Ό
  ν”Όλ“œλ°± 리포트
  (점수 Β· μ§€ν‘œ Β· λͺ¨λ²” λ‹΅μ•ˆ)
        β”‚
        β–Ό
  λ©΄μ ‘ 기둝 μ €μž₯ β†’ 기둝 쑰회

기술 μŠ€νƒ

λΆ„λ₯˜ 기술
UI ν”„λ ˆμž„μ›Œν¬ React 18
λΌμš°νŒ… React Router DOM v7
λΉŒλ“œ 도ꡬ Vite 5
μ‹€μ‹œκ°„ μŒμ„± LiveKit Client (WebRTC)
μŠ€νƒ€μΌ μ»€μŠ€ν…€ CSS (CSS Variables λ””μžμΈ μ‹œμŠ€ν…œ)
인증 JWT (localStorage)
ν…ŒμŠ€νŠΈ Vitest

ν”„λ‘œμ νŠΈ ꡬ쑰

src/
β”œβ”€β”€ api/
β”‚   β”œβ”€β”€ authApi.js               # 둜그인, λ‚΄ 정보 쑰회
β”‚   β”œβ”€β”€ interviewApi.js          # μ„Έμ…˜ 생성 / μ’…λ£Œ / κ²°κ³Ό 쑰회
β”‚   └── interviewHistoryApi.js   # 기둝 μ €μž₯ / λͺ©λ‘ / 상세
β”œβ”€β”€ auth/
β”‚   └── tokenStorage.js          # JWT 토큰 관리
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ HomeView.jsx              # ν™ˆ (νžˆμ–΄λ‘œ Β· ν”Όμ²˜ μΉ΄λ“œ Β· ν¬μΈˆμΏ ν‚€)
β”‚   β”œβ”€β”€ LoginForm.jsx             # 둜그인
β”‚   β”œβ”€β”€ SessionSetupForm.jsx      # 4단계 μœ„μ €λ“œ μ„Έμ…˜ μ„€μ •
β”‚   β”œβ”€β”€ InterviewRoom.jsx         # μ‹€μ‹œκ°„ λ©΄μ ‘
β”‚   β”œβ”€β”€ EvaluatingView.jsx        # AI 평가 λŒ€κΈ°
β”‚   β”œβ”€β”€ ResultView.jsx            # ν”Όλ“œλ°± 리포트
β”‚   β”œβ”€β”€ HistoryListView.jsx       # λ©΄μ ‘ 기둝 λͺ©λ‘
β”‚   β”œβ”€β”€ HistoryDetailView.jsx     # λ©΄μ ‘ 기둝 상세
β”‚   └── FortuneCookie.jsx         # ν¬μΈˆμΏ ν‚€
β”œβ”€β”€ hooks/
β”‚   └── useCountdown.js           # μΉ΄μš΄νŠΈλ‹€μš΄ 타이머 ν›…
β”œβ”€β”€ App.jsx                       # λΌμš°νŒ… Β· μ „μ—­ μƒνƒœ
└── styles.css                    # μ „μ—­ λ””μžμΈ μ‹œμŠ€ν…œ

λ°±μ—”λ“œ 연동 ꡬ쑰

[ν”„λ‘ νŠΈμ—”λ“œ]                    [λ°±μ—”λ“œ μ„œλ²„]
     β”‚                               β”‚
     β”œβ”€β”€ POST /v1/auth/login ────────▢ JWT λ°œκΈ‰
     β”œβ”€β”€ GET  /v1/auth/me ───────────▢ μ„Έμ…˜ 확인
     β”‚                               β”‚
     β”œβ”€β”€ POST /v1/interviews/sessions β–Ά λ©΄μ ‘ μ„Έμ…˜ 생성
     β”‚                                  └─▢ LiveKit 토큰 λ°˜ν™˜
     β”‚                               β”‚
     β”œβ”€β”€ POST /sessions/{id}/end ────▢ λ©΄μ ‘ μ’…λ£Œ β†’ AI 평가 μ‹œμž‘
     β”‚                               β”‚
     β”œβ”€β”€ GET  /sessions/{id}/result ─▢ κ²°κ³Ό 폴링 (4초 간격)
     β”‚          EVALUATING β†’ λŒ€κΈ°        └─▢ μ™„λ£Œ μ‹œ 리포트 λ°˜ν™˜
     β”‚                               β”‚
     └── POST /v1/interviews/results β–Ά κ²°κ³Ό 기둝 μ €μž₯
         GET  /v1/interviews/results ─▢ λ‚΄ 기둝 λͺ©λ‘
         GET  /v1/interviews/results/{id} β–Ά 기둝 상세

λ©΄μ ‘ μ„Έμ…˜ 생성 μš”μ²­

POST /v1/interviews/sessions
{
  "resumeIds": 1,
  "coverLetter": 3,
  "jobField": "BACKEND",
  "durationMinutes": 15
}

지원 직무: BACKEND Β· FRONTEND Β· ANDROID Β· IOS Β· DEVOPS Β· DATA Β· AI

ν”Όλ“œλ°± 리포트 응닡

{
  "score": 85,
  "overallFeedback": "기술 이해도가 λ†’κ³  논리적인 닡변을 κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€...",
  "qaList": [
    {
      "turn": 1,
      "question": "졜근 ν”„λ‘œμ νŠΈμ—μ„œ μ–΄λ €μ› λ˜ 기술 μ˜μ‚¬κ²°μ •μ„ μ„€λͺ…ν•΄μ£Όμ„Έμš”.",
      "userAnswer": "μ €λŠ” ...",
      "bestAnswer": "이상적인 닡변은 ..."
    }
  ]
}

μ‹œμž‘ν•˜κΈ°

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# ν™˜κ²½ λ³€μˆ˜ μ„€μ •
cp .env.example .env
# .env νŒŒμΌμ—μ„œ λ°±μ—”λ“œ μ„œλ²„ μ£Όμ†Œ μž…λ ₯

# 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

ν™˜κ²½ λ³€μˆ˜

VITE_BACKEND_BASE_URL=http://localhost:8080
VITE_API_BASE_URL=http://localhost:8080/v1/interviews
VITE_AUTH_BASE_URL=http://localhost:8080/v1/auth

λ°±μ—”λ“œ 연동 λ¬Έμ„œ

API λͺ…μ„Έ 전문은 docs/backend-integration-spec.mdλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.