Skip to content

Latest commit

ย 

History

695 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

โšพ ์•ผ๊ตฌ ๋ณผ๋ž˜

AI์™€ ํ•จ๊ป˜ ๋ฐฐ์šฐ๊ณ  ์‘์›ํ•˜๋Š” KBO ์ž…๋ฌธ ๋„์šฐ๋ฏธ ์„œ๋น„์Šค

๊ณต๋ณต์ด ์•ฑ ์•„์ด์ฝ˜


๐Ÿ“– About The Project

์•ผ๊ตฌ ๋ณผ๋ž˜๋ž€?

์•ผ๊ตฌ๋Š” ๊ทœ์น™, ์šฉ์–ด, ์‘์› ๋ฌธํ™”, ๊ตฌ๋‹จ ์ •๋ณด ๋“ฑ ๋‹ค์–‘ํ•œ ์ง„์ž… ์žฅ๋ฒฝ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์•ผ๊ตฌ ๋ณผ๋ž˜๋Š” AI ์บ๋ฆญํ„ฐ ๊ธฐ๋ฐ˜์˜ ์•ผ๊ตฌ ์ž…๋ฌธ ๋„์šฐ๋ฏธ ์„œ๋น„์Šค๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ์•ผ๊ตฌ๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‘์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ Problem

  • ์•ผ๊ตฌ ๊ทœ์น™๊ณผ ์šฉ์–ด๊ฐ€ ์–ด๋ ต๋‹ค.
  • ์‘์›ํ•  ๊ตฌ๋‹จ์„ ์„ ํƒํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
  • ์ง๊ด€ ์ •๋ณด๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค.
  • ํŒฌ๋“ค๊ณผ ์†Œํ†ตํ•  ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋‹ค.

๐Ÿ’ก Solution

  • AI ์•ผ๊ตฌ ์„ค๋ช… ์ฑ—๋ด‡ ์ œ๊ณต
  • ๊ตฌ๋‹จ๋ณ„ ํŒ€ ์ฑ„ํŒ…๋ฐฉ ์ œ๊ณต
  • ์ง๊ด€ ๋ฐ ๊ฒฝ๊ธฐ ๊ธฐ๋ก ๊ธฐ๋Šฅ ์ œ๊ณต
  • ๊ตฌ์žฅ ์ •๋ณด ํ†ตํ•ฉ ์ œ๊ณต

โœจ Features

๐Ÿค– AI ์•ผ๊ตฌ ๋„์šฐ๋ฏธ ๐Ÿ’ฌ ํŒ€ ์ฑ„ํŒ…๋ฐฉ ๐Ÿ“… ๋‚˜๋งŒ์˜ ๊ธฐ๋ก
์•ผ๊ตฌ ๊ทœ์น™ ์„ค๋ช…
์•ผ๊ตฌ ์šฉ์–ด ์„ค๋ช…
๊ฒฝ๊ธฐ ์ƒํ™ฉ ํ•ด์„ค
์ดˆ๋ณด์ž ๋งž์ถค ๋‹ต๋ณ€
๊ตฌ๋‹จ๋ณ„ ์ฑ„ํŒ…๋ฐฉ
์‹ค์‹œ๊ฐ„ ์‘์›
ํŒฌ ์ปค๋ฎค๋‹ˆํ‹ฐ
์—ฐ์† ๊ธฐ๋ก ๋„์ „
์ง๊ด€ ๊ธฐ๋ก ์บ˜๋ฆฐ๋”
๊ฒฝ๊ธฐ ๊ธฐ๋ก ์กฐํšŒ
๐Ÿง‘ ์•ผ๊ตฌ์ง๊ฟ ๐ŸŸ๏ธ ๊ตฌ์žฅ์ •๋ณด โš™๏ธ ํ™˜๊ฒฝ์„ค์ •
์„ฑ๋ณ„ ์„ค์ •
๋‹‰๋„ค์ž„ ์„ค์ •
์ถœ์„ ์ฒดํฌ
๊พธ๋ฏธ๊ธฐ
์‘์›ํ•˜๊ธฐ
ํ€ด์ฆˆ ํ’€๊ธฐ
๊ตฌ์žฅ ์•ˆ๋‚ด
๋จน๊ฑฐ๋ฆฌ ์ •๋ณด
์ง€์—ญ ์ •๋ณด
๊ตํ†ต ์ •๋ณด
๋‚ด ์ •๋ณด ๊ด€๋ฆฌ
์‘์›๊ตฌ๋‹จ ๋ณ€๊ฒฝ
์•Œ๋ฆผ ์„ค์ •

๐ŸŽฌ Demo

VIEW 1 2 3
๋กœ๊ทธ์ธ ๋ฐ ์‹œ์ž‘ํ•˜๊ธฐ ํšŒ์›๊ฐ€์ž… ๋กœ๊ทธ์ธ ์‘์›๊ตฌ๋‹จ ์„ ํƒ
๋ฉ”์ธ ์„œ๋น„์Šค ํ™ˆ ํ™”๋ฉด AI ๋„์šฐ๋ฏธ -
-
์ฑ„ํŒ…๋ฐฉ ์ฑ„ํŒ…๋ฐฉ ๋ฉ”์ธ - -
- -
๋‚˜๋งŒ์˜ ๊ธฐ๋ก ์—ฐ์† ๊ธฐ๋ก ๋„์ „ ์ง๊ด€ ๊ธฐ๋ก ์บ˜๋ฆฐ๋” ๊ฒฝ๊ธฐ ๊ธฐ๋ก ์กฐํšŒ
์•ผ๊ตฌ์ง๊ฟ ์„ฑ๋ณ„ ยท ๋‹‰๋„ค์ž„ ์„ค์ • ์•ผ๊ตฌ์ง๊ฟ ๋ฉ”์ธํ™”๋ฉด ๊พธ๋ฏธ๊ธฐ
๊ตฌ์žฅ์ •๋ณด ๊ตฌ์žฅ ์•ˆ๋‚ด ๋จน๊ฑฐ๋ฆฌ ์ •๋ณด ์ง€์—ญ ์ •๋ณด
ํ™˜๊ฒฝ์„ค์ • ํ™˜๊ฒฝ์„ค์ • ๋‚ด ์ •๋ณด ์‘์›๊ตฌ๋‹จ ๋ณ€๊ฒฝ

๐Ÿ› ๏ธ Tech Stack

Category Stack
๐ŸŽจ Frontend React 19, TypeScript, Vite 6, Capacitor 8 โ€” ์›นยท์•ˆ๋“œ(frontend) / iOS(frontend-ios) ๋ถ„๋ฆฌ
๐ŸงŠ 3D ยท ์บ๋ฆญํ„ฐ three.js (3D ์ฑ—๋ด‡ ์บ๋ฆญํ„ฐ), Live2D Cubism (ํŒ€ ์„ ํƒ Live 2D), sql.js (๋กœ์ปฌ SQLite)
โš™๏ธ Backend FastAPI, Python, Cloud Run (asia-northeast3)
๐Ÿค– AI ยท ์Œ์„ฑ Gemini 3.1 Flash-Lite (Vertex AI), ElevenLabs (๊ตฌ๋‹จ ๋ณด์ด์Šค + ๊ธ€์ž ํƒ€์ž„์Šคํƒฌํ”„), Azure Speech (TTS ยท viseme)
๐Ÿ—„๏ธ Database PostgreSQL + pgvector (Supabase), MongoDB Atlas, sql.js (ํด๋ผ์ด์–ธํŠธ)
๐Ÿ—บ๏ธ Maps ยท Push ์นด์นด์˜ค๋งต (๊ตฌ์žฅ์ •๋ณด), FCM / APNs (ํ‘ธ์‹œ ์•Œ๋ฆผ)
๐Ÿ” Authentication JWT, Google ยท Kakao ยท Naver OAuth
โ˜๏ธ Deploy ยท CI Firebase Hosting (FE), Cloud Run (BE), GitHub Actions, Cloud Scheduler (ํฌ๋กค)
๐Ÿ“ Version Control Git, GitHub

๐Ÿš€ ํ†ตํ•ฉ ์‹คํ–‰ ๋ฐฉ๋ฒ•

๋กœ์ปฌ์—์„œ ๋ฐฑ์—”๋“œ ยท ํ”„๋ก ํŠธ ยท (์„ ํƒ) ํฌ๋กค๋Ÿฌ๋ฅผ ํ•จ๊ป˜ ๋„์šฐ๋Š” ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ ์ƒ์„ธ๋Š” ํ•˜๋‹จ ๋ฌธ์„œ ๋งํฌ ์ฐธ๊ณ .

์‚ฌ์ „ ์ค€๋น„

  • Python 3.11+, Node.js 20+

  • ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ 2๊ฐœ (๋‘˜ ๋‹ค git ์ œ์™ธ โ€” ๊ฐ’์€ ํŒ€ ๋น„๊ณต๊ฐœ ์ฑ„๋„๋กœ ๊ณต์œ )

    ๋ฃจํŠธ .env (๋ฐฑ์—”๋“œ ยท ํฌ๋กค๋Ÿฌ ๊ณต์šฉ)

    MONGO_URI=...            # MongoDB Atlas (๋™์  ๊ธฐ๋ก)
    MONGO_DB=kbo
    DATABASE_URL=...         # PostgreSQL (Supabase)
    JWT_SECRET=...           # ๋กœ๊ทธ์ธ ํ† ํฐ ์„œ๋ช…
    ELEVENLABS_KEY=...       # ๊ตฌ๋‹จ ๋ณด์ด์Šค TTS
    AZURE_SPEECH_KEY=...     # TTS ยท viseme (ํด๋ฐฑ)
    AZURE_SPEECH_REGION=...
    KMA_API_KEY=...          # ๊ตฌ์žฅ ๋‚ ์”จ(๊ธฐ์ƒ์ฒญ)
    # Gemini/Vertex๋Š” GCP ์„œ๋น„์Šค๊ณ„์ •(ADC) ๋˜๋Š” ํ‚ค๋กœ ์ธ์ฆ
    

    frontend/.env (ํ”„๋ก ํŠธ ๋นŒ๋“œ ๋ณ€์ˆ˜)

    VITE_KAKAO_MAP_KEY=...    # ์นด์นด์˜ค๋งต(๊ตฌ์žฅ์ •๋ณด)
    VITE_GOOGLE_CLIENT_ID=... # ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ
    

1๏ธโƒฃ ๋ฐฑ์—”๋“œ โ€” FastAPI (ํฌํŠธ 8000)

pip install -r services/api/requirements.txt
python services/api/setup_db.py        # PostgreSQL ํ…Œ์ด๋ธ” 1ํšŒ ์ƒ์„ฑ
uvicorn main:app --app-dir services/api --port 8000

โ†’ http://127.0.0.1:8000/docs (Swagger์—์„œ ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ)

2๏ธโƒฃ ํ”„๋ก ํŠธ์—”๋“œ โ€” React + Vite (ํฌํŠธ 5000)

cd frontend
npm install
npm run dev

โ†’ http://127.0.0.1:5000 (๋ฐฑ์—”๋“œ๋กœ ํ”„๋ก์‹œ)

3๏ธโƒฃ (์„ ํƒ) ๋ฐ์ดํ„ฐ ํฌ๋กค๋Ÿฌ โ€” KBO ์ผ์ผ ์ˆ˜์ง‘

pip install -r services/crawler/requirements.txt
python services/crawler/kbo_crawler.py     # ํฌ๋กค โ†’ data/crawling/<๊ธฐ์ค€์ผ>/*.json
python services/crawler/ingest_mongo.py    # โ†’ MongoDB ์ ์žฌ(upsert)
python services/crawler/crawl_profiles.py  # ์„ ์ˆ˜ ํ”„๋กœํ•„(์‹ ๊ทœ๋งŒ)

์šด์˜ ํ™˜๊ฒฝ์€ Cloud Scheduler๊ฐ€ ๋งค์ผ 09:00 ์ž๋™ ์ˆ˜์ง‘. ์ •์  ์ •๋ณด(teams ยท glossary ยท persona ๋“ฑ)๋Š” DB ์ ์žฌ ์ „์—” ๋นˆ ์‘๋‹ต์ž…๋‹ˆ๋‹ค.

๐Ÿ“ฑ ์•ฑ(iOS ยท Android) ๋นŒ๋“œ

