FastAPI, LLM 연동하기 (1) - FastAPI 사용 가이드

2025. 10. 13. 15:43·AI
728x90

일단 하고 싶은 것 → 채팅(String)을 Input으로 보내서 스트리밍 방식으로 LLM에게 응답 받기 이걸 위해서 필요한 것들에 대해 공부를 해 볼 것이다.

  1. 외부로부터 채팅을 입력받을 서버가 필요 = FastAPI
  2. 채팅 내용을 기반으로 LLM에게 질의 = LangChain ? Langgraph ?
  3. 응답 생성하여 리턴

FastAPI, uvicorn

FastAPI란 현대적이고 빠르며, 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 비동기 웹 프레임워크이다.

 

이 프레임워크로 작성된 코드를 구동하기 위해서 어떤 명령어가 필요한지 대강 살펴보면 다음과 같다.

uvicorn main:app --host 0.0.0.0 --port 8080 --reload

FastAPI 자체는 HTTP를 통해 들어온 요청을 라우팅하고 처리할 API 프레임워크이고, 클라이언트의 요청을 앞단에서 처리해서 넘겨줄 중간 계층 인터페이스가 필요한데 그 역할을 하는것이 uvicorn

Spring Boot 또한 단순 개발 프레임워크이고, 실제로 인입되는 요청을 처리하기 위해서 Embedded Tomcat이 내장되어 있듯이 비슷한 개념으로 이해하면 될 것 같다.

일단 uvicorn에 대해 이해하기 위해서 먼저 WSGI와 ASGI에 대해서 알아보자

 

ASGI , WSGI

  • CGI (Common Gateway Interface) : 파이썬 웹앱과 웹서버 사이에 통신을 주고받기 위한 공통의 표준 인터페이스 이러한 공통 인터페이스가 없다면 웹 서버로부터의 요청을 핸들링하는 중간 계층을 언어/프레임워크 별로 개발해야 되기 때문에 매우 번거로울 것이다.
  • 웹서버가 내장된 Spring Boot의 Tomcat과는 살짝 다르기는 하다. Java진영은 WAS 표준의 서블릿 컨테이너가 존재하기 때문에 별도의 인터페이스가 필요하지 않음 → Tomcat, Jetty 등에 내장되어 있음 그래서 웹서버만 거치면 바로 요청이 들어올 수 있는 것이다.

파이썬 계열의 Gateway Interface의 변화 과정에 대해서 더 자세한 내용을 원한다면 여기 링크를 보는게 좋을 듯 하다 : https://velog.io/@hwaya2828/WSGI-ASGI

정리하면 다음과 같음

  • WSGI는 웹 서버와 애플리케이션 사이에 미들웨어 역할을 하며 기술적으로는 웹 서버도 WSGI에 대한 작동 코드가 필요하고, 애플리케이션 또한 WSGI에 대한 작동 코드가 필요한 Client-Server Model을 응용한 것
  ASGI WSGI
구현체 uvicorn gunicorn
지원 방식 비동기, 웹소켓 등 지원 동기 방식만 지원
프레임워크 FastAPI Django, Flask

실제 프로덕션 환경에서는 gunicorn을 이용해 멀티 프로세스를 띄우고 uvicorn worker를 실행하는 방식으로 많이 사용한다고 함

// worker 4개로 실행, worker class로 uvicorn.workers.UvicornWorker 클래스 지정
gunicorn main:app --workers 4 --worker-class \\
uvicorn.workers.UvicornWorker --bind 0.0.0.0:80
  • Uvicorn = ASGI 서버 (요청 처리 엔진)
  • Gunicorn = 프로세스 매니저 (워커 관리 & 로드밸런싱), 마스터 프로세스 역할
  • uvicorn만 사용 시 재시작이나 graceful shutdown 등 안정적인 프로세스 관리가 어렵기 때문 (k8s와 같은 분산 시스템에서는 멀티프로세스 환경에서도 uvicorn만 사용하기도 함)

지금은 단일 FastAPI 프로세스로 구동하여 테스트 할 것이기 때문에 uvicorn만 사용하여 테스트해볼 예정

 

서버를 구동해보자

python -m venv myenv
source myenv/bin/activate 
pip install "fastapi[all]"


main.py

from fastapi import FastAPI

app = FastAPI()

class DataInput(BaseModel):
    prompt: str

# GET요청
@app.get("/")
def main():
    return "hello"

# POST요청 - RequestBody
@app.post("/test")
def prompt_test(asd: DataInput):
    return {"msg": asd.prompt}
    
# POST요청 - queryString
@app.post("/test2")
def prompt_test(asd: string):
    return {"msg": asd}
uvicorn main:app

FastAPI는 기본적으로 Swagger UI를 지원한다. (/docs)

728x90
저작자표시 (새창열림)

'AI' 카테고리의 다른 글

Ollama로 로컬에 LLM API 띄우기  (0) 2026.01.06
FastAPI, LLM 연동하기 (2) - FastAPI 사용 가이드  (0) 2025.10.14
MCP & A2A  (0) 2025.10.14
'AI' 카테고리의 다른 글
  • Ollama로 로컬에 LLM API 띄우기
  • FastAPI, LLM 연동하기 (2) - FastAPI 사용 가이드
  • MCP & A2A
kkap999
kkap999
IT에 관심 가득한 갑갑이의 개발&스터디 블로그 태클 언제나 환영합니다
  • kkap999
    갑갑이의 개발세상
    kkap999
    • 분류 전체보기 (104)
      • Backend (9)
        • Java&Spring&Servlet (8)
        • DB (0)
      • 알고리즘 (79)
        • 문제풀이 (70)
        • 자료구조 (7)
        • 그 외 (2)
      • AI (4)
      • Computer Science (3)
        • 네트워크 (2)
        • 컴퓨터기초 (0)
        • 리눅스마스터 (1)
      • App&FE (3)
        • FE (1)
        • Flutter (2)
      • 독서 (1)
      • 잡담&일상 (4)
        • 일상 (1)
        • 잡담 (2)
        • 음악 (1)
  • 태그

    BOJ
    BOJ15649
    알고리즘
    N과M(1)
    백준
  • 링크

    • github
  • 인기 글

  • 최근 글

  • 01-24 09:55
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
kkap999
FastAPI, LLM 연동하기 (1) - FastAPI 사용 가이드
상단으로

티스토리툴바