AI 보조 학습(동영상 + 스캐폴딩 + 챗봇)을 위한 웹 애플리케이션입니다.
주요 기능 업데이트! 🚀
- ✅ 채팅 파일 첨부 (이미지, PDF, 텍스트 - 멀티모달 AI 분석)
- ✅ 채팅 세션 PDF 내보내기 (학습 기록 저장)
- ✅ 관리자 채팅 모니터링 (학생 대화 내역 확인 및 관리)
- ✅ Gemini 비용 대시보드 (30일 트렌드, 모듈별 분석)
- ✅ 코드 구문 강조 (채팅 내 코드 블록 가독성 향상)
- ✅ 환경변수 리팩토링 (JWT 만료시간, Rate Limit, 가격 설정)
- ✅ 파일 크기 제한 (MAX_FILE_SIZE_MB, 기본 5MB)
- ✅ Node.js 20 업그레이드 (최신 LTS 버전)
- ✅ Context Caching 적용 (70-80% API 비용 절감)
- ✅ Vertex AI IAM 인증 (API 키 선택사항, 보안 강화)
# 1. 환경 변수 설정 (최초 1회)
copy .env.example .env
# .env 파일에서 필수 환경 변수 설정!
# 2. 백엔드 실행 (PowerShell 터미널 1)
cd backend
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
python run.py
# 3. 프론트엔드 실행 (PowerShell 터미널 2)
cd frontend
npm install
npm run dev
# ✅ http://localhost:5173 접속# 1. 초기 설정 (최초 1회)
./scripts/dev_setup.sh
# 2. 백엔드 실행 (터미널 1)
cd backend && source venv/bin/activate && python run.py
# 3. 프론트엔드 실행 (터미널 2)
cd frontend && npm run dev
# ✅ http://localhost:5173 접속코드 수정 시 즉시 반영됩니다! (Docker 재빌드 불필요)
용도: 일상적인 개발 (새 기능, 버그 수정, UI 조정)
장점:
- ✅ 핫리로드: 코드 저장 → 즉시 반영 (재시작 불필요)
- ✅ IDE 디버깅: VSCode 브레이크포인트, 단계별 실행
- ✅ 빠른 시작: Docker 이미지 빌드 불필요
준비 (최초 1회):
# Windows (PowerShell)
copy .env.example .env
cd backend
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
cd ..\frontend
npm install
# macOS/Linux (bash)
cp .env.example .env
./scripts/dev_setup.sh매일 사용:
# 백엔드 실행 (터미널 1)
cd backend
source venv/bin/activate # Windows: .\venv\Scripts\Activate.ps1
python run.py
# 프론트엔드 실행 (터미널 2)
cd frontend
npm run dev접속:
- 프론트엔드: http://localhost:5173 (Vite Dev Server)
- 백엔드 API: http://localhost:8080/api
- 헬스체크: http://localhost:8080/health
작업 종료:
# Ctrl+C (백엔드, 프론트엔드 터미널에서 각각)용도: 프로덕션 환경 배포
# 1. GCP 프로젝트 설정
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
# 2. 빌드 및 배포
gcloud builds submit --config cloudbuild.yaml
# 3. 배포 URL 확인
gcloud run services describe vcbl-chatbot \
--region=asia-northeast3 \
--format="value(status.url)"자세한 배포 가이드: DEPLOYMENT.md 참고
cd backend
source venv/bin/activate # Windows: .\venv\Scripts\Activate.ps1
# 마이그레이션 적용
flask db upgrade
# 새 마이그레이션 생성
flask db revision --message "설명"
# 관리자 계정 초기화
flask init-admin# 프론트엔드 린트
cd frontend
npm run lint # ESLint 검사cd frontend
# 의존성 설치
npm install
# 프로덕션 빌드 테스트
npm run build
npm run previewVCBL-Chatbot/
├── backend/ # Flask API 서버
│ ├── app/
│ │ ├── models/ # SQLAlchemy 모델
│ │ ├── routes/ # API 엔드포인트 (Blueprints)
│ │ ├── services/ # 비즈니스 로직
│ │ └── validators/ # Pydantic 스키마
│ ├── migrations/ # Alembic 마이그레이션
│ ├── run.py # 개발 서버 진입점
│ └── requirements.txt # Python 의존성
│
├── frontend/ # React/Vite SPA
│ ├── src/
│ │ ├── components/ # 재사용 컴포넌트
│ │ │ ├── charts/ # 차트 컴포넌트 (Bar, Line, Pie)
│ │ │ └── scaffolding/ # 스캐폴딩 모드 컴포넌트
│ │ ├── pages/ # 페이지 컴포넌트
│ │ ├── contexts/ # React Context (AuthContext)
│ │ └── services/ # API 통신 (axios)
│ └── package.json # Node.js 의존성
│
├── Dockerfile # 프로덕션 멀티스테이지 빌드
├── cloudbuild.yaml # Google Cloud Build 설정
├── .env.example # 환경 변수 예시 파일
├── README.md # 프로젝트 메인 문서
└── TODO_HARDCODING.md # 하드코딩 제거 작업 목록
# 1. .env.example 파일을 복사
copy .env.example .env # Windows
cp .env.example .env # macOS/Linux
# 2. .env 파일에서 다음 값들을 설정
# 필수 - GCP 설정
GCP_PROJECT_ID=your-gcp-project-id
GCP_LOCATION=asia-northeast3
GCS_BUCKET_NAME=your-bucket-name
# 필수 - 보안 키
SECRET_KEY=your-secret-key-here
JWT_SECRET_KEY=your-jwt-secret-here
# 필수 - 관리자 계정 (flask init-admin용)
ADMIN_STUDENT_ID=9999000001
ADMIN_NAME=Admin
ADMIN_PASSWORD=your-admin-password
# 선택사항 (기본값 사용 가능)
MODEL_NAME=gemini-1.5-flash-002
DAILY_TOKEN_LIMIT=50000배포시 Secret Manager를 통해 민감 정보를 관리합니다. Cloud Build를 통해 자동 빌드 및 배포가 진행됩니다.
- 모델 정의 (
backend/app/models/) - 마이그레이션 생성 (
flask db revision) - 서비스 로직 (
backend/app/services/) - 라우트 추가 (
backend/app/routes/) - Validator 정의 (
backend/app/validators/)
- 페이지 컴포넌트 (
frontend/src/pages/) - 라우트 등록 (
frontend/src/App.jsx) - API 서비스 (
frontend/src/services/api.js) - Context 활용 (필요시 AuthContext 등)
- 프론트엔드: Vite가 파일 변경 감지 → 브라우저 즉시 반영 (새로고침 불필요)
- 백엔드: Flask가 파일 변경 감지 → 서버 자동 재시작 (약 1초)
# Windows (PowerShell - 관리자 권한)
# 5173 포트 (프론트엔드)
netstat -ano | findstr :5173
taskkill /PID <PID번호> /F
# 8080 포트 (백엔드)
netstat -ano | findstr :8080
taskkill /PID <PID번호> /F
# macOS/Linux
lsof -ti:5173 | xargs kill -9 # 프론트엔드
lsof -ti:8080 | xargs kill -9 # 백엔드# 프론트엔드: node_modules 재설치
cd frontend
rm -rf node_modules package-lock.json # Windows: rmdir /s node_modules & del package-lock.json
npm install
# 백엔드: venv 재생성
cd backend
rm -rf venv # Windows: rmdir /s venv
python -m venv venv
source venv/bin/activate # Windows: .\venv\Scripts\Activate.ps1
pip install -r requirements.txt# Windows (PowerShell)
cd backend
.\venv\Scripts\Activate.ps1
# macOS/Linux
cd backend
source venv/bin/activate
# 활성화 확인 (프롬프트에 (venv) 표시)- Framework: Flask 3.x
- ORM: SQLAlchemy + Flask-Migrate
- Auth: Flask-JWT-Extended (설정 가능한 토큰 만료시간)
- Validation: Pydantic v2
- Database: PostgreSQL 15
- Cache: Flask-Caching (Simple)
- AI:
- Google Vertex AI (Gemini 1.5 Flash)
- Context Caching - 70-80% 비용 절감
- File API - PDF/이미지/텍스트 멀티모달 지원
- 토큰 사용량 및 비용 추적
- Storage: Google Cloud Storage (채팅 첨부파일 지원)
- PDF Generation: Typst (채팅 세션 내보내기)
- Server: Gunicorn (프로덕션)
- Framework: React 18
- Build Tool: Vite 5
- Runtime: Node.js 20 LTS
- Styling: TailwindCSS 3
- Animation: Framer Motion
- Router: React Router v6
- HTTP: Axios
- Video Player: YouTube Player API
- Charts: Recharts (비용 모니터링 대시보드)
- Code Highlighting: react-syntax-highlighter
- Markdown: react-markdown + remark/rehype plugins
- Cloud: Google Cloud Run
- CI/CD: Google Cloud Build
- Secrets: Google Secret Manager
- 루트 헬스체크:
GET /health - API 헬스체크:
GET /api/health
응답 예시:
{
"status": "healthy",
"database": "connected",
"timestamp": "2025-01-01T00:00:00Z"
}MIT License