Skip to content

rktclgh/VlaInter_FE

Repository files navigation

๐ŸŽค VlaInter

banner

AI๊ฐ€ ๋ฉด์ ‘๊ด€์ด ๋˜๋Š” ์ˆœ๊ฐ„

๊ธฐ์ˆ  ๋ฉด์ ‘๋ถ€ํ„ฐ ์ด๋ ฅ์„œ ๊ธฐ๋ฐ˜ ๊ฐœ์ธํ™” ๋ฉด์ ‘, ํ•™์ƒ ํ•™์Šต ํ๋ฆ„๊นŒ์ง€ ์—ฐ๊ฒฐํ•˜๋Š” AI ์ธํ„ฐ๋ทฐ ํ”Œ๋žซํผ


๐Ÿ’ก Why VlaInter?

"์ด ์งˆ๋ฌธ์ด ์ •๋ง ๋‚ด ๊ฒฝํ—˜์„ ๋ณด๊ณ  ๋‚˜์˜จ ๊ฑธ๊นŒ?"

๋งŽ์€ ๋ฉด์ ‘ ์ค€๋น„ ์„œ๋น„์Šค๋Š” ๋‹จ์ˆœํ•œ ์งˆ๋ฌธ ์ƒ์„ฑ์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค.
VlaInter๋Š” ์‹ค์ œ ์ค€๋น„ ํ๋ฆ„์ด ๋Š๊ธฐ์ง€ ์•Š๋„๋ก ์งˆ๋ฌธ ์ƒ์„ฑ, ๋‹ต๋ณ€ ํ‰๊ฐ€, ๋ฌธ์„œ ๋ถ„์„, ํ•™์Šต ๋ณต๊ธฐ๊นŒ์ง€ ํ•œ ํ๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ์ˆ  ์Šคํƒ ๊ธฐ๋ฐ˜ ์‹ค์ „ ๋ฉด์ ‘
  • ์ด๋ ฅ์„œ/์ž๊ธฐ์†Œ๊ฐœ์„œ/ํฌํŠธํด๋ฆฌ์˜ค ๊ธฐ๋ฐ˜ ๊ฐœ์ธํ™” ์งˆ๋ฌธ
  • ํ•™์ƒ ๊ณผ๋ชฉ/์ž๋ฃŒ ๊ธฐ๋ฐ˜ ์š”์•ฝ, ์‹œํ—˜, ์˜ค๋‹ต๋…ธํŠธ
  • AI ๋ชจ๋ฒ” ๋‹ต์•ˆ ์ƒ์„ฑ๊ณผ ํ”ผ๋“œ๋ฐฑ
  • ์„ธ์…˜ ์ €์žฅ ๋ฐ ๋ณต๊ธฐ ๊ธฐ๋Šฅ

โœจ Core Features

1๏ธโƒฃ ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋ชจ๋“œ

  • ์ง๋ฌด์™€ ๊ธฐ์ˆ  ์Šคํƒ ๊ธฐ๋ฐ˜ ์งˆ๋ฌธ ์ƒ์„ฑ
  • ๋‹ต๋ณ€ ์ œ์ถœ ํ›„ AI ๋ชจ๋ฒ” ๋‹ต์•ˆ๊ณผ ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต
  • ์ €์žฅ ์งˆ๋ฌธ๊ณผ ์งˆ๋ฌธ ์„ธํŠธ ๊ด€๋ฆฌ
  • ์„ธ์…˜ ๊ฒฐ๊ณผ์™€ ์ด๋ ฅ ์กฐํšŒ

2๏ธโƒฃ ์ด๋ ฅ์„œ ๊ธฐ๋ฐ˜ ๊ฐœ์ธํ™” ๋ฉด์ ‘

  • ์ด๋ ฅ์„œ, ์ž๊ธฐ์†Œ๊ฐœ์„œ, ํฌํŠธํด๋ฆฌ์˜ค ์—…๋กœ๋“œ
  • ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ์งˆ๋ฌธ ์ƒ์„ฑ๊ณผ ๋ฉด์ ‘ ์„ธ์…˜ ์‹œ์ž‘
  • ๊ฒฝํ—˜ ์ค‘์‹ฌ ๋งž์ถค ์งˆ๋ฌธ ์—ฐ์Šต
  • ๋‹ต๋ณ€ ํ‰๊ฐ€์™€ ์ด๋ ฅ ๊ด€๋ฆฌ

3๏ธโƒฃ ํ•™์ƒ ํ•™์Šต ๋ชจ๋“œ

  • ๊ณผ๋ชฉ ์ƒ์„ฑ๊ณผ ํ•™์  ์ •๋ณด ๊ธฐ๋ฐ˜ ํ•™์Šต ์ง„์ž…
  • ๊ฐ•์˜ ์ž๋ฃŒ ์—…๋กœ๋“œ์™€ ์œ ํŠœ๋ธŒ ์ž๋ฃŒ ์š”์•ฝ
  • ์‹œํ—˜ ์„ธ์…˜ ์ƒ์„ฑ๊ณผ ์ œ์ถœ
  • ์˜ค๋‹ต๋…ธํŠธ, ์š”์•ฝ ๋ฌธ์„œ, ๋ณต์Šต ํ๋ฆ„ ์ œ๊ณต

4๏ธโƒฃ ์šด์˜ ๋ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

  • ๊ด€๋ฆฌ์ž ์ฝ˜์†”
  • ์งˆ๋ฌธ/์นดํ…Œ๊ณ ๋ฆฌ/์‚ฌ์ดํŠธ ์„ค์ • ์šด์˜
  • ํฌ์ธํŠธ ์ถฉ์ „๊ณผ ํŒจ์น˜๋…ธํŠธ ํ™•์ธ
  • ์‚ฌ์šฉ์ž ๋ฌธ์˜ ๋ฐ ๋ฆฌํฌํŠธ ์ ‘์ˆ˜ ํ๋ฆ„

VlaInter Frontend

VlaInter ํ”„๋ก ํŠธ์—”๋“œ๋Š” React + Vite ๊ธฐ๋ฐ˜ SPA๋กœ, ์ทจ์—… ์ค€๋น„์ƒ์šฉ AI ๋ฉด์ ‘ ์—ฐ์Šต ํ๋ฆ„๊ณผ ๋Œ€ํ•™์ƒ์šฉ ํ•™์Šต ๋ณด์กฐ ํ๋ฆ„์„ ํ•˜๋‚˜์˜ ์•ฑ ์•ˆ์—์„œ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ™”๋ฉด ์˜ˆ์‹œ

๋ฉ”์ธ ๋žœ๋”ฉ

VlaInter landing

๋กœ๊ทธ์ธ ํ™”๋ฉด

VlaInter login

๋Œ€ํ•™์ƒ ๋žœ๋”ฉ

VlaInter campus

์œ„ ์ด๋ฏธ์ง€๋Š” ๋กœ์ปฌ Vite ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๊ธฐ์ค€ ๊ณต๊ฐœ ํ™”๋ฉด์„ ์บก์ฒ˜ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ ์†Œ๊ฐœ

  • ์ทจ์ค€์ƒ ๋ชจ๋“œ ๋žœ๋”ฉ, ์„œ๋น„์Šค ์†Œ๊ฐœ, ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ, ์นด์นด์˜ค ๋กœ๊ทธ์ธ
  • ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ๋ชจ์˜๋ฉด์ ‘ ์‹œ์ž‘, ๊ธฐ์ˆ  ์งˆ๋ฌธ ์—ฐ์Šต, ์„ธ์…˜ ๊ฒฐ๊ณผ/ํžˆ์Šคํ† ๋ฆฌ ์กฐํšŒ
  • ์ €์žฅ ์งˆ๋ฌธ, ์งˆ๋ฌธ ์„ธํŠธ, ๋ฌธ์„œ ์—…๋กœ๋“œ, ํฌ์ธํŠธ ์ถฉ์ „ UI
  • ๋Œ€ํ•™์ƒ ๋ชจ๋“œ ๋žœ๋”ฉ, ๊ณผ๋ชฉ ๊ด€๋ฆฌ, ์ž๋ฃŒ ์—…๋กœ๋“œ, ์‹œํ—˜ ์„ธ์…˜, ์˜ค๋‹ต๋…ธํŠธ
  • ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ํ”„๋กœํ•„, ์„œ๋น„์Šค ๋ชจ๋“œ, ํ•™์  ์ •๋ณด, Gemini API Key, ํฌ์ธํŠธ ์ด๋ ฅ ๊ด€๋ฆฌ
  • ๊ด€๋ฆฌ์ž ์ฝ˜์†”์—์„œ ํšŒ์›, ์งˆ๋ฌธ/์นดํ…Œ๊ณ ๋ฆฌ, ์šด์˜ ์„ค์ •, ํŒจ์น˜๋…ธํŠธ, KPI ํ™•์ธ

๊ธฐ์ˆ  ์Šคํƒ ์†Œ๊ฐœ

๊ตฌ๋ถ„ ์‚ฌ์šฉ ๊ธฐ์ˆ 
Framework React 19, Vite 7
Routing React Router DOM 6
UI / Motion CSS, Tailwind ์œ ํ‹ธ๋ฆฌํ‹ฐ ์Šคํƒ€์ผ, Framer Motion
Utilities html2canvas, jsPDF, react-icons
Auth Integration Cookie-based session, Kakao OAuth
Build / Lint Vite, ESLint

ํ™”๋ฉด / ์„œ๋น„์Šค ๊ตฌ์กฐ

๊ตฌ์—ญ ์ฃผ์š” ๊ฒฝ๋กœ ์„ค๋ช…
๊ณต๊ฐœ ํ™”๋ฉด /, /campus, /about, /terms, /privacy ๋žœ๋”ฉ๊ณผ ์†Œ๊ฐœ, ์•ฝ๊ด€/์ •์ฑ…
์ธ์ฆ ํ™”๋ฉด /login, /join, /password/forgot, /auth/kakao/callback ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ
๊ณตํ†ต ์ง„์ž…์  /content, /content/service-mode, /content/mypage ๋กœ๊ทธ์ธ ํ›„ ์„œ๋น„์Šค ๋ชจ๋“œ ๋ถ„๊ธฐ์™€ ๊ณตํ†ต ์„ค์ •
์ทจ์ค€์ƒ ๋ชจ๋“œ /content/interview, /content/tech-practice, /content/files, /content/question-sets ๋“ฑ ๋ฉด์ ‘/์งˆ๋ฌธ/๋ฌธ์„œ/๊ฒฐ์ œ ํ๋ฆ„
๋Œ€ํ•™์ƒ ๋ชจ๋“œ /content/student, /content/student/courses/:courseId, /content/student/sessions/:sessionId ๊ณผ๋ชฉ/์ž๋ฃŒ/์‹œํ—˜/์˜ค๋‹ต๋…ธํŠธ
๊ด€๋ฆฌ์ž /content/admin ์šด์˜์ž ์ „์šฉ ์ฝ˜์†”

์‚ฌ์šฉ์ž ํ๋ฆ„

  1. ๊ณต๊ฐœ ๋žœ๋”ฉ ๋˜๋Š” ๋กœ๊ทธ์ธ ํ™”๋ฉด์—์„œ ์ธ์ฆ
  2. /content ์ง„์ž… ์‹œ ํ”„๋กœํ•„์˜ serviceMode๋ฅผ ํ™•์ธ
  3. ์ทจ์ค€์ƒ์ด๋ฉด /content/interview, ๋Œ€ํ•™์ƒ์ด๋ฉด /content/student, ๋ฏธ์„ ํƒ์ด๋ฉด /content/service-mode๋กœ ์ด๋™
  4. ์ทจ์ค€์ƒ ์ฃผ์š” ํ™”๋ฉด์€ ์ผ๋ถ€ ๊ธฐ๋Šฅ์—์„œ Gemini API Key ๋“ฑ๋ก์ด ํ•„์š”

๋น ๋ฅธ ์‹œ์ž‘

git pull ๋˜๋Š” ํด๋ก  ์งํ›„ ์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋…ธ๋ ˆํฌ ๋ฃจํŠธ์—์„œ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด ๋จผ์ € cd vlainter_FE/vlainter๋กœ ์ด๋™ํ•œ ๋’ค ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ์ค€๋น„

cp .env.example .env

ํ•„์ˆ˜ ํ•ญ๋ชฉ:

  • VITE_API_BASE_URL
  • VITE_KAKAO_CLIENT_ID
  • VITE_KAKAO_AUTH_URI
  • VITE_KAKAO_REDIRECT_URI

์„ ํƒ ํ•ญ๋ชฉ:

  • VITE_PORTONE_PG

2. ์˜์กด์„ฑ ์„ค์น˜

npm install

3. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

npm run dev

๊ธฐ๋ณธ ๊ฐœ๋ฐœ ์ฃผ์†Œ๋Š” http://localhost:5173์ž…๋‹ˆ๋‹ค.

4. ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ํ™•์ธ

npm run build
npm run preview

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ฐ€์ด๋“œ

๋ณ€์ˆ˜ ์„ค๋ช…
VITE_API_BASE_URL ๋ฐฑ์—”๋“œ API ๊ธฐ๋ณธ ์ฃผ์†Œ. ๊ธฐ๋ณธ๊ฐ’์€ http://localhost:8080
VITE_KAKAO_CLIENT_ID ์นด์นด์˜ค OAuth ํด๋ผ์ด์–ธํŠธ ID
VITE_KAKAO_AUTH_URI ์นด์นด์˜ค ์ธ์ฆ ํŽ˜์ด์ง€ ์ฃผ์†Œ
VITE_KAKAO_REDIRECT_URI ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์™„๋ฃŒ ํ›„ ๋ณต๊ท€ํ•  ํ”„๋ก ํŠธ ์ฃผ์†Œ
VITE_PORTONE_PG ํฌ์ธํŠธ ๊ฒฐ์ œ์— ์‚ฌ์šฉํ•  PG ์ฝ”๋“œ. ๋ฏธ์„ค์ • ์‹œ html5_inicis

API ์—ฐ๋™ ๋ฐฉ์‹

  • ๋ชจ๋“  API ์š”์ฒญ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ VITE_API_BASE_URL์„ ๊ธฐ์ค€์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์ฆ ๋ฐฉ์‹์€ Bearer token ํ—ค๋”๊ฐ€ ์•„๋‹ˆ๋ผ credentials: include ๊ธฐ๋ฐ˜ ์ฟ ํ‚ค ์„ธ์…˜์ž…๋‹ˆ๋‹ค.
  • 401์ด ๋ฐœ์ƒํ•˜๋ฉด /api/auth/refresh๋ฅผ ํ†ตํ•ด ์„ธ์…˜ ๊ฐฑ์‹ ์„ ํ•œ ๋ฒˆ ๋” ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณดํ˜ธ ํ™”๋ฉด ์ง„์ž… ์‹œ BrowserSessionGuard๊ฐ€ ํ”„๋กœํ•„ ์กฐํšŒ๋กœ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ทจ์ค€์ƒ ์ฃผ์š” ํ™”๋ฉด์€ GeminiApiKeyGuard๊ฐ€ ํ•œ ๋ฒˆ ๋” ํ™•์ธํ•˜๋ฏ€๋กœ, ๋กœ๊ทธ์ธ ํ›„์—๋„ Gemini API Key ๋ฏธ๋“ฑ๋ก ์ƒํƒœ๋ฉด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src