Capacitor ๊ธฐ๋ฐ˜. ๋นŒ๋“œ ยท ์‹คํ–‰ ์ƒ์„ธ๋Š” frontend/README.md ์ฐธ๊ณ .

๋ชจ๋“ˆ ์ƒ์„ธ ๋ฌธ์„œ
๋ฐฑ์—”๋“œ API services/api/README.md
ํ”„๋ก ํŠธ์—”๋“œ frontend/README.md
๋ฐ์ดํ„ฐ ํฌ๋กค๋Ÿฌ services/crawler/README.md
์บ๋ฆญํ„ฐ ๋ชจ๋ธ model/README.md

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ํด๋ผ์ด์–ธํŠธ  ยท  React 19 + Vite + Capacitor                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ยท ์›นยท์•ˆ๋“œ: frontend      ยท iOS: frontend-ios (ํด๋” ๋ถ„๋ฆฌ)            โ”‚
โ”‚ ยท ์ฑ— ยท ์Œ์„ฑ์žฌ์ƒ ยท 3D ์ฑ—๋ด‡(three.js) ยท ํŒ€ ์„ ํƒ Live2D                โ”‚
โ”‚ ยท ๊ตฌ์žฅ์ •๋ณด(์นด์นด์˜ค๋งต) ยท ๋กœ์ปฌ SQLite(sql.js ยท IndexedDB)              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                   โ”‚
                                   โ–ผ   Firebase Hosting (์ •์  + rewrite)
                                   โ”‚
                                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Cloud Run ยท FastAPI  โ€”  kbo-api (asia-northeast3)                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ยท RAG ๊ฒ€์ƒ‰ + ์ž„๋ฒ ๋”ฉ ยท ํŽ˜๋ฅด์†Œ๋‚˜ ยท ์™„๋ฃŒ์œจ ๊ณ„์ธก                         โ”‚
โ”‚ ยท /chat  /tts  /auth  /quiz  /board  /attendance  /weather โ€ฆ       โ”‚
โ”‚ ยท dev push ์‹œ ์ž๋™ ๋ฐฐํฌ                                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                   โ”‚
                                   โ–ผ   (๋ฐฑ์—”๋“œ ์˜์กด์„ฑ)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ์„œ๋ฒ„ ์ €์žฅ์†Œ                                                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ยท Supabase PostgreSQL + pgvector                                   โ”‚
โ”‚ ยท MongoDB (KBO ๊ธฐ๋ก)                                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ์™ธ๋ถ€ AI ยท ์Œ์„ฑ                                                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ยท Gemini 3.1 Flash-Lite (Vertex AI)  ยท  ElevenLabs (๊ตฌ๋‹จ ๋ณด์ด์Šค)    โ”‚
โ”‚ ยท Azure Speech โ€” TTS ยท viseme (ํด๋ฐฑ)                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ์™ธ๋ถ€ ์—ฐ๋™                                                           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ยท OAuth : Google ยท Kakao ยท Naver  ยท  ์นด์นด์˜ค๋งต (๊ตฌ์žฅ์ •๋ณด)            โ”‚
โ”‚ ยท ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ  ยท  FCM / APNs ํ‘ธ์‹œ                                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ํฌ๋กค ํŒŒ์ดํ”„๋ผ์ธ                                                     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ยท Cloud Scheduler (๋งค์ผ 09:00)  โ†’  ํฌ๋กค๋Ÿฌ  โ†’  MongoDB               โ”‚
โ”‚ ยท KBO ๊ฒŒ์ž„์„ผํ„ฐ : ์ˆœ์œ„ยท์„ ์ˆ˜๊ธฐ๋กยท์ผ์ •ยท๋ผ์ธ์—…ยท๋ฐ•์Šค์Šค์ฝ”์–ด                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Architecture


๐Ÿ“‚ Project Structure

๐Ÿ“ฆ project
โ”œโ”€ ๐Ÿ“‚ frontend                # ์›น ยท ์•ˆ๋“œ โ€” React 19 + Vite + Capacitor
โ”‚  โ”œโ”€ ๐Ÿ“‚ public               #   3D ๋ชจ๋ธ(.glb) ยท Live2D(/live2d/ball.model3.json)
โ”‚  โ”œโ”€ ๐Ÿ“‚ android              #   Capacitor ์•ˆ๋“œ ํ”„๋กœ์ ํŠธ
โ”‚  โ””โ”€ ๐Ÿ“‚ src
โ”‚     โ”œโ”€ ๐Ÿ“‚ components        #   MainViewV2 ยท Character3D ยท LatudiCharacter ยท Stadium* โ€ฆ
โ”‚     โ”œโ”€ ๐Ÿ“‚ data ยท hooks ยท types
โ”‚     โ”œโ”€ ๐Ÿ“œ App.tsx ยท main.tsx ยท api.ts ยท appSettings.ts
โ”‚     โ”œโ”€ ๐Ÿ“œ db.ts(๋กœ์ปฌ SQLiteยทsql.js) ยท lipSync.ts ยท push.ts
โ”‚     โ””โ”€ ๐Ÿ“œ theme.css
โ”œโ”€ ๐Ÿ“‚ frontend-ios            # iOS ์ „์šฉ ํ”„๋ก ํŠธ (ํด๋” ๋ถ„๋ฆฌ)
โ”œโ”€ ๐Ÿ“‚ services
โ”‚  โ”œโ”€ ๐Ÿ“‚ api                  # FastAPI ๋ฐฑ์—”๋“œ (Cloud Run)
โ”‚  โ”‚   ยท main ยท auth ยท chat ยท tts ยท quiz ยท board ยท attendance ยท my_records
โ”‚  โ”‚   ยท visits ยท tamagotchi ยท push ยท weather ยท info ยท internal
โ”‚  โ”‚   ยท llm ยท embeddings ยท embed_chunks ยท pcache ยท personalization ยท session_metrics ยท fcm
โ”‚  โ”‚   ยท db.py / db_pg.py ยท schema.sql ยท board/push_schema.sql ยท setup_db.py
โ”‚  โ””โ”€ ๐Ÿ“‚ crawler              # KBO ๋ฐ์ผ๋ฆฌ ํฌ๋กค๋Ÿฌ
โ”‚      ยท kbo_crawler ยท ingest_mongo ยท crawl_profiles ยท crawl_schedule ยท crawl_lineup ยท notify_games
โ”œโ”€ ๐Ÿ“‚ data
โ”‚  โ”œโ”€ ๐Ÿ“‚ crawling             #   ์ผ๋ณ„ ํฌ๋กค ๋คํ”„ (์›๋ณธ=MongoDB ยท git ์ œ์™ธ)
โ”‚  โ””โ”€ ๐Ÿ“‚ knowledge-base       #   KBO ๋ฌธํ™”ยท์‘์› ์ฒญํฌ ์ ์žฌ SQL
โ”œโ”€ ๐Ÿ“‚ scripts                 # ์šด์˜ ์œ ํ‹ธ SQL/py (๊ตฌ์žฅ์ •๋ณด ยท ๋‹ค๋งˆ๊ณ ์น˜ ๋“ฑ)
โ”œโ”€ ๐Ÿ“‚ model                   # ์บ๋ฆญํ„ฐ 3D ๋ชจ๋ธ ์•ˆ๋‚ด
โ”œโ”€ ๐Ÿ“‚ docs                    # ํ‰๊ฐ€ ๋ฆฌํฌํŠธ ยท ์•„ํ‚คํ…์ฒ˜ ยท ํŽ˜๋ฅด์†Œ๋‚˜ ์นด๋“œ ยท ๊ฐ€์ด๋“œ
โ”œโ”€ ๐Ÿ“‚ .github/workflows       # CI/CD โ€” deploy ยท ios-build ยท ios-testflight
โ”œโ”€ ๐Ÿ“‚ apps ยท infra ยท integrations   # ์ดˆ๊ธฐ ๋ชจ๋…ธ๋ ˆํฌ ์Šค์บํด๋“œ (placeholder)
โ”œโ”€ ๐Ÿ“œ requirements.txt ยท Procfile ยท package-lock.json
โ”œโ”€ ๐Ÿ“œ README.md
โ””โ”€ ๐Ÿ“œ .env                    # git ์ œ์™ธ (๊ฐ’์€ ํŒ€ ์ฑ„๋„ ๊ณต์œ )

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages