csat_forge.mp4
수능 기출 PDF를 올리면 AI가 문제를 추출하고, 변형 문제를 만들어 시험지 PDF/Word로 뽑아주는 서비스입니다. 1인 개발·운영 중이며 실서비스로 돌아가고 있습니다.
- 서비스 URL: https://ai-examgenerator.co.kr/
- 운영 환경: Naver Cloud Platform, 실서비스 운영 중
- 구조: FastAPI + React + Redis/RQ Worker + PostgreSQL, AI는 Gemini/Claude/GPT를 역할별로 나눠서 사용
요금제(FREE~ACADEMY_PRO, 8단계)에 따라 추출/분석/생성/검증/복구 5개 역할마다 쓰는 모델이 달라집니다. Claude는 가장 비싼 ACADEMY_PRO 티어에서만 쓰고, 나머지는 Gemini/GPT로 처리해서 원가를 맞춥니다. 자세한 표는 AI 파이프라인 문서 참고.
- PDF 분석, 변형 문제 생성처럼 오래 걸리는 작업은 Redis + RQ Worker로 큐에 넣어서 처리합니다.
ACADEMY/ACADEMY_PRO유저 작업은 큐 맨 앞으로 우선 배정됩니다.- Gemini가 429/503으로 막히면 다른 모델로 자동 전환하고, JSON이 깨지면 GPT-4o-mini가 복구를 시도합니다.
- 생성된 문제를 웹에서 수정/삭제/순서 변경할 수 있는 편집기 제공
- Puppeteer로 A4 PDF 생성 (정답지·해설 포함)
- Word(
.docx) 내보내기는TEACHER플랜 이상부터 지원 - 모든 PDF 하단에 출처 표시 자동 삽입
- 토스페이먼츠 빌링키로 자동 결제 처리
- 크레딧은 매주 초기화(컬럼명은
monthly_credit이지만 실제 리셋 주기는 7일) - 결제 연속 실패 시 구독 자동 일시정지(PAUSED) + Slack 알림
Gemini 기반 FAQ 챗봇. 프롬프트 인젝션은 백엔드 키워드 필터 + 시스템 프롬프트 레벨에서 이중으로 막습니다.
| 분류 | 기술 스택 |
|---|---|
| Backend | FastAPI (Pydantic V2), SQLAlchemy, Alembic, PostgreSQL, Redis, RQ, Prometheus |
| Frontend | React, TypeScript, Vite, Tailwind CSS v4, Zustand, TanStack Query v5 |
| AI Engine | Multi-Provider (Gemini, Claude, GPT-4o) |
| 결제 | 토스페이먼츠 (빌링키 자동결제) |
| Puppeteer (Headless Chromium), KaTeX | |
| 모니터링 | Sentry, Prometheus, Slack Webhook |
| Infra | Naver Cloud Platform, Nginx, Systemd |
NCP 단일 서버(s2-g3a, 2vCPU/8GB) 위에 Nginx + FastAPI + RQ Worker + PostgreSQL/Redis를 systemd로 띄워서 운영합니다.
스케일링 (2026-07-17): DB 커넥션 pool 예산화(API 80 + 워커 N×5 < max_connections=200), 이미지 정적 파일은 Nginx가 X-Accel-Redirect로 직접 서빙(FastAPI 스레드 점유 방지), PDF 렌더 동시성 세마포어, Gemini 호출 전역 스로틀을 Redis 원자적 카운터로 교체. k6로 회원 1만/피크 동접 500 시나리오를 검증했고 현재 스펙으로 충분히 여유 있음을 확인(자세한 내용은 docs/SERVER_SETUP.md, 배포 런북은 deploy/ 참고).
graph TD
User([사용자])
subgraph NCP_Public_Subnet
Nginx[Nginx Reverse Proxy]
LB[Load Balancer]
end
subgraph NCP_Private_Subnet
FastAPI[FastAPI App Server]
subgraph Internal_Queue
Redis[(Redis Queue)]
end
subgraph Worker_Pool
Heavy[Heavy Workers]
Middle[Middle Workers]
end
end
subgraph NCP_Data_Storage
DB[(PostgreSQL)]
NAS[NAS / Object Storage]
end
subgraph External_APIs
AI[Multi-AI: Gemini/Claude/GPT]
Toss[토스페이먼츠]
Slack[Slack Webhook]
end
User <--> LB
LB <--> Nginx
Nginx <--> FastAPI
FastAPI <--> DB
FastAPI <--> Redis
Redis <--> Heavy
Redis <--> Middle
Heavy <--> AI
Heavy <--> DB
Heavy <--> NAS
FastAPI <--> Toss
FastAPI --> Slack
상세 개발 히스토리, 기술적 의사결정과 트러블슈팅 과정은 docs/HISTORY.md에 정리되어 있습니다. AI 파이프라인 구조는 docs/AI_PIPELINE.md, 크레딧/요금제 정책은 docs/CREDIT_POLICY.md를 참고하세요.
- Python 3.11+ / Node.js 18+ / PostgreSQL / Redis
cd backend
poetry install
# .env 설정 후 (GOOGLE_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY 필수)
poetry run alembic upgrade head
poetry run uvicorn main:app --reloadcd frontend
npm install
npm run dev# 저장소 루트에서, API 키 설정 후 연결성 테스트
python3 PRE_FLIGHT_CHECK.py- Email: swp20138993@gmail.com
- Service: https://ai-examgenerator.co.kr/