โ”œโ”€โ”€ assets        # ๋กœ๊ณ , ์•„์ด์ฝ˜, ์ด๋ฏธ์ง€
โ”œโ”€โ”€ components    # ๊ณตํ†ต UI, Guard, Sidebar, Modal
โ”œโ”€โ”€ hooks         # ์žฌ์‚ฌ์šฉ ํ›…
โ”œโ”€โ”€ lib           # API ํด๋ผ์ด์–ธํŠธ, ์„ธ์…˜/๋„๋ฉ”์ธ ์œ ํ‹ธ
โ”œโ”€โ”€ pages
โ”‚   โ”œโ”€โ”€ auth      # ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ
โ”‚   โ”œโ”€โ”€ content   # ์ทจ์ค€์ƒ/ํ•™์ƒ/๊ด€๋ฆฌ์ž ๋ณดํ˜ธ ํ™”๋ฉด
โ”‚   โ””โ”€โ”€ *.jsx     # ๊ณต๊ฐœ ํŽ˜์ด์ง€, ์ •์ฑ… ํŽ˜์ด์ง€
โ”œโ”€โ”€ App.jsx       # ์ „์ฒด ๋ผ์šฐํŒ… ์ •์˜
โ””โ”€โ”€ main.jsx      # ์•ฑ ์—”ํŠธ๋ฆฌํฌ์ธํŠธ

๊ฒ€์ฆ ๋ฐฉ๋ฒ•

npm run lint
npm run build

์ถ”๊ฐ€ ์ˆ˜๋™ ๊ฒ€์ฆ ๊ถŒ์žฅ ํ•ญ๋ชฉ:

  1. / ๋žœ๋”ฉ ๋กœ๋“œ
  2. /login ํผ ๋ Œ๋”๋ง
  3. /campus ๋žœ๋”ฉ ๋กœ๋“œ
  4. ๋กœ๊ทธ์ธ ํ›„ /content ์„œ๋น„์Šค ๋ชจ๋“œ ๋ถ„๊ธฐ ํ™•์ธ
  5. Gemini API Key ๋ฏธ๋“ฑ๋ก ์ƒํƒœ์—์„œ ์ทจ์ค€์ƒ ๋ณดํ˜ธ ํ™”๋ฉด ์ง„์ž… ์ œ์•ฝ ํ™•์ธ

ํ˜„์žฌ ์ œ์•ฝ ์‚ฌํ•ญ

  • ํ”„๋ก ํŠธ ์ „์šฉ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ๋Š” ์•„์ง ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ž๋™ ๊ฒ€์ฆ ๊ธฐ์ค€์€ ํ˜„์žฌ lint + build ์ค‘์‹ฌ์ž…๋‹ˆ๋‹ค.
  • ๋ณดํ˜ธ ํ™”๋ฉด์„ ๊นŠ๊ฒŒ ๊ฒ€์ฆํ•˜๋ ค๋ฉด ๋ฐฑ์—”๋“œ๊ฐ€ ํ•จ๊ป˜ ์‹คํ–‰ ์ค‘์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž ํ™”๋ฉด ์บก์ฒ˜๋‚˜ ๊ณต์œ  ์‹œ ํšŒ์› ์ •๋ณด, ์ ‘์† ์ด๋ ฅ, ๊ฒฐ์ œ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ ๋งˆ์Šคํ‚นํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

  • ๋ผ์šฐํŒ…์˜ ์ค‘์‹ฌ์€ src/App.jsx์ž…๋‹ˆ๋‹ค.
  • /content ์ง„์ž… ๋ถ„๊ธฐ ๋กœ์ง์€ src/pages/content/ContentEntryPage.jsx์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ํด๋ผ์ด์–ธํŠธ์™€ refresh ๋กœ์ง์€ src/lib/apiClient.js์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

About

VlaInter's FrontEndRepository

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages