Skip to content

Q-tee-project/backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

163 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Qt Project Backend

AI 기반 ꡐ윑 ν”Œλž«νΌμ„ μœ„ν•œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ λ°±μ—”λ“œ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

MSA μ•„ν‚€ν…μ²˜ 흐름도

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Client (Frontend)                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                                            β”‚
        β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚
        β”‚  β”‚Auth Service β”‚  β”‚   Market    β”‚          β”‚
        β”‚  β”‚  (Port      β”‚  β”‚   Service   β”‚          β”‚
        β”‚  β”‚   8003)     β”‚  β”‚ (Port 8005) β”‚          β”‚
        β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜          β”‚
        β”‚         β”‚                β”‚                 β”‚
        β”‚         β”‚  JWT 인증       β”‚ 포인트/ꡬ맀        β”‚
        β”‚         β–Ό                β–Ό                 β”‚
        β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
        β”‚  β”‚      Content Generation Services     β”‚  β”‚
        β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”        β”‚  β”‚
        β”‚  β”‚  β”‚ Math β”‚  β”‚Koreanβ”‚  β”‚  Eng β”‚        β”‚  β”‚
        β”‚  β”‚  β”‚ 8001 β”‚  β”‚ 8004 β”‚  β”‚ 8002 β”‚        β”‚  β”‚
        β”‚  β”‚  β””β”€β”€β”€β”¬β”€β”€β”˜  β””β”€β”€β”€β”¬β”€β”€β”˜  β””β”€β”€β”€β”¬β”€β”€β”˜        β”‚  β”‚
        β”‚  β””β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
        β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
        β”‚                   β–Ό                        β”‚
        β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
        β”‚         β”‚  Notification      β”‚             β”‚
        β”‚         β”‚    Service (8006)  β”‚             β”‚
        β”‚         β”‚  (SSE Real-time)   β”‚             β”‚
        β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚                     β”‚                     β”‚
        β–Ό                     β–Ό                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  PostgreSQL  │◄──── Celery/Redis │───►│     Redis    β”‚
β”‚ (Port 5433)  β”‚    β”‚ Task Queue   β”‚    β”‚  (Port 6379) β”‚
β”‚              β”‚    β”‚              β”‚    β”‚              β”‚
β”‚ μ„œλΉ„μŠ€λ³„ μŠ€ν‚€λ§ˆ β”‚    β”‚ β€’ Math       β”‚    β”‚ β€’ Task Queue β”‚
β”‚ 독립 관리     β”‚    β”‚ β€’ Korean     β”‚    β”‚ β€’ Result     β”‚
β”‚              β”‚    β”‚ β€’ English    β”‚    β”‚   Backend    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


[데이터 흐름]
1. μ‚¬μš©μž μš”μ²­ β†’ Auth Service (JWT λ°œκΈ‰/검증)
2. 인증된 μš”μ²­ β†’ Content Services (Math/Korean/English)
3. μ½˜ν…μΈ  생성 β†’ Celery Task Queue (비동기)
4. Worker β†’ Gemini/GPT API 호좜 β†’ AI Judge 검증
5. μ™„λ£Œ μ‹œ β†’ Notification Service (SSE) β†’ μ‚¬μš©μž μ‹€μ‹œκ°„ μ•Œλ¦Ό
6. λ§ˆμΌ“ 거래 β†’ Market Service β†’ PostgreSQL νŠΈλžœμž­μ…˜ 보μž₯

μ•„ν‚€ν…μ²˜ νŠΉμ§•

  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 기반: λ…λ¦½μ μœΌλ‘œ 배포 κ°€λŠ₯ν•œ 6개 μ„œλΉ„μŠ€
  • 쀑앙 인증: Auth Serviceλ₯Ό ν†΅ν•œ JWT 토큰 검증
  • 비동기 처리: Celery + Redisλ₯Ό ν™œμš©ν•œ λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…
  • AI 톡합: Gemini 2.5 Pro, GPT-4o-mini 기반 문제 생성 및 검증
  • μ„œλΉ„μŠ€ κ°„ 톡신: HTTP REST API
  • 데이터 격리: μ„œλΉ„μŠ€λ³„ PostgreSQL μŠ€ν‚€λ§ˆ 뢄리
  • ν™•μž₯μ„±: Docker Compose 기반 μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜

μ„œλΉ„μŠ€ κ°œμš”

1. Auth Service (Port 8003)

인증 및 μ‚¬μš©μž 관리

  • 핡심 κΈ°λŠ₯:

    • ꡐ사/학생 νšŒμ›κ°€μž… 및 둜그인 (JWT)
    • 클래슀룸 생성 및 학생 κ°€μž… 관리
    • ꡐ사-학생 κ°„ μͺ½μ§€ μ‹œμŠ€ν…œ
    • 쀑앙 토큰 검증 (/api/auth/verify-token)
  • μ£Όμš” ν”Œλ‘œμš°:

    1. ꡐ사가 클래슀 생성 β†’ 고유 클래슀 μ½”λ“œ λ°œκΈ‰
    2. 학생이 클래슀 μ½”λ“œλ‘œ κ°€μž… μ‹ μ²­ β†’ ꡐ사 승인/κ±°λΆ€
    3. 승인된 학생과 ꡐ사 κ°„ μͺ½μ§€ μ†‘μˆ˜μ‹ 
  • 데이터 λͺ¨λΈ: Teacher, Student, ClassRoom, StudentJoinRequest, Message

  • 기술: FastAPI, PostgreSQL, JWT, bcrypt, Redis

2. Math Service (Port 8001)

AI 기반 μˆ˜ν•™ 문제 생성 및 채점

  • 핡심 κΈ°λŠ₯:

    • κ΅μœ‘κ³Όμ • 기반 문제 μžλ™ 생성 (Gemini 2.5 Pro)
    • AI Judge 검증 μ‹œμŠ€ν…œ (GPT-4o-mini)
    • TikZ κ·Έλž˜ν”„ μžλ™ 생성 (LaTeX)
    • OCR 기반 μ„œμˆ ν˜• 채점 (Google Vision API)
    • λ‚œμ΄λ„ 3단계 (A: 직접계산, B: μ‘μš©λ²ˆμ—­, C: ν†΅ν•©λ°œκ²¬)
  • μ£Όμš” ν”Œλ‘œμš°:

    1. ꡐ사가 ν•™λ…„/단원/λ‚œμ΄λ„ μ„€μ • β†’ 문제 생성 μš”μ²­
    2. Celery λ°±κ·ΈλΌμš΄λ“œμ—μ„œ Gemini둜 문제 생성
    3. AI Judgeκ°€ μˆ˜ν•™μ •ν™•μ„±/μ •λ‹΅μΌμΉ˜/μ™„κ²°μ„±/논리성 검증
    4. λΆˆν•©κ²© λ¬Έμ œλŠ” ν”Όλ“œλ°± 포함 μž¬μƒμ„± (μ΅œλŒ€ 3회)
    5. 학생 λ‹΅μ•ˆ 제좜 β†’ OCR 인식 β†’ AI 채점 β†’ ν”Όλ“œλ°± 제곡
  • 데이터 λͺ¨λΈ: Worksheet, Problem, GradingSession, Curriculum

  • 기술: FastAPI, Celery, Gemini, GPT-4o-mini, Google Vision API

3. Korean Service (Port 8004)

AI 기반 κ΅­μ–΄ 문제 생성 및 채점

  • 핡심 κΈ°λŠ₯:

    • μ§€λ¬Έ 기반 문제 생성 (μ‹œ/μ†Œμ„€/μˆ˜ν•„/문법)
    • AI Judge μœ ν˜•λ³„ 검증 (λ¬Έν•™μ„±, μ„œμ‚¬μ„±, 논증성)
    • 병렬 처리 (ThreadPoolExecutor)
    • 과제 생성 및 배포
  • μ£Όμš” ν”Œλ‘œμš°:

    1. ꡐ사가 κ΅­μ–΄ μœ ν˜•/λ‚œμ΄λ„ μ„€μ • β†’ 문제 생성 μš”μ²­
    2. data/ ν΄λ”μ—μ„œ μ§€λ¬Έ 랜덀 선택 (poem/novel/non-fiction/grammar)
    3. ThreadPoolExecutor둜 μž‘ν’ˆλ³„ 병렬 생성
    4. AI Judgeκ°€ μœ ν˜•λ³„ κΈ°μ€€ 검증 (각 ν•­λͺ© β‰₯ 3.5/5.0)
    5. λΆˆν•©κ²© 문제 μž¬μƒμ„± β†’ DB μ €μž₯
    6. 과제 배포 β†’ 학생 제좜 β†’ 채점
  • 데이터 λͺ¨λΈ: Worksheet, Problem, GradingSession, Assignment

  • 기술: FastAPI, Celery, Gemini, GPT-4o-mini, ThreadPoolExecutor

4. Market Service (Port 8005)

μ›Œν¬μ‹œνŠΈ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€

  • 핡심 κΈ°λŠ₯:

    • μ›Œν¬μ‹œνŠΈ μƒν’ˆ 등둝 및 판맀
    • 포인트 μ‹œμŠ€ν…œ (μΆ©μ „/ꡬ맀/수읡)
    • μžλ™ 가격 μ±…μ • (10문제: 1,500P, 20문제: 3,000P)
    • 리뷰 μ‹œμŠ€ν…œ (μΆ”μ²œ/보톡/λΉ„μΆ”μ²œ)
  • μ£Όμš” ν”Œλ‘œμš°:

    1. ꡐ사가 μ›Œν¬μ‹œνŠΈ 등둝 β†’ μžλ™ 가격 μ±…μ • 및 νƒœκ·Έ 생성
    2. λ‹€λ₯Έ ꡐ사가 포인트둜 ꡬ맀
    3. ꡬ맀자 포인트 차감 β†’ 판맀자 수읡 적립 (ν”Œλž«νΌ 수수료 10%)
    4. μ›Œν¬μ‹œνŠΈ μžλ™ 볡사 β†’ ꡬ맀자 계정에 μΆ”κ°€
    5. ꡬ맀자 리뷰 μž‘μ„± β†’ λ§Œμ‘±λ„ 계산
  • 데이터 λͺ¨λΈ: MarketProduct, MarketPurchase, MarketReview, UserPoint

  • 기술: FastAPI, PostgreSQL, Auth Service 미듀웨어

5. English Service (Port 8002)

μ˜μ–΄ 문제 생성 및 관리 (λ‹΄λ‹Ήμž: λ‹€λ₯Έ 개발자)

  • 핡심 κΈ°λŠ₯: (μΆ”κ°€ μ˜ˆμ •)

    • AI 기반 μ˜μ–΄ 문제 생성
    • μ˜μ–΄ μ›Œν¬μ‹œνŠΈ 관리
    • μ˜μ–΄ 채점 μ‹œμŠ€ν…œ
  • 포트: 8002

  • 기술 μŠ€νƒ: FastAPI, PostgreSQL, AI Models

6. Notification Service (Port 8006)

μ‹€μ‹œκ°„ μ•Œλ¦Ό 및 WebSocket (λ‹΄λ‹Ήμž: λ‹€λ₯Έ 개발자)

  • 핡심 κΈ°λŠ₯: (μΆ”κ°€ μ˜ˆμ •)

    • WebSocket 기반 μ‹€μ‹œκ°„ μ•Œλ¦Ό
    • λ©”μ‹œμ§€ ν‘Έμ‹œ μ•Œλ¦Ό
    • 이벀트 λΈŒλ‘œλ“œμΊμŠ€νŒ…
  • 포트: 8006

  • 기술 μŠ€νƒ: FastAPI, Redis, WebSocket

기술 μŠ€νƒ

Core Framework

  • FastAPI: κ³ μ„±λŠ₯ 비동기 μ›Ή ν”„λ ˆμž„μ›Œν¬
  • SQLAlchemy: ORM (PostgreSQL)
  • Pydantic: 데이터 검증

Database & Cache

  • PostgreSQL 15: 메인 λ°μ΄ν„°λ² μ΄μŠ€
  • Redis 7: 캐싱 및 Celery 브둜컀

AI & ML

  • Gemini 2.5 Pro: 문제 생성
  • GPT-4o-mini: AI Judge 검증
  • Google Vision API: OCR (μˆ˜ν•™ μ„œμˆ ν˜•)

Task Queue

  • Celery: 비동기 μž‘μ—… 처리
  • Redis: λ©”μ‹œμ§€ 브둜컀

Authentication

  • JWT (HS256): 토큰 기반 인증
  • bcrypt: λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹±

Containerization

  • Docker: μ»¨ν…Œμ΄λ„ˆν™”
  • Docker Compose: μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜

데이터 흐름

1. AI 문제 생성 및 검증 νŒŒμ΄ν”„λΌμΈ (Feedback-Enhanced QA Flow)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [1] μ‚¬μš©μž μš”μ²­ μ ‘μˆ˜                                                β”‚
β”‚   POST /api/worksheets/generate                                 β”‚
β”‚   {grade, unit, difficulty_ratio, problem_count, ...}           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [2] Celery 비동기 νƒœμŠ€ν¬ 생성                                       β”‚
β”‚   β€’ FastAPI β†’ Celery.delay() β†’ Task ID μ¦‰μ‹œ λ°˜ν™˜                  β”‚
β”‚   β€’ μ‚¬μš©μž 체감 응닡 μ‹œκ°„: 3초 이내 (202 Accepted)                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [3] Celery Worker - λ°±κ·ΈλΌμš΄λ“œ 처리 μ‹œμž‘                             β”‚
β”‚   β€’ κ΅μœ‘κ³Όμ • 데이터 λ‘œλ“œ (curriculum.json)                           β”‚
β”‚   β€’ ν”„λ‘¬ν”„νŠΈ ꡬ성 (λ‚œμ΄λ„/μœ ν˜• λΆ„λ°°)                                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [4] AI 문제 생성 (Gemini 2.5 Pro)                                 β”‚
β”‚                                                                  β”‚
β”‚   Math Service:                                                 β”‚
β”‚   β€’ TikZ κ·Έλž˜ν”„ μžλ™ 생성                                        β”‚
β”‚   β€’ λ‚œμ΄λ„ 3단계 (A/B/C)                                         β”‚
β”‚   β€’ 병렬 처리 (ThreadPoolExecutor)                               β”‚
β”‚                                                                  β”‚
β”‚   Korean Service:                                               β”‚
β”‚   β€’ μœ ν˜•λ³„ 핡심 발췌 (Context Engineering)                       β”‚
β”‚     - μ†Œμ„€: κ°ˆλ“±/λŒ€ν™” 쀑심 (800-1200자)                          β”‚
β”‚     - λΉ„λ¬Έν•™: λ…Όμ§€/증거 쀑심 (800-1200자)                        β”‚
β”‚   β€’ μž‘ν’ˆλ³„ 병렬 생성 (max_workers=5)                             β”‚
β”‚   β€’ Input Token 92% 절감                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [5] AI Judge 검증 (GPT-4o-mini) - 각 λ¬Έμ œλ³„                         β”‚
β”‚                                                                  β”‚
β”‚   검증 κΈ°μ€€ (1-5점):                                                β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚   β”‚ Math:                                          β”‚            β”‚
β”‚   β”‚ β€’ mathematical_accuracy (μˆ˜ν•™μ  μ •ν™•μ„±)        β”‚            β”‚
β”‚   β”‚ β€’ consistency (μ •λ‹΅ μΌμΉ˜λ„) β‰₯ 4.0 (ν•„μˆ˜)       β”‚            β”‚
β”‚   β”‚ β€’ completeness (μ™„κ²°μ„±)                        β”‚            β”‚
β”‚   β”‚ β€’ logic_flow (논리성)                          β”‚            β”‚
β”‚   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€            β”‚
β”‚   β”‚ Korean:                                        β”‚            β”‚
β”‚   β”‚ β€’ literary_accuracy / narrative_comprehension  β”‚            β”‚
β”‚   β”‚ β€’ relevance (μ§€λ¬Έ κ΄€λ ¨μ„±)                      β”‚            β”‚
β”‚   β”‚ β€’ textual_analysis / critical_thinking         β”‚            β”‚
β”‚   β”‚ β€’ answer_clarity (μ •λ‹΅ λͺ…ν™•μ„±)                 β”‚            β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                                                                  β”‚
β”‚   합격 쑰건: λͺ¨λ“  점수 β‰₯ 3.5 (λ˜λŠ” consistency β‰₯ 4.0)            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                β–Ό                     β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚   VALID      β”‚      β”‚   INVALID    β”‚
        β”‚   (합격)     β”‚      β”‚   (λΆˆν•©κ²©)   β”‚
        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚                     β”‚
               β”‚              ν”Όλ“œλ°± μ €μž₯:
               β”‚              β€’ 점수: {accuracy: 3.0, ...}
               β”‚              β€’ 이슈: "μ •λ‹΅ 뢈일치"
               β”‚                     β”‚
               β–Ό                     β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [6] μž¬μ‹œλ„ λ©”μ»€λ‹ˆμ¦˜ (μ΅œλŒ€ 3회)                                    β”‚
β”‚                                                                  β”‚
β”‚   len(valid_problems) < target_count?                           β”‚
β”‚   β”œβ”€ NO  β†’ [7] DB μ €μž₯ (성곡)                                   β”‚
β”‚   └─ YES β†’ ν”Όλ“œλ°± 기반 ν”„λ‘¬ν”„νŠΈ μž¬κ΅¬μ„±                           β”‚
β”‚                                                                  β”‚
β”‚   μž¬κ΅¬μ„± ν”„λ‘¬ν”„νŠΈ μ˜ˆμ‹œ:                                          β”‚
β”‚   """                                                            β”‚
β”‚   **IMPORTANT: Previous attempt had issues. Fix these:**        β”‚
β”‚                                                                  β”‚
β”‚   Problem 1 feedback:                                           β”‚
β”‚   - Scores: consistency=2.5, accuracy=4.0                       β”‚
β”‚   - Issue: 풀이 κ³Όμ •μ˜ λ§ˆμ§€λ§‰ 닡이 μ •λ‹΅κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€     β”‚
β”‚                                                                  β”‚
β”‚   **MUST ensure**: consistency β‰₯ 4.0, all scores β‰₯ 3.5          β”‚
β”‚   """                                                            β”‚
β”‚                                                                  β”‚
β”‚   β†’ [4] AI 문제 μƒμ„±μœΌλ‘œ λŒμ•„κ°€ λΆ€μ‘±ν•œ 개수만 μž¬μƒμ„±    ◄────────┐
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
                           β–Ό                                         β”‚
                    [λͺ©ν‘œ 달성 μ‹œ]                        [μž¬μ‹œλ„ ν•„μš” μ‹œ]
                           β”‚                                         β”‚
                           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [7] PostgreSQL μ €μž₯                                              β”‚
β”‚   β€’ Worksheet 생성                                               β”‚
β”‚   β€’ Problem μ €μž₯ (TikZ μ½”λ“œ 포함)                                  β”‚
β”‚   β€’ Transaction 컀밋                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [8] μ‹€μ‹œκ°„ μ•Œλ¦Ό (Notification Service)                             β”‚
β”‚   β€’ SSE (Server-Sent Events) 슀트리밍                              β”‚
β”‚   β€’ μ§„ν–‰ μƒνƒœ: λŒ€κΈ° β†’ 생성 쀑 β†’ 검증 쀑 β†’ μ™„λ£Œ                           β”‚
β”‚   β€’ μ‚¬μš©μžμ—κ²Œ μ‹€μ‹œκ°„ ν”Όλ“œλ°±                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

[핡심 μ„±κ³Ό]
β€’ 초기 ν†΅κ³Όμœ¨: 78% (First-Pass Yield)
β€’ μ΅œμ’… 합격λ₯ : 99% (Feedback-Enhanced Regeneration)
β€’ ꡐ윑 ν’ˆμ§ˆ 신뒰도: 95% (Independent AI Audit)
β€’ 검증 λΉ„μš©: 전체 생성 λΉ„μš©μ˜ 0.8% (ν•˜μ΄λΈŒλ¦¬λ“œ μ•„ν‚€ν…μ²˜)

2. μ›Œν¬μ‹œνŠΈ ꡬ맀 ν”Œλ‘œμš°

ꡐ사 β†’ Auth Service (인증) β†’ Market Service
  ↓
μƒν’ˆ 쑰회 β†’ 포인트 차감
  ↓
판맀자 수읡 적립 (90%)
  ↓
Math/Korean/English Service β†’ μ›Œν¬μ‹œνŠΈ 볡사
  ↓
ꡬ맀자 계정에 μ›Œν¬μ‹œνŠΈ μΆ”κ°€
  ↓
ꡬ맀 기둝 μ €μž₯ β†’ μ•Œλ¦Ό 전솑

3. 과제 배포 및 채점 ν”Œλ‘œμš°

ꡐ사 β†’ Korean Service β†’ 과제 생성
  ↓
클래슀룸 ν•™μƒλ“€μ—κ²Œ 배포
  ↓
학생 λ‹΅μ•ˆ 제좜 (OCR 포함)
  ↓
AI 채점 (Gemini) β†’ ν”Όλ“œλ°± 생성
  ↓
채점 κ²°κ³Ό μ €μž₯ β†’ ꡐ사/학생 μ•Œλ¦Ό

ν™˜κ²½ μ„€μ •

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

# Database
DB_USER=postgres
DB_PASSWORD=password
DB_NAME=qt_project_db

# AI API Keys
GEMINI_API_KEY=your-gemini-key
MATH_GEMINI_API_KEY=your-math-gemini-key (optional)
KOREAN_GEMINI_API_KEY=your-korean-gemini-key (optional)
ENGLISH_GEMINI_API_KEY=your-english-gemini-key (optional)
OPENAI_API_KEY=your-openai-key
GOOGLE_VISION_API_KEY=your-vision-key (optional)

# Auth
AUTH_SECRET_KEY=your-jwt-secret-key

# Redis
REDIS_URL=redis://redis:6379/0

μ„œλΉ„μŠ€λ³„ 포트

μ„œλΉ„μŠ€ μ™ΈλΆ€ 포트 λ‚΄λΆ€ 포트 μŠ€ν‚€λ§ˆ
Math Service 8001 8000 math_service
English Service 8002 8000 english_service
Auth Service 8003 8000 auth_service
Korean Service 8004 8000 korean_service
Market Service 8005 8000 market_service
Notification Service 8006 8000 notification_service
PostgreSQL 5433 5432 -
Redis 6379 6379 -

μ‹€ν–‰ 방법

전체 μ‹œμŠ€ν…œ μ‹€ν–‰

# 1. ν™˜κ²½ λ³€μˆ˜ μ„€μ •
cp .env.example .env
# .env 파일 μˆ˜μ •

# 2. Docker Compose둜 λͺ¨λ“  μ„œλΉ„μŠ€ μ‹€ν–‰
docker-compose up -d

# 3. 둜그 확인
docker-compose logs -f

# 4. νŠΉμ • μ„œλΉ„μŠ€λ§Œ μž¬μ‹œμž‘
docker-compose restart math-service

# 5. 전체 μ’…λ£Œ
docker-compose down

κ°œλ³„ μ„œλΉ„μŠ€ μ‹€ν–‰ (개발 λͺ¨λ“œ)

# Math Service
cd services/math-service
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

# Math Celery Worker
celery -A app.celery_app worker --loglevel=info

# Korean Service
cd services/korean-service
pip install -r requirements.txt
python korean_main.py

# Korean Celery Worker
celery -A app.celery_app worker --loglevel=info --concurrency=4

# Auth Service
cd services/auth-service
pip install -r requirements.txt
uvicorn auth_main:app --reload --port 8000

# Market Service
cd services/market-service
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

API λ¬Έμ„œ

각 μ„œλΉ„μŠ€λŠ” μžλ™ μƒμ„±λœ API λ¬Έμ„œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€:

λ³΄μ•ˆ

인증 흐름

  1. 둜그인: μ‚¬μš©μžκ°€ Auth Service둜 둜그인
  2. 토큰 λ°œκΈ‰: JWT 토큰 생성 (7일 유효)
  3. 토큰 검증: λ‹€λ₯Έ μ„œλΉ„μŠ€κ°€ Auth Service의 /api/auth/verify-token으둜 검증
  4. κΆŒν•œ 확인: ꡐ사/학생 μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄

λ³΄μ•ˆ μ •μ±…

  • JWT 토큰 기반 stateless 인증
  • bcrypt λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹± (rounds=12)
  • CORS μ„€μ • (ν”„λ‘ νŠΈμ—”λ“œ λ„λ©”μΈλ§Œ ν—ˆμš©)
  • μ„œλΉ„μŠ€ κ°„ λ‚΄λΆ€ 톡신 (Docker λ„€νŠΈμ›Œν¬)
  • ν™˜κ²½ λ³€μˆ˜λ‘œ 민감 정보 관리

개발 κ°€μ΄λ“œ

μƒˆ μ„œλΉ„μŠ€ μΆ”κ°€

  1. services/ 디렉토리에 μƒˆ μ„œλΉ„μŠ€ 폴더 생성
  2. Dockerfile 및 requirements.txt μž‘μ„±
  3. docker-compose.yml에 μ„œλΉ„μŠ€ μΆ”κ°€
  4. PostgreSQL μŠ€ν‚€λ§ˆ 생성 (scripts/init-schema.sql)
  5. Auth Service 미듀웨어 연동
  6. README.md μž‘μ„±

λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜

# μŠ€ν‚€λ§ˆ μ΄ˆκΈ°ν™” (주의: 데이터 손싀)
docker-compose down -v
docker-compose up -d postgres

# νŠΉμ • μ„œλΉ„μŠ€ μŠ€ν‚€λ§ˆλ§Œ μž¬μƒμ„±
docker exec -it qt_project_db psql -U postgres -d qt_project_db
DROP SCHEMA math_service CASCADE;
# μ„œλΉ„μŠ€ μž¬μ‹œμž‘ν•˜λ©΄ μžλ™ 생성

둜컬 개발 팁

  • Celery Worker: λ‘œμ»¬μ—μ„œλŠ” --pool=solo μ˜΅μ…˜ μ‚¬μš©
  • Redis: Docker둜 μ‹€ν–‰ν•˜κ³  λ‘œμ»¬μ—μ„œ μ—°κ²°
  • PostgreSQL: pgAdmin λ˜λŠ” DBeaver둜 DB 관리
  • Hot Reload: --reload μ˜΅μ…˜μœΌλ‘œ μžλ™ μž¬μ‹œμž‘

νŠΈλŸ¬λΈ”μŠˆνŒ…

일반적인 문제

  1. 포트 좩돌: docker-compose down ν›„ μž¬μ‹œμž‘
  2. DB μ—°κ²° μ‹€νŒ¨: PostgreSQL μ»¨ν…Œμ΄λ„ˆ μƒνƒœ 확인
  3. Celery μž‘μ—… μ‹€νŒ¨: Redis μ—°κ²° 및 Worker 둜그 확인
  4. AI API μ—λŸ¬: API ν‚€ μœ νš¨μ„± 및 ν• λ‹ΉλŸ‰ 확인
  5. 인증 μ‹€νŒ¨: Auth Service μƒνƒœ 및 토큰 만료 확인

둜그 확인

# 전체 μ„œλΉ„μŠ€ 둜그
docker-compose logs -f

# νŠΉμ • μ„œλΉ„μŠ€ 둜그
docker-compose logs -f math-service

# Celery Worker 둜그
docker-compose logs -f celery-worker

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors