FastAPI 서버개발, 이벤트 라우트 변경

FastAPI는 현대적인 웹 API를 쉽게 개발할 수 있는 강력한 파이썬 웹 프레임워크입니다. 비동기 지원 및 자동 문서 생성을 통한 고성능 API 개발이 가능하여 많은 개발자들에게 사랑받고 있습니다. 이 포스트에서는 FastAPI 서버를 개발하는 과정에서 ‘이벤트 라우트 변경’에 대해 깊이 있게 알아보도록 하겠습니다.

목차

  1. FastAPI 소개
  2. 이벤트 라우트 변경이란?
  3. FastAPI에서 이벤트 라우트 변경 사용하기
  4. 예제 코드
  5. 결론

FastAPI 소개

FastAPI는 Python 3.6 이상을 지원하며, 뛰어난 성능을 자랑하는 웹 프레임워크입니다. 다음과 같은 특징을 가지고 있습니다:

  • 비동기 프로그래밍 지원: async/await 구문을 사용하여 비동기 작업을 간편하게 수행 가능
  • 자동화된 문서화: OpenAPI 및 JSON Schema를 기반으로 자동으로 API 문서를 생성
  • 높은 성능: Starlette와 Pydantic을 기반으로 하여 빠른 API 요청 처리
  • 쉬운 개발 경험: 타입 힌트 및 유효성 검사를 통해 개발자가 쉽게 이해하고 수정 가능

이벤트 라우트 변경이란?

이벤트 라우트 변경은 클라이언트의 요청에 따라 API의 동작 방식을 동적으로 변경하는 것을 의미합니다. 이러한 기능을 통해 API는 다양한 상황에 적절히 대응할 수 있습니다. 예를 들어, 사용자 인터페이스에서 특정 버튼 클릭 시 서버에서 처리해야 하는 작업을 변경할 수 있습니다.

FastAPI에서 이벤트 라우트 변경 사용하기

FastAPI에서 이벤트 라우트 변경을 구현하기 위해서는 라우터와 종속성 주입 기능을 활용할 수 있습니다. FastAPI는 이벤트가 발생했을 때 특정 경로로 요청을 라우팅하는 데 필요한 유연한 구조를 제공합니다.

필수 라이브러리 설치

pip install fastapi uvicorn

FastAPI와 Uvicorn 설치 후, 서버를 시작하기 위한 기본 코드를 작성해 보겠습니다.

기본 FastAPI 서버 설정


from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from pydantic import BaseModel

app = FastAPI()

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

users_db = {}

@app.post("/users/")
async def create_user(user: User):
    users_db[user.id] = user
    return JSONResponse(status_code=201, content=jsonable_encoder(user))

@app.get("/users/{user_id}")
async def read_user(user_id: int):
    return users_db.get(user_id, {"error": "User not found"})

위의 코드는 FastAPI의 기본적인 사용자 생성 및 조회 API를 설정한 것입니다. 이제, 사용자 이벤트에 따라 특정 라우트를 변경하는 기능을 추가해 보겠습니다.

이벤트 라우트 변경 예제

아래 예제에서는 클라이언트가 전송한 데이터에 따라 다른 라우트로 요청을 처리하게 됩니다. 사용자의 나이에 따라 다른 구매 추천 API로 라우팅하는 방식입니다.


from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

class PurchaseRequest(BaseModel):
    user_id: int
    age: int

@app.post("/purchase/")
async def purchase(request: PurchaseRequest):
    # 사용자의 나이에 따라 다른 추천 경로로 라우팅
    if request.age < 18:
        return {"message": "추천 상품: 어린이 장난감"}
    elif 18 <= request.age < 65:
        return {"message": "추천 상품: 성인 패션"}
    else:
        return {"message": "추천 상품: 노인 건강 보조제"}

위의 코드는 /purchase/ 경로를 통해 사용자 나이에 따라 적절한 상품 추천 메시지를 반환합니다.

예제 코드

전체 코드를 종합하여 아래와 같이 FastAPI 서버를 설정할 수 있습니다.


from fastapi import FastAPI, HTTPException
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from pydantic import BaseModel

app = FastAPI()

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

users_db = {}

@app.post("/users/")
async def create_user(user: User):
    users_db[user.id] = user
    return JSONResponse(status_code=201, content=jsonable_encoder(user))

@app.get("/users/{user_id}")
async def read_user(user_id: int):
    return users_db.get(user_id, {"error": "User not found"})

class PurchaseRequest(BaseModel):
    user_id: int
    age: int

@app.post("/purchase/")
async def purchase(request: PurchaseRequest):
    # 사용자의 나이에 따라 다른 추천 경로로 라우팅
    if request.age < 18:
        return {"message": "추천 상품: 어린이 장난감"}
    elif 18 <= request.age < 65:
        return {"message": "추천 상품: 성인 패션"}
    else:
        return {"message": "추천 상품: 노인 건강 보조제"}

이제 이 API를 실행하기 위해 아래의 명령어를 사용합니다.

uvicorn main:app --reload

이제 브라우저에서 http://127.0.0.1:8000/docs에 접속하시면 자동 생성된 API 문서를 확인할 수 있습니다. 사용자 생성 및 상품 추천 API를 테스트해 보세요!

결론

FastAPI를 활용한 이벤트 라우트 변경 기능에 대해 알아보았습니다. 이 기능은 사용자 입력을 기반으로 API의 동작을 유연하게 변경할 수 있어 매우 유용합니다. API의 요청을 처리하는 방식에 더 많은 논리를 추가하고 싶다면 이를 구현할 수 있는 다양한 방법이 있습니다. FastAPI의 강력한 기능을 활용하여 복잡한 이벤트 기반 로직을 손쉽게 관리할 수 있습니다.

여기까지 FastAPI와 이벤트 라우트 변경에 대한 이벤트를 살펴보았습니다. 이 레시피를 활용해 유연하고 강력한 API를 개발해 보시기 바랍니다.