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, 예외 정책(공통 응답 기반)