FastAPI 기반이며 라우터는 얇게, 핵심 로직은 Service 계층에서 처리한다.
또한 라우터에는 try/except를 두지 않고, 공통 예외 처리기를 통해 일관된 에러 응답을 제공한다.
backend/
└─ app/
├─ main.py # FastAPI 앱 엔트리, 미들웨어/예외핸들러/라우터 등록
├─ routes.py # 라우터 통합 include_router
├─ db/
│ └─ db.py # DB 세션/엔진 설정, 의존성(get_db)
├─ models/ # ORM 모델(테이블 정의)
│ ├─ user.py # user, user_session
│ ├─ chat.py # chat_session, chat_message
│ ├─ term.py # term
│ └─ term_translation.py # term_translation
├─ routes/ # API 엔드포인트(라우터)
│ ├─ translate_router.py
│ └─ ... # auth/summarize/term/speech/pdf 등 기능별 router
│ # ⚠️ 라우터는 try/except 금지(전역 예외 처리로 통일)
├─ schemas/ # Request/Response 스키마(Pydantic)
│ ├─ auth.py
│ ├─ translate.py
│ ├─ summarize.py
│ ├─ term.py
│ ├─ speech.py
│ └─ pdf.py
├─ services/ # 비즈니스 로직(핵심 처리 계층)
│ ├─ openai_service.py # OpenAI 호출 공통 래퍼
│ ├─ auth_service.py
│ ├─ translate_service.py
│ ├─ summarize_service.py
│ ├─ term_service.py
│ ├─ speech_service.py
│ └─ pdf_service.py # PDF 있으면
└─ exceptions/
└─ error.py # AppError, ErrorCode, 예외 정책(공통 응답 기반)