파이썬 파일 하나로 AI용 API서버를 동적 라우팅 시스템으로 만드는 방법

궁금하면 500원·2025년 8월 4일
0

AI 미생지능

목록 보기
65/68

FastAPI 기반 동적 라우팅 시스템

안녕하세요! 파이썬을 이용해 AI 모델이나 특정 로직을 API로 서비스해야 할 때마다, 파일을 수정하고 서버를 재시작하는 과정이 번거롭게 느껴진 적이 있으신가요? 오늘은 이러한 문제를 해결해 줄 동적 API 관리 시스템을 직접 구축하는 방법을 소개합니다.

우리가 만들 시스템은 다음과 같은 핵심 기능을 제공합니다.

  1. 파이썬 파일 업로드만으로 API 생성: 특정 포맷에 맞춰 파이썬 파일을 작성하고 업로드하면, 해당 파일의 함수가 즉시 웹 API 엔드포인트로 작동합니다.
  2. 간단한 관리자 페이지: 모든 API의 엔드포인트와 코드를 한눈에 보고 수정할 수 있는 관리자 페이지를 제공합니다.
  3. 서버 재시작에도 설정 유지: 엔드포인트 정보는 파일로 저장되어 서버가 재시작되어도 기존 API가 자동으로 복원됩니다.

🛠️ 시스템 핵심 구조

이 시스템은 FastAPI를 백엔드로 사용하고, HTML과 JavaScript를 이용한 간단한 프론트엔드로 구성됩니다.

1. 프론트엔드: API 관리자 페이지 (admin.html)

사용자가 API를 생성, 수정, 삭제할 수 있는 직관적인 인터페이스를 제공합니다.

  • 사이드바: 현재 등록된 모든 엔드포인트 목록을 표시합니다.
  • 폼 영역: 선택된 엔드포인트의 파일명, 엔드포인트 URL, 함수명, 그리고 실제 파이썬 코드 내용을 보여줍니다.
  • 동작 버튼: Create, Update, Delete 버튼으로 API를 관리할 수 있습니다.

프론트엔드 코드는 JavaScript의 fetch 함수를 이용해 백엔드와 통신하며, 사용자의 동작에 따라 필요한 API 요청을 보냅니다.

2. 백엔드: FastAPI 서버 (main.py)

백엔드는 동적 라우팅의 핵심 로직을 담당합니다.

  • 동적 라우트 등록: importlib.util 모듈을 사용해 업로드된 파이썬 파일을 메모리에 로드합니다. 이후 app.add_api_route() 함수를 호출하여 로드된 파일의 함수를 FastAPI의 라우터에 추가합니다. 이 과정은 서버 재시작 없이 실시간으로 이루어집니다.
  • 메타데이터 관리: 엔드포인트, 파일 경로, 함수명 같은 라우트 정보는 routes.json 파일에 저장됩니다. 덕분에 서버가 재시작될 때 이 파일을 읽어와 기존 엔드포인트를 자동으로 복원할 수 있습니다.
  • 의존성 자동 설치: 파이썬 파일 내에 # requirements: 주석으로 필요한 라이브러리를 명시하면, subprocess를 통해 pip install을 자동으로 실행합니다. 이 기능은 AI 관련 라이브러리처럼 복잡한 의존성이 있을 때 매우 유용합니다.
# main.py의 핵심 코드
import importlib.util
from fastapi import FastAPI, UploadFile, Form
# ... (생략) ...

def register_route(route_meta: dict):
    # 파일을 동적으로 로드하고 함수를 가져옴
    handler = load_handler(route_meta["file"], route_meta["name"])
    # FastAPI에 라우터 추가
    app.add_api_route(route_meta["endpoint"], handler, methods=[route_meta["method"]])

@app.post("/upload-endpoint")
async def upload_endpoint(file: UploadFile, ...):
    # ... 파일 저장 및 의존성 설치 ...
    route_meta = {
        "name": name,
        "endpoint": endpoint,
        "method": method.upper(),
        "file": file_path
    }
    register_route(route_meta) # 새로운 라우트 등록
    # ... 메타데이터를 파일에 저장 ...
    return {"status": "added"}

# ... 기타 라우트들 및 서버 시작 로직 ...

🚀 사용해보기: 실제 API 만들기

이제 이 시스템을 사용해 간단한 텍스트 역순 변환 API를 만들어보겠습니다.

  1. 파이썬 파일 작성: 다음과 같은 내용으로 코드를 작성합니다. reverse_handler 함수가 API 엔드포인트의 로직이 됩니다.

    from fastapi import Request
    from fastapi.responses import JSONResponse
    
    async def reverse_handler(request: Request):
        data = await request.json()
        text = data["text"]
        return JSONResponse({"reversed_text": text[::-1]})
  2. 관리자 페이지에서 등록:

    • admin.html 페이지에 접속합니다.
    • + Add New 버튼을 클릭합니다.
    • File Name: reverse_api.py
    • Endpoint: /reverse
    • Function Name: reverse_handler
    • File Content: 위에서 작성한 코드를 복사해서 붙여넣습니다.
    • Create 버튼을 누르면 API가 즉시 생성됩니다.
  3. API 테스트:
    http://127.0.0.1:8001/reverse 엔드포인트로 JSON 데이터를 전송해보세요. 아래와 같은 결과를 얻을 수 있습니다.

    // 요청 (POST)
    {
        "text": "Hello World"
    }
    
    // 응답
    {
        "reversed_text": "dlroW olleH"
    }

이처럼 파이썬 파일과 엔드포인트 정보만으로 복잡한 설정 없이도 API를 만들어낼 수 있습니다. AI 모델을 서빙하거나, 특정 데이터 처리 로직을 빠르게 API화 해야 할 때 이 시스템이 큰 도움이 될 것입니다.

profile
꾸준히, 의미있는 사이드 프로젝트 경험과 문제해결 과정을 기록하기 위한 공간입니다.

0개의 댓글