안녕하세요! 파이썬을 이용해 AI 모델이나 특정 로직을 API로 서비스해야 할 때마다, 파일을 수정하고 서버를 재시작하는 과정이 번거롭게 느껴진 적이 있으신가요? 오늘은 이러한 문제를 해결해 줄 동적 API 관리 시스템을 직접 구축하는 방법을 소개합니다.
우리가 만들 시스템은 다음과 같은 핵심 기능을 제공합니다.
이 시스템은 FastAPI를 백엔드로 사용하고, HTML과 JavaScript를 이용한 간단한 프론트엔드로 구성됩니다.
admin.html
)사용자가 API를 생성, 수정, 삭제할 수 있는 직관적인 인터페이스를 제공합니다.
Create
, Update
, Delete
버튼으로 API를 관리할 수 있습니다.프론트엔드 코드는 JavaScript의 fetch
함수를 이용해 백엔드와 통신하며, 사용자의 동작에 따라 필요한 API 요청을 보냅니다.
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를 만들어보겠습니다.
파이썬 파일 작성: 다음과 같은 내용으로 코드를 작성합니다. 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]})
관리자 페이지에서 등록:
admin.html
페이지에 접속합니다.+ Add New
버튼을 클릭합니다.reverse_api.py
/reverse
reverse_handler
Create
버튼을 누르면 API가 즉시 생성됩니다.API 테스트:
http://127.0.0.1:8001/reverse
엔드포인트로 JSON 데이터를 전송해보세요. 아래와 같은 결과를 얻을 수 있습니다.
// 요청 (POST)
{
"text": "Hello World"
}
// 응답
{
"reversed_text": "dlroW olleH"
}
이처럼 파이썬 파일과 엔드포인트 정보만으로 복잡한 설정 없이도 API를 만들어낼 수 있습니다. AI 모델을 서빙하거나, 특정 데이터 처리 로직을 빠르게 API화 해야 할 때 이 시스템이 큰 도움이 될 것입니다.