5 / 10 flowchart subgraph v0.0.1 상세

5. 내부 구조 — 레이어드 아키텍처

시스템을 계층으로 분리. 어디에 어떤 컴포넌트가 사는 보여줌

시스템을 계층으로 분리. 어디에 어떤 컴포넌트가 사는 보여줌.

💡 핵심 개념: 좋은 아키텍처는 관심사 분리(SoC). "UI 코드"와 "DB 쿼리"가 한 함수에 섞이면 안 됨. LLM 앱에선 특히 프롬프트 조립을 도메인 로직에서 분리하는 게 핵심.
flowchart TB subgraph CL["🖥️ 클라이언트 레이어"] U[👤 사용자] end subgraph AL["🌐 API 레이어"] A["FastAPI 서버"] end subgraph RL["📦 RAG 레이어"] RP["RAG Pipeline"] RT["Retriever"] RD["Indexer"] end subgraph LL["🧠 LLM 레이어"] LP["LLM Provider"] end subgraph SL["💾 스토리지 레이어"] VDB[("Vector DB")] MDB[("Metadata DB")] end subgraph XL["🔁 횡단 관심사"] AG["🤖 Agent"] PO["✨ Prompt Opt"] TS["🛡️ Type Safety"] end U <--> A A --> RP RP --> RD RP --> RT RD --> VDB RT <--> VDB RT --> A A --> LP LP --> A RD <--> MDB AG -.도구.-> LP PO -.최적화.-> LP TS -.검증.-> A

🔧 레이어별 책임 + 추천 폴더 구조

📋 FastAPI 기준 폴더 예시:
app/
├── api/
│   ├── chat.py         # POST /chat 엔드포인트
│   └── admin.py        # 문서 업로드
├── rag/
│   ├── loader.py       # PDF/HTML → Document
│   ├── splitter.py     # Document → Chunk[]
│   ├── embedder.py     # Chunk → Embedding
│   ├── indexer.py      # Embedding → Vector DB
│   └── retriever.py    # Query → RetrievedChunk[]
├── llm/
│   ├── providers/
│   │   ├── openai.py
│   │   └── anthropic.py
│   └── prompts/        # prompt templates
├── core/
│   ├── agent.py        # Agent orchestration
│   ├── prompt_opt.py   # DSPy integration
│   └── types.py        # Pydantic models
└── db/
    ├── vector.py       # Pinecone client
    └── metadata.py     # Postgres session
      
⚠️ 흔한 함정:
🛠️ 아키텍처 지원: FastAPI(API), LangGraph(에이전트), Pydantic AI(타입), Prefect/Airflow(인덱싱 워크플로우).