ARES๋ ์ทจ์ ์ค๋น์๋ค์ด ๋ฉด์ ๊ณผ์ ์์ ๊ฒช๋ ์ด๋ ค์์ AI ๊ธฐ์ ๋ก ํด๊ฒฐํ๊ณ ์ ํ์ํ AI ๊ธฐ๋ฐ ๋ชจ์ ๋ฉด์ ๋ฐ ์ญ๋ ๋ถ์ ํ๋ซํผ์ ๋ฐฑ์๋ API ์๋ฒ์ ๋๋ค.
๋ง์ ์ทจ์ ์ค๋น์๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํฉ๋๋ค.
- ๋ถ์กฑํ ์ค์ ๊ฒฝํ: ์ค์ ์ ๊ฐ์ ๋ฉด์ ํ๊ฒฝ์์ ์ฐ์ตํ ๊ธฐํ๊ฐ ๋ถ์กฑํ์ฌ ์ค์ ๊ฐ๊ฐ์ ์ตํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ๋ง์ฐํ ํผ๋๋ฐฑ: ์คํฐ๋๋ ์ฃผ๋ณ ์ง์ธ์ ํตํด ํผ๋๋ฐฑ์ ๋ฐ๋๋ผ๋, ์ ๋ฌธ์ ์ด๊ณ ๊ฐ๊ด์ ์ธ ๊ธฐ์ค๋ณด๋ค๋ ์ฃผ๊ด์ ์ธ ๊ฐ์์ ๊ทธ์น๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ์ ๋ณด์ ๋น๋์นญ: ์ง์ํ๋ ๊ธฐ์ ๊ณผ ์ง๋ฌด์ ๋ํ ๊น์ด ์๋ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ด๋ ค์, ๋๋ฌธ์๋ต์ ํ๊ฑฐ๋ ํผ์์ ์ธ ๋ต๋ณ์ ๊ทธ์น๊ธฐ ์ฝ์ต๋๋ค.
ARES๋ ์ต์ AI ๊ธฐ์ ์ ํ์ฉํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ณ , ์ฌ์ฉ์์๊ฒ ๊ฐ์ธํ๋ ๋ง์ถคํ ๋ฉด์ ์ฝ์นญ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- RAG ๊ธฐ๋ฐ์ ์ค์๊ฐ ๋ง์ถค ์ง๋ฌธ:
Azure OpenAI์LlamaIndex๋ฅผ ํ์ฉํ RAG(๊ฒ์ ์ฆ๊ฐ ์์ฑ) ๊ธฐ์ ์ ํตํด, ์ง์ํ๋ ๊ธฐ์ ์ ์ต์ ์ฌ์ ๋ณด๊ณ ์, ๊ณต์ ์๋ฃ ๋ฑ์ ์ค์๊ฐ์ผ๋ก ๋ถ์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ฑ๋ ์ง๋ฌธ๋ค์ ๋จ์ํ ๋จ๋ตํ ์ง๋ฌธ์ ๋์ด, ์ง์์์ ์ง๋ฌด ์ดํด๋์ ํ์ฌ์ ๋ํ ๊ด์ฌ์ ์ฌ๋ ์๊ฒ ํ์ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. - ๋ค๊ฐ์ ์ธ ์ฌ์ธต ๋ถ์ ๋ฆฌํฌํธ: ๋ชจ์ ๋ฉด์ ์ด ๋๋๋ฉด, ์ฌ์ฉ์์ ๋ต๋ณ ๋ด์ฉ(ํ ์คํธ)๋ฟ๋ง ์๋๋ผ, ์์ฑ(๋ง์ ๋น ๋ฅด๊ธฐ, ํค)๊ณผ ์์(์์ ์ฒ๋ฆฌ, ํ์ )๊น์ง ๋ถ์ํ๋ ๋ค์ค ๋ชจ๋(Multi-modal) ๋ถ์์ ํตํด ์ข ํฉ์ ์ธ ๋ฆฌํฌํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์์ ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ๊ด์ ์ธ ๋ฐ์ดํฐ๋ก ํ์ธํ๊ณ ์ค์ง์ ์ธ ๊ฐ์ ์ ์ ์ฐพ์ ์ ์์ต๋๋ค.
- ์ฒด๊ณ์ ์ธ ์ปค๋ฆฌ์ด ๊ด๋ฆฌ: ์ด๋ ฅ์์ ๊ฒฝ๋ ฅ, ํ๋ ฅ ๋ฑ ๋ชจ๋ ์ปค๋ฆฌ์ด ์ ๋ณด๋ฅผ ํ๊ณณ์์ ๊ด๋ฆฌํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ฌ๋ฌ ๋ฒ์ ์ ์ด๋ ฅ์๋ฅผ ์์ฝ๊ฒ ์์ฑํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ทจ์ ์ค๋น ๊ณผ์ ์ ํจ์จ์ฑ์ ๊ทน๋ํํฉ๋๋ค.
ARES ๋ฐฑ์๋๋ ์ด๋ฌํ ํต์ฌ ๊ธฐ๋ฅ๋ค์ ์์ ์ ์ผ๋ก ์ ๊ณตํ๊ธฐ ์ํ RESTful API ์๋ฒ์ด๋ฉฐ, ๊ฐ๋ฐ์, ํฌ์์, ๊ทธ๋ฆฌ๊ณ ๋ฉด์ ๊ด์๊ฒ ARES ํ๋ซํผ์ ๊ธฐ์ ์ ๊น์ด์ ์ฑ์ฅ ๊ฐ๋ฅ์ฑ์ ๋ช ํํ๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- ARES Frontend: React Native์ Expo๋ก ๊ฐ๋ฐ๋ ํฌ๋ก์คํ๋ซํผ(iOS, Android, Web) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ๋ณธ ๋ฐฑ์๋ ์๋ฒ์ API๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง๊ด์ ์ธ UI๋ก ์ ๊ณตํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ์ค์ ๋ฉด์ ๊ณผ ์ ์ฌํ ํ๊ฒฝ์์ AI ๋ฉด์ ๊ด๊ณผ ์ํธ์์ฉํ๋ฉฐ ์ค์ ๊ฐ๊ฐ์ ์ตํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ์ฃผ์ ์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
LlamaIndex,Azure OpenAI,Azure AI Search,Azure Blob Storage - ๊ธฐ๋ฅ ์์ธ:
- ๋ฉด์ ์์: ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ธฐ์
, ์ง๋ฌด, ๋ฉด์ ๋์ด๋(๋ณดํต, ์ด๋ ค์)๋ฅผ ์ ํํ์ฌ ๋ฉด์ ์ ์์ํฉ๋๋ค (
POST /api/v1/interviews/start/). - RAG ๊ธฐ๋ฐ ์ง๋ฌธ ์์ฑ: ๋ฐฑ์๋๋
Azure Blob Storage์ ์ ์ฅ๋ ํด๋น ๊ธฐ์ ์ ์ต์ ์ฌ์ ๋ณด๊ณ ์, ๊ณต์ ์๋ฃ ๋ฑ์LlamaIndex๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ๋ถ์ํฉ๋๋ค. ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋กAzure OpenAILLM์ด ์ง์์์ ์ด๋ ฅ์์ ์ง๋ฌด์ ๊ฐ์ฅ ์ ํฉํ ์ฒซ ์ง๋ฌธ์ ์์ฑํ์ฌ ๋ฐํํฉ๋๋ค. - ๊ผฌ๋ฆฌ ์ง๋ฌธ ๋ฐ ๋ต๋ณ: ์ฌ์ฉ์๊ฐ ๋ต๋ณ์ ์ ์ถํ๋ฉด(
POST /api/v1/interviews/answer/), ์์คํ ์ ๋ต๋ณ ๋ด์ฉ์ ๋ถ์ํ์ฌ ๊ด๋ จ๋ ๊ผฌ๋ฆฌ ์ง๋ฌธ์ ์์ฑํฉ๋๋ค (POST /api/v1/interviews/next/). ์ด ๊ณผ์ ์ ๋ฉด์ ์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ฐ๋ณต๋ฉ๋๋ค.
- ๊ตฌ์กฐํ๋ ๋จ๊ณ: ๋ฉด์ ์
๊ฒฝํ/์ญ๋โ์ํฉ/์ผ์ด์คโ์กฐ์ง ์ ํฉ์ฑ์ 3๋จ๊ณ๋ก ์ฒด๊ณ์ ์ผ๋ก ์งํ๋์ด, ์ง์์์ ์ญ๋์ ๋ค๊ฐ๋๋ก ๊ฒ์ฆํฉ๋๋ค. - ๊ฐ์ ์๋ฐํ ๋ฉด์ :
- ๋ฉด์ ์์: ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ธฐ์
, ์ง๋ฌด, ๋ฉด์ ๋์ด๋(๋ณดํต, ์ด๋ ค์)๋ฅผ ์ ํํ์ฌ ๋ฉด์ ์ ์์ํฉ๋๋ค (
- ๊ฒฐ๊ณผ: ์ฌ์ฉ์๋ ์ค์ ๊ธฐ์ ๋ฐ ์ง๋ฌด์ ๋์ ๊ด๋ จ์ฑ์ ๊ฐ์ง ์ง๋ฌธ๋ค์ ํตํด ์ค์ง์ ์ธ ๋ฉด์ ์ ๊ฒฝํํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ง๋ฌธ๊ณผ ๋ต๋ณ, ๋ถ์ ๋ด์ฉ์ ์ธ์ ๋ณ๋ก ๊ธฐ๋ก๋์ด ๋ฉด์ ์ข ๋ฃ ํ ๋ฆฌํฌํธ ์์ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ ์ด๋ ฅ์์ ์๊ธฐ์๊ฐ์ ๋ฌธ์๋ฅผ AI๊ฐ ๋ถ์ํ์ฌ ๊ฐ์ ๊ณผ ์ฝ์ ์ ์ง๋จํ๊ณ , ์์ ์ง๋ฌธ์ ์์ฑํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ฃผ์ ์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
azure-ai-documentintelligence,pdfplumber,OpenAI - ๊ธฐ๋ฅ ์์ธ:
- ๋ฌธ์ ์
๋ก๋ ๋ฐ ํ
์คํธ ์ถ์ถ: ์ฌ์ฉ์๊ฐ PDF, DOCX ๋ฑ์ ์ด๋ ฅ์ ํ์ผ์ ์
๋ก๋ํ๋ฉด,
pdfplumber๋azure-ai-documentintelligence๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์ถ์ถํฉ๋๋ค. - AI ๋ถ์ ์์ฒญ: ์ถ์ถ๋ ํ
์คํธ๋ฅผ
Azure OpenAI๋ชจ๋ธ์ ์ ๋ฌํ์ฌ ๋ถ์์ ์์ฒญํฉ๋๋ค (POST /api/v1/resume/analyze/). - ๋ถ์ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ: AI๋ ํ
์คํธ๋ฅผ ๋ถ์ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์์ฑํ์ฌ ๋ฐํํฉ๋๋ค.
- ์ง๋ฌด ์ญ๋ ํค์๋: ์ด๋ ฅ์ ๋ด์ฉ ๊ธฐ๋ฐ์ ํต์ฌ ์ญ๋ ํค์๋ ์ถ์ถ.
- ์์ ๋ฉด์ ์ง๋ฌธ: ๊ฒฝ๋ ฅ, ํ๋ก์ ํธ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ํ ์์ ์ง๋ฌธ ๋ชฉ๋ก.
- ๋ต๋ณ ๊ฐ์ด๋๋ผ์ธ: ๊ฐ ์์ ์ง๋ฌธ์ ๋ํ ๋ชจ๋ฒ ๋ต๋ณ ๋ฐฉํฅ ์ ์.
- ๊ฐ์ ์ ์: ์ด๋ ฅ์ ๋ด์ฉ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๋ถ์ํ๊ณ , ๋ณด์ํ ์ ์ ์ ์.
- ๋ฌธ์ ์
๋ก๋ ๋ฐ ํ
์คํธ ์ถ์ถ: ์ฌ์ฉ์๊ฐ PDF, DOCX ๋ฑ์ ์ด๋ ฅ์ ํ์ผ์ ์
๋ก๋ํ๋ฉด,
- ๊ฒฐ๊ณผ: ์ฌ์ฉ์๋ ์์ ์ ์ด๋ ฅ์์ ๊ธฐ๋ฐํ ๋ง์ถคํ ๋ฉด์ ์ง๋ฌธ์ ๋ฏธ๋ฆฌ ํ์ ํ๊ณ , ๋ต๋ณ์ ์ค๋นํ๋ฉฐ ๋ฉด์ ๊ฒฝ์๋ ฅ์ ๋์ผ ์ ์์ต๋๋ค.
๋ชจ์ ๋ฉด์ ์ข ๋ฃ ํ, ์ฌ์ฉ์์ ๋ต๋ณ ๋ด์ฉ๊ณผ ์์ฑ, ์์(์ ํ์ฌํญ)์ ์ข ํฉ์ ์ผ๋ก ๋ถ์ํ์ฌ ๋ค๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
- ์ฃผ์ ์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
pandas,matplotlib,praat-parselmouth,librosa,opencv-python,mediapipe - ๊ธฐ๋ฅ ์์ธ:
- ๋ฆฌํฌํธ ์์ฑ: ๋ฉด์ ์ธ์
์ด ์ข
๋ฃ๋๋ฉด(
POST /api/v1/interviews/finish/), ํด๋น ์ธ์ (session_id)์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๋ถ์ ๋ฆฌํฌํธ๊ฐ ์์ฑ๋ฉ๋๋ค. - ํ
์คํธ ๋ถ์: ์ฌ์ฉ์์ ๋ชจ๋ ๋ต๋ณ์
Azure OpenAI๋ฅผ ํตํด ๋ถ์ํ์ฌ ๋ด์ฉ์ ๋ ผ๋ฆฌ์ฑ, ์ง๋ฌด ๊ด๋ จ์ฑ, ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ ๋ฑ์ ํ๊ฐํฉ๋๋ค. - ์์ฑ ๋ถ์:
librosa,parselmouth๋ฅผ ์ฌ์ฉํ์ฌ ๋ต๋ณ ์์ฑ์ ๋น ๋ฅด๊ธฐ, ํค์ ๋ณํ, ๋ชฉ์๋ฆฌ ํฌ๊ธฐ ๋ฑ์ ๋ถ์ํ์ฌ ๋ฐํ ์ต๊ด์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. - ์์ ๋ถ์:
opencv-python,mediapipe๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ฒ๋ฆฌ, ํ์ ๋ณํ, ์์ธ ๋ฑ์ ๋ถ์ํ์ฌ ๋น์ธ์ด์ ์ปค๋ฎค๋์ผ์ด์ ์์๋ฅผ ํ๊ฐํฉ๋๋ค. - ์ข
ํฉ ํ๊ฐ: NCS ์ง๋ฌด ์ญ๋ ๋ถ๋ฅ ๊ธฐ์ค์ ๋ฐ๋ผ ์ญ๋์ ํ๊ฐํ๊ณ , ์ ์ฒด ์ง์์ ์ค ๋ฐฑ๋ถ์ ์์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
matplotlib์ ์ฌ์ฉํ์ฌ ๋ ์ด๋ ์ฐจํธ ๋ฑ ์๊ฐ ์๋ฃ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ฆฌํฌํธ ์์ฑ: ๋ฉด์ ์ธ์
์ด ์ข
๋ฃ๋๋ฉด(
- ๊ฒฐ๊ณผ: ์ฌ์ฉ์๋ ์์ ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ๊ด์ ์ธ ๋ฐ์ดํฐ๋ก ํ์ธํ๊ณ , ๊ฐ์ ๋ฐฉํฅ์ ๋ํ ๊ตฌ์ฒด์ ์ธ AI ์กฐ์ธ์ด ๋ด๊ธด ์ข
ํฉ ๋ฆฌํฌํธ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค (
GET /api/v1/interviews/report/<uuid:session_id>/).
์ฌ์ฉ์์ ๊ธฐ๋ณธ ์ ๋ณด์ ๊ฒฝ๋ ฅ, ํ๋ ฅ ๋ฑ ์ปค๋ฆฌ์ด ์ ๋ณด๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฃผ์ ์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
Django REST Framework,django-ordered-model - ๊ธฐ๋ฅ ์์ธ:
- ํ๋กํ ๊ด๋ฆฌ: ์ฌ์ฉ์์ ํ๋ ฅ, ๊ฒฝ๋ ฅ, ์๊ฒฉ์ฆ, ์์ ๋ด์ญ, ์ธ๊ตญ์ด ๋ฅ๋ ฅ ๋ฑ ํ๋กํ ์ ๋ณด๋ฅผ ํญ๋ชฉ๋ณ๋ก ์์ฑ(Create), ์กฐํ(Read), ์์ (Update), ์ญ์ (Delete)ํ๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ด๋ ฅ์ ๊ด๋ฆฌ: ์ฌ๋ฌ ๋ฒ์ ์ ์ด๋ ฅ์๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์๋ก์ด ์ด๋ ฅ์ ์์ฑ ์, ๊ธฐ์กด ํ๋กํ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ๋ถ๋ฌ์ ์ฑ์์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ์ ํธ์์ฑ์ ๋์์ต๋๋ค.
- ์์ ๊ด๋ฆฌ:
django-ordered-model์ ๋์ ํ์ฌ ํ๋ ฅ, ๊ฒฝ๋ ฅ ๋ฑ ๋ชฉ๋ก์ ์์๋ฅผ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ์์ฝ๊ฒ ๋ณ๊ฒฝํ๊ณ ์ ์งํ ์ ์๋๋ก ํ์ต๋๋ค. API ์์ฒญ๋ง์ผ๋ก ์์๊ฐ ์๋์ผ๋ก ์ฌ์ ๋ ฌ๋์ด, ํ๋ก ํธ์๋์์์ ๋ณต์กํ ์์ ๊ด๋ฆฌ ๋ก์ง์ ์ต์ํํฉ๋๋ค.
- ๊ฒฐ๊ณผ: ์ฌ์ฉ์๋ ์์ ์ ๋ชจ๋ ์ปค๋ฆฌ์ด ์ ๋ณด๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์ฝ๊ฒ ์ฌ๋ฌ ๋ฒ์ ์ ์ด๋ ฅ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์์ ์ ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ARES ์๋น์ค๋ฅผ ์ฐ๋ํ์ฌ ๋ฉด์ ์ผ์ ์ ์๋์ผ๋ก ๊ธฐ๋กํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์ต๋๋ค.
- ์ฃผ์ ์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
google-api-python-client,google-auth-oauthlib - ๊ธฐ๋ฅ ์์ธ:
- OAuth 2.0 ์ธ์ฆ:
google-auth-oauthlib์ ์ฌ์ฉํ์ฌ ์์ ํ OAuth 2.0 ์ธ์ฆ ๊ณผ์ ์ ํตํด ์ฌ์ฉ์๋ก๋ถํฐ ๊ตฌ๊ธ ์บ๋ฆฐ๋ ์ ๊ทผ ๊ถํ์ ์์๋ฐ์ต๋๋ค (GET /api/v1/calendar/google-auth-url/). - ์ด๋ฒคํธ ์ถ๊ฐ/์กฐํ/์ญ์ : ์ธ์ฆ์ด ์๋ฃ๋๋ฉด,
google-api-python-client๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ๋ฉด์ ์ผ์ ์ ์ถ๊ฐ(POST /api/v1/calendar/add-event/), ์กฐํ(GET /api/v1/calendar/events/), ์ญ์ (DELETE /api/v1/calendar/delete-event/<id>/)ํ ์ ์์ต๋๋ค.
- OAuth 2.0 ์ธ์ฆ:
- ๊ฒฐ๊ณผ: ARES ํ๋ซํผ ๋ด์์ ์กํ ๋ชจ์ ๋ฉด์ ์ผ์ ์ด๋, ์ฌ์ฉ์๊ฐ ์ง์ ๋ฑ๋กํ ์ค์ ๋ฉด์ ์ผ์ ์ด ์ฌ์ฉ์์ ๊ตฌ๊ธ ์บ๋ฆฐ๋์ ์๋์ผ๋ก ๋๊ธฐํ๋์ด ํธ๋ฆฌํ๊ฒ ์ผ์ ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
ARES ๋ฐฑ์๋๋ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ํคํ ์ฒ๋ก ์ค๊ณ๋์์ต๋๋ค.
-
๊ธฐ๋ฐ ํ๋ ์์ํฌ (Django & DRF): ์์ ์ฑ๊ณผ ๋น ๋ฅธ ๊ฐ๋ฐ ์๋๋ฅผ ์ํด Django์ Django REST Framework(DRF)๋ฅผ ์ฑํํ์ต๋๋ค. Django์ ORM, ๊ด๋ฆฌ์ ํ์ด์ง ๋ฑ ๋ด์ฅ ๊ธฐ๋ฅ์ ์ ๊ทน ํ์ฉํ๊ณ , DRF๋ฅผ ํตํด RESTful API๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌ์ถํฉ๋๋ค.
-
API ๊ตฌ์กฐ (ViewSets & Serializers): DRF์
ViewSet๊ณผSerializer๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API๋ฅผ ๊ตฌํํฉ๋๋ค.ModelViewSet์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ์ ์ธ CRUD API๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ณ , ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐViewSet์ ๋ฉ์๋(ex:perform_create)์ ๊ตฌํํ์ฌ ์ญํ ์ ๋ถ๋ฆฌํฉ๋๋ค.Serializer๋ ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ฅผ ๋ด๋นํฉ๋๋ค. -
์ธ์ฆ (dj-rest-auth & Simple JWT):
dj-rest-auth์djangorestframework-simplejwt๋ฅผ ์กฐํฉํ์ฌ JWT ๊ธฐ๋ฐ์ ์ธ์ฆ ์์คํ ์ ๊ตฌํํ์ต๋๋ค. ํ๋ก ํธ์๋๋Access Token๊ณผRefresh Token์ ๋ฐ๊ธ๋ฐ์ API ์์ฒญ ์ ์ฌ์ฉํ๋ฉฐ, ์๋ฒ๋JWTCookieAuthentication์ ํตํด ์ฟ ํค์ ๋ด๊ธด ํ ํฐ์ ์์ ํ๊ฒ ๊ฒ์ฆํฉ๋๋ค. -
RAG ํ์ดํ๋ผ์ธ: AI ๋ฉด์ ์ง๋ฌธ ์์ฑ์ ํต์ฌ ๋ก์ง์ผ๋ก,
LlamaIndex๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋์์ต๋๋ค. ์ด ํ์ดํ๋ผ์ธ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ํฉ๋๋ค.- ๋ฌธ์ ๋ก๋:
Azure Blob Storage์ ์ ์ฅ๋ ๊ธฐ์ ์๋ฃ(PDF, TXT ๋ฑ)๋ฅผ ๋ก๋ํฉ๋๋ค. - ์ธ๋ฑ์ฑ: ๋ก๋๋ ๋ฌธ์๋ฅผ
Azure OpenAI์ ์๋ฒ ๋ฉ ๋ชจ๋ธ(text-embedding-3-small)์ ์ฌ์ฉํ์ฌ ๋ฒกํฐ๋ก ๋ณํํ๊ณ ,Azure AI Search์ ์ธ๋ฑ์ฑํ์ฌ ๋ฒกํฐ ์ ์ฅ์๋ฅผ ๊ตฌ์ถํฉ๋๋ค. - ๊ฒ์ ๋ฐ ์์ฑ: ์ฌ์ฉ์ ์ง๋ฌธ์ด ๋ค์ด์ค๋ฉด, ํด๋น ์ง๋ฌธ๊ณผ ๊ฐ์ฅ ๊ด๋ จ์ฑ ๋์ ๋ฌธ์๋ฅผ ๋ฒกํฐ ์ ์ฅ์์์ ๊ฒ์(Retrieval)ํ๊ณ , ๊ฒ์๋ ๋ฌธ์์ ์๋ณธ ์ง๋ฌธ์
Azure OpenAI์ LLM(gpt-4o)์ ํจ๊ป ์ ๋ฌํ์ฌ ์ต์ข ๋ต๋ณ(๊ผฌ๋ฆฌ ์ง๋ฌธ)์ ์์ฑ(Generation)ํฉ๋๋ค.
- ๋ฌธ์ ๋ก๋:
/ares-backend
โโโ ares/ # Django ํ๋ก์ ํธ ๋ฃจํธ
โ โโโ api/ # ํต์ฌ API ๋ก์ง์ ๋ด๊ณ ์๋ Django ์ฑ
โ โ โโโ models/ # ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ (User, Resume, Interview ๋ฑ)
โ โ โโโ serializers/ # ๋ฐ์ดํฐ ์ง๋ ฌํ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ
โ โ โโโ views/ # API ์๋ํฌ์ธํธ ๋ก์ง (DRF ViewSets)
โ โ โโโ urls.py # API ๋ผ์ฐํ
์ค์
โ โ โโโ ...
โ โโโ settings.py # Django ํ๋ก์ ํธ ์ค์
โ โโโ urls.py # ์ต์์ URL ๋ผ์ฐํ
โโโ data/ # AI ๋ชจ๋ธ ํ์ต/๋ถ์์ ์ฌ์ฉ๋๋ ์ด๊ธฐ ๋ฐ์ดํฐ
โโโ logs/ # ์ ํ๋ฆฌ์ผ์ด์
๋ก๊ทธ
โโโ manage.py # Django ๊ด๋ฆฌ ์คํฌ๋ฆฝํธ
โโโ pyproject.toml # ํ๋ก์ ํธ ์์กด์ฑ ๋ฐ ์ค์ (uv)
โโโ requirements.txt # pyproject.toml๊ณผ ๋๊ธฐํ๋๋ ์์กด์ฑ ๋ชฉ๋ก
- Backend: Django, Django REST Framework
- AI/ML:
- RAG Pipeline: LlamaIndex
- LLM: Azure OpenAI, OpenAI
- Vector Store: Azure AI Search
- Document Storage: Azure Blob Storage
- Speech and Audio:
azure-cognitiveservices-speech,librosa,praat-parselmouth - Computer Vision:
opencv-python,mediapipe - Data Handling:
pandas,numpy
- Authentication:
dj-rest-auth,djangorestframework-simplejwt,django-allauth - Database: SQLite (๊ธฐ๋ณธ๊ฐ), ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ค์ ๊ฐ๋ฅ
- API Documentation:
drf-spectacular - Async/WebSockets:
channels,daphne - Package Management: uv
- Environment Management: python-dotenv
- Python 3.11.9 ์ด์
uvํจํค์ง ๊ด๋ฆฌ์- Azure ๊ณ์ ๋ฐ ์๋ ์๋น์ค ์์ฑ:
- Azure Storage Account (Blob ์ปจํ ์ด๋ ์์ฑ)
- Azure AI Search
- Azure OpenAI Service (๋ชจ๋ธ ๋ฐฐํฌ)
git clone https://github.com/project-ares-interview/ares-backend.git
cd ares-backenduv๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ณ , pyproject.toml์ ๋ช
์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค.
# ๊ฐ์ ํ๊ฒฝ ์์ฑ
uv venv
# ๊ฐ์ ํ๊ฒฝ ํ์ฑํ
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windows
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๊ธฐํ
uv pip sync pyproject.tomlํ๋ก์ ํธ ๋ฃจํธ์ .env.development ํ์ผ์ ์์ฑํ๊ณ ์๋ ๋ด์ฉ์ ์ฑ์๋ฃ์ต๋๋ค.
# Django Settings
SECRET_KEY='your-django-secret-key'
DEBUG=True
# Database (SQLite example)
# DATABASE_URL=sqlite:///db.sqlite3
# Azure Services
AZURE_STORAGE_CONNECTION_STRING='your-storage-connection-string'
AZURE_SEARCH_ENDPOINT='https://your-search-service.search.windows.net'
AZURE_SEARCH_KEY='your-search-admin-key'
AZURE_OPENAI_ENDPOINT='https://your-openai-service.openai.azure.com/'
AZURE_OPENAI_KEY='your-openai-api-key'
AZURE_OPENAI_API_VERSION='2024-02-15-preview' # ์ฌ์ฉํ๋ API ๋ฒ์ ์ ๋ง๊ฒ ์์
AZURE_OPENAI_MODEL='your-deployment-name' # gpt-4o ๋ฑ
AZURE_OPENAI_EMBEDDING_MODEL='your-embedding-deployment-name' # text-embedding-3-small ๋ฑ
# Social Auth (Optional)
GOOGLE_CLIENT_ID='your-google-client-id'
GOOGLE_CLIENT_SECRET='your-google-client-secret'uv run python manage.py migrateuv๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.
uv run daphne -p 8000 ares.asgi:applicationPOST /api/v1/interviews/start/: ์๋ก์ด AI ๋ชจ์ ๋ฉด์ ์ ์์ํฉ๋๋ค.POST /api/v1/interviews/next/: ๋ค์ ๊ผฌ๋ฆฌ ์ง๋ฌธ์ ์์ฒญํฉ๋๋ค.POST /api/v1/interviews/answer/: ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ ์ถํ๊ณ ๋ถ์์ ์์ฒญํฉ๋๋ค.POST /api/v1/interviews/finish/: ๋ฉด์ ์ ์ข ๋ฃํฉ๋๋ค.GET /api/v1/interviews/report/<uuid:session_id>/: ํน์ ๋ฉด์ ์ธ์ ์ ์ต์ข ๋ฆฌํฌํธ๋ฅผ ์กฐํํฉ๋๋ค.POST /api/v1/resume/analyze/: ์ด๋ ฅ์ ํ ์คํธ๋ฅผ ๋ถ์ํฉ๋๋ค.POST /api/v1/auth/registration/: ํ์๊ฐ์POST /api/v1/auth/login/: ๋ก๊ทธ์ธ
์ด ์ธ์๋ ์ด๋ ฅ์, ์๊ธฐ์๊ฐ์, ์ฌ์ฉ์ ํ๋กํ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ค์ํ CRUD ์๋ํฌ์ธํธ๊ฐ
ares/api/views/v1/urls.py์ ์ ์๋์ด ์์ต๋๋ค.์ ์ฒด API ๋ฌธ์๋ ์๋ฒ ์คํ ํ
/api/schema/swagger-ui/๋๋/api/schema/redoc/์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|---|---|
| ๊น์ํ | ๋ฐ์ฉ๋ฝ | ์ฅ์ํธ | ์ฅํ๋ณ | ์ง์ํฌ | ์ต๋ํ |





