티스토리 뷰

반응형

FastAPI 기반 로컬 LLM + RAG 챗봇 만들기 – 주요 기술 스택 소개

1.2 주요 기술 스택 소개

이 프로젝트에서는 FastAPI, Ollama, LangChain, PostgreSQL + pgvector, React를 활용하여 보안성과 성능이 뛰어난 로컬 LLM + RAG 챗봇을 개발합니다. 각 기술 스택의 개념과 장점을 상세히 살펴보겠습니다.


1.2.1 FastAPI 개요 및 장점

🔹 FastAPI란?

FastAPIPython 기반의 비동기(Asynchronous) 웹 프레임워크로, 빠른 API 개발자동 문서화 기능을 제공하는 최신 프레임워크입니다. RESTful API 개발에 최적화되어 있으며, 동기(Synchronous) 방식과 비동기(Asynchronous) 방식을 모두 지원합니다.

기존 웹 프레임워크(FastAPI vs Flask vs Django)

특징 FastAPI Flask Django

비동기(Async) 지원 ✅ (내장 지원) ❌ (기본 미지원) ✅ (Django 3.1+부터 가능)
속도 🚀 빠름 (Node.js 수준) 🐢 느림 ⚡ 중간 (ORM 영향)
타입 검증 ✅ (Pydantic 활용) ❌ (기본 미지원) ❌ (미약함)
자동 문서화 ✅ (Swagger & Redoc 자동 생성) ❌ (수동 작성 필요) ❌ (Django REST Framework 필요)
API 개발 최적화 ❌ (MVC 아키텍처 중심)

FastAPI는 Flask보다 속도가 훨씬 빠르고, Django보다 API 개발이 간편하며, Node.js 수준의 성능을 제공합니다.


🔹 FastAPI의 주요 장점

반응형

1. 초고속 API 서버
FastAPI는 StarlettePydantic을 기반으로 설계되어 Node.js 수준의 고성능 API를 제공합니다.

  • FastAPI는 Flask보다 최대 3~5배 빠른 속도를 자랑합니다.
  • 비동기 처리(Async/Await)를 지원하여 다수의 요청을 동시에 처리할 수 있습니다.

2. 자동 API 문서화 (Swagger / ReDoc 지원)
FastAPI는 API를 작성하는 순간, Swagger UI와 ReDoc을 자동 생성합니다.

  • API를 쉽게 테스트하고, 개발 속도를 향상할 수 있습니다.
  • API 문서를 별도로 만들 필요 없이, FastAPI 내부에서 자동 관리됩니다.

3. Python 타입 힌트 기반의 간결한 코드
FastAPI는 Python의 타입 힌트(Type Hint) 를 적극 활용하여 코드의 가독성을 높이고, 데이터 유효성 검사를 자동화합니다.

🔹 Flask vs FastAPI 비교 (코드 예제)

📌 Flask로 JSON API 만들기

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/hello", methods=["GET"])
def hello():
    return jsonify({"message": "Hello, World!"})

if __name__ == "__main__":
    app.run(debug=True)

📌 FastAPI로 동일한 API 만들기

from fastapi import FastAPI

app = FastAPI()

@app.get("/hello")
async def hello():
    return {"message": "Hello, World!"}

➡️ FastAPI는 더 적은 코드량으로, 비동기(Async) 처리를 기본 지원합니다! 🚀

4. 데이터 검증 및 보안 강화
FastAPI는 Pydantic을 사용하여 API 요청 데이터의 타입을 검증합니다.

  • 유효성 검사(Validation)가 자동으로 적용되며, 데이터 형식이 올바르지 않으면 에러를 반환합니다.
  • SQL 인젝션(SQL Injection)과 같은 보안 위협을 방지할 수 있습니다.

🔹 FastAPI 데이터 검증 예제 (Pydantic 활용)

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    name: str
    age: int
    email: str

@app.post("/users/")
async def create_user(user: User):
    return {"message": f"{user.name}님이 등록되었습니다!"}

🚀 Pydantic을 활용하면 데이터 검증이 간편해지고, API의 신뢰성이 향상됩니다.

5. 강력한 비동기(Async/Await) 지원
FastAPI는 Python의 async/await 문법을 활용한 비동기 API를 지원합니다.

  • 대량의 요청을 동시에 처리할 수 있어 성능이 뛰어납니다.
  • AI 챗봇과 같이 빠른 응답이 필요한 서비스에 최적화되어 있습니다.

🔹 비동기 API 예제 (데이터베이스 조회 예시)

from fastapi import FastAPI
import asyncio

app = FastAPI()

async def fetch_data():
    await asyncio.sleep(2)
    return {"data": "LLM 응답 결과"}

@app.get("/data")
async def get_data():
    result = await fetch_data()
    return result

💡 비동기 방식(Async/Await)을 사용하면 I/O 작업이 많은 API에서도 빠른 응답 속도를 보장합니다.


1.2.1 FastAPI의 활용 – 로컬 LLM 챗봇 프로젝트에서의 역할

💡 FastAPI는 이 프로젝트에서 다음과 같은 역할을 수행합니다.
1️⃣ Ollama API 연동 – 로컬에서 실행 중인 LLM 모델을 FastAPI에서 호출
2️⃣ 사용자 질문 처리 – 사용자의 질문을 받아 데이터베이스와 LLM을 활용한 응답 생성
3️⃣ RAG 시스템과 통합 – LangChain을 활용하여 PostgreSQL + pgvector 기반의 문서 검색 기능 연동
4️⃣ React 프론트엔드와 연결 – 챗봇 UI와 API 통신


🚀 결론

  • FastAPI는 빠르고, 가볍고, 비동기 API 지원이 강력한 최신 Python 웹 프레임워크입니다.
  • 자동 API 문서화, Pydantic을 활용한 데이터 검증, 비동기 처리 성능 덕분에 AI 챗봇 API 개발에 최적화된 선택입니다.
  • 이 프로젝트에서는 FastAPI를 기반으로 Ollama, LangChain, PostgreSQL(pgvector)과 연동하여 강력한 RAG 챗봇을 구축할 것입니다.

📌 다음 글에서는 1.2.2 Ollama를 활용한 로컬 LLM 개념과 활용 방법을 다룹니다! 🚀

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함
반응형