본문 바로가기

AI 용어

서버와 통신에 사용되는 FastAPI / RemoteRunnable에 대해 알아보자.

 현대의 웹 애플리케이션 개발에서는 백엔드와 프론트엔드의 명확한 역할 분리가 매우 중요합니다. 특히, 복잡한 연산 작업을 효율적으로 처리하고자 할 때 이러한 분리는 필수적입니다. FastAPIRemoteRunnable은 이러한 요구를 충족시키는 데 매우 유용한 도구입니다. 특히 LangChain을 활용하여 서버를 만들 때 RemoteRunnable의 중요성은 더욱 높아집니다.

 

FastAPI와 RemoteRunnable을 결합하면, 대규모 데이터 처리와 복잡한 모델 실행 작업을 보다 효율적이고 체계적으로 처리할 수 있습니다. 이 글에서는 FastAPI와 RemoteRunnable을 중심으로, 이들이 어떻게 상호작용하며 고성능의 유연한 웹 애플리케이션을 구축할 수 있는지에 대해 다루겠습니다.

 


반응형

 

 

FastAPI

FastAPIPython으로 작성된 현대적이고 고성능의 웹 프레임워크로, 주로 RESTful API, 웹 애플리케이션, API 서버를 구축하는 데 사용됩니다. FastAPI는 비동기 지원과 자동 문서화 기능을 제공하여 개발자들이 빠르고 효율적으로 API를 개발할 수 있게 합니다. 클라이언트 요청을 처리하고, 데이터베이스와 상호작용하며, 비즈니스 로직을 구현할 수 있습니다.

 

주요 특징

  1. 고성능 : 비동기 지원으로 높은 성능을 제공합니다. Uvicorn과 같은 고성능 ASGI 서버와 함께 사용됩니다.
  2. 자동 문서화 : OpenAPI와 JSON Schema를 기반으로 자동으로 API 문서를 생성합니다. 이를 통해 API를 쉽게 이해하고 사용할 수 있습니다.
  3. 유연성 : 다양한 데이터베이스와 통합할 수 있으며, 다른 Python 라이브러리와의 호환성이 좋습니다.
  4. 쉬운 개발 : 명확하고 직관적인 코드를 작성할 수 있어 개발 속도를 높여줍니다.

 

 

RemoteRunnable

RemoteRunnable특정 작업을 원격 서버에서 실행하고, 그 결과를 가져오기 위한 도구나 인터페이스입니다. 이는 주로 분산 환경에서 복잡한 연산 작업을 처리하는 데 사용됩니다. RemoteRunnable은 자체적으로 웹 프레임워크가 아니라, 기존의 웹 프레임워크나 서비스와 통합되어 원격 작업을 처리하는 역할을 합니다. 주로 FastAPI와 같은 웹 프레임워크와 함께 사용됩니다. 클라이언트 애플리케이션이 원격 서버에서 복잡한 연산 작업을 실행하고 그 결과를 받는 데 사용됩니다.

 

주요 특징

  1. 분산 처리 : 원격 서버에서 계산 집약적인 작업을 실행하여 로컬 리소스를 절약할 수 있습니다.
  2. 동적 작업 정의 : 클라이언트 요청에 따라 실행할 작업을 동적으로 정의하고 처리할 수 있습니다.
  3. LangChain 통합 : LangChain과의 원활한 통합을 통해 복잡한 AI 작업을 분산 처리할 수 있습니다.

 

예시 코드

다음은 FastAPI와 RemoteRunnable을 결합하여 웹 애플리케이션을 구성하는 예시입니다.

 

백엔드 (FastAPI,  Uvicorn)

<Python code>

from fastapi import FastAPI
from pydantic import BaseModel
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from fastapi.responses import RedirectResponse
from langserve import add_routes
import logging

# 로깅 설정
logging.basicConfig(level=logging.DEBUG, filename='server.log', filemode='a',
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# FastAPI
app = FastAPI()

class InputData(BaseModel):
    input: str

# LangChain 모델 설정
llm = ChatOllama(model = 'EEVE-Korean-10.8B:latest')
# Prompt 설정
prompt = ChatPromptTemplate.from_template("{input}에 대하여 간략히 설명해줘.")
# chain 설정
chain = prompt | llm | StrOutputParser()

# FastAPI
@app.get("/")
async def redirect_root_to_docs():
    logger.info("Redirecting to /prompt/playground")
    return RedirectResponse("/prompt/playground")

# LangServe
add_routes(app, chain, path = "/prompt")

# uvicorn
if __name__ == "__main__":
    import uvicorn

    logger.info("Starting server")
    uvicorn.run(app, host="0.0.0.0", port=8000)

 

이 서버는 클라이언트로부터 입력 데이터를 받아 LangChain 모델을 사용하여 처리하고, 결과를 반환하는 API 엔드포인트를 제공합니다.

 

 

프론트엔드 (Streamlit과 RemoteRunnable 사용)

<Python code>

import streamlit as st
from langserve import RemoteRunnable

st.title('LangChain 기반 웹 애플리케이션')

user_input = st.text_input("질문을 입력하세요:")

if st.button('전송'):
    remote = RemoteRunnable(url="http://localhost:8000/prompt")
    result = remote.invoke({"input": user_input})
    st.write("응답:", result)

 

이 클라이언트 애플리케이션은 Streamlit을 사용하여 사용자로부터 입력을 받고, RemoteRunnable을 통해 원격 서버로 데이터를 보내어 처리된 결과를 받아와 사용자에게 표시합니다.

 

 

용어 정리

  • Uvicorn: Uvicorn은 FastAPI 애플리케이션을 실행하는 데 필요한 ASGI 서버로서, HTTP 요청을 받아 FastAPI 애플리케이션으로 전달하고, FastAPI 애플리케이션의 응답을 클라이언트에게 반환하는 역할을 합니다. Uvicorn은 FastAPI의 비동기 기능을 활용하여 높은 성능과 효율성을 제공합니다.
  • ASGI (Asynchronous Server Gateway Interface): 비동기 Python 웹 서버와 애플리케이션 간의 표준 인터페이스입니다.

 

※ 왜 프론트엔드와 백엔드를 만드는가?

 

 FastAPI와 Uvicorn을 사용하여 백엔드를 설정하고, Streamlit을 사용하여 프론트엔드 애플리케이션을 구성하는 이유는 역할 분리와 각 기술의 장점을 최대한 활용하기 위해서입니다. FastAPIAPI 제공과 데이터 처리에 중점을 두고, Streamlit대화형 UI를 제공하여 사용자가 쉽게 데이터를 입력하고 결과를 확인할 수 있게 합니다. 이 방식은 전체 시스템의 유연성과 확장성을 높여줍니다.

 

FastAPI와 Uvicorn의 역할
FastAPI는 주로 백엔드 로직을 처리하고, RESTful API 엔드포인트를 제공합니다.Uvicorn은 이러한 FastAPI 애플리케이션을 실행하는 고성능 ASGI 서버입니다.FastAPI를 통해 클라이언트 요청을 처리하고 데이터베이스와 상호작용하며, 비즈니스 로직을 수행합니다.

Streamlit의 역할
Streamlit은 데이터 과학자와 머신러닝 엔지니어들이 대화형 웹 애플리케이션을 쉽게 만들 수 있도록 도와주는 파이썬 라이브러리입니다.Streamlit은 주로 데이터 시각화와 사용자 인터페이스(UI)를 제공하는 데 중점을 둡니다.Streamlit을 사용하면 사용자가 입력한 데이터를 시각적으로 표시하고, 데이터를 실시간으로 처리하는 대화형 웹 애플리케이션을 만들 수 있습니다.

 


728x90

 

 FastAPI와 Streamlit, 그리고 RemoteRunnable의 결합은 백엔드와 프론트엔드의 역할을 명확히 분리하면서도 상호 보완적인 기능을 제공하여, 전체 시스템의 유연성과 확장성을 극대화할 수 있습니다. FastAPI는 데이터 처리와 비즈니스 로직 구현에 중점을 두어 고성능 API 서버를 구축하는 데 적합하며, Uvicorn과 함께 사용될 때 그 성능을 극대화할 수 있습니다. 한편, Streamlit은 대화형 사용자 인터페이스와 실시간 데이터 시각화를 통해 사용자가 쉽게 데이터를 입력하고 결과를 확인할 수 있도록 도와줍니다. RemoteRunnable을 통해 이 두 시스템을 연결하면, 클라이언트 애플리케이션이 원격 서버에서 복잡한 연산 작업을 실행하고 그 결과를 받아오는 효율적인 작업 분배가 가능합니다. 이러한 접근 방식은 데이터 과학과 머신러닝 프로젝트를 포함한 다양한 웹 애플리케이션 개발에 있어 매우 유용하며, 개발자들이 신속하고 효율적으로 고성능 애플리케이션을 구축할 수 있게 해줍니다.

 

 

감사합니다 :)