클라이언트가 서버로 보내는 HTTP 요청을 처리하는 과정이다. 사용자가 요청한 내용이 지정된 경로로 전송되면, 미리 정의된 로직이 해당 요청을 처리하고 적절한 응답을 반환한다.
먼저, 이전 포스트에서 만들었던 애플리케이션을 살펴보자
# api.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def welcome() -> dict :
return {
"message": "Hello World"
}
이렇게 app이라는 변수로 초기화한 FastAPI() 인스턴스를 사용하여 간단하게 라우팅을 처리할 수 있다.
⚠️ 하지만!
이 방식은 라우팅 중에 주로 단일 경로만 고려하는 애플리케이션에서 사용된다. 고유한 함수를 각각의 라우트가 FastAPI() 인스턴스를 사용하는 경우 애플리케이션은 한 번에 여러 라우트를 동시에 처리할 수 없다. 왜나하면 uvincorn이 하나의 엔트리 포인트만 실행할 수 있기 때문이다.
여러 함수를 사용하는 연속적인 라우트 처리는 다중 라우팅을 이용해야한다.
APIRouter라는 클래스를 사용하면 다중라우팅이 허용되기 때문에 해당 문제를 해결할 수 있다.
APIRouter 클래스는 다중 라우팅을 위한 경로 처리 클래스로, fastapi 패키지에 포함되어 있다. APIRouter를 사용하면 애플리케이션의 라우팅과 처리 로직을 독립적으로 구성하고 모듈화할 수 있다.
실습을 통해 APIRouter 사용법을 살펴보자!
먼저, 실습을 위해 todo.py라는 사로운 파일을 생성해 준다.
# todo.py
from fastapi import APIRouter # APIRouter 임포트
todo_router = APIRouter() # APIRouter() 인스턴스 생성
todo_list = []
@todo_router.post("/todo")
async def add_todo(todo: dict) -> dict :
todo_list.append(todo)
return {
"message": "Todo added successfully"
}
@todo_router.get("/todo")
async def retrieve_todos() -> dict :
return {
"todo": todo_list
}
위 코드에서, todo처리를 위해 두 개의 라우트를 추가했다. 첫 번째 라우트는 todo_list에 새로운 todo를 추가하는 POST 메서드를 다루고 있으며, 두 번째 라우트는 모든 todo 아이템을 조회하는 GET 메서드를 다루고 있다.
코드 작성이 끝났다면 해당 코드가 잘 실행되는지 확인해 보자!
APIRouter 클래스는 FastAPI 클래스와 유사한 방식으로 작동한다. 그러나 uvicorn은 APIRouter() 인스턴스를 사용하여 애플리케이션을 직접 실행할 수는 없다. APIRouter 클래스로 정의한 라우트를 사용하려면, 이를 FastAPI() 인스턴스에 추가해야 외부에서 접근할 수 있다.
위해서 생성한 todo 라우트를 외부에 공개하기 위해서는 include_router() 메서드를 사용하여 FastAPI() 인스턴스에 추가해 주어야 한다!
include_router()는 APIRouter 클래스로 정의한 라우트를 메인 애플리케이션의 인스턴스로 추가할 수 있다.
먼저 기존 api.py파일에 이번에 만든 todo.py 파일에서 생성한 todo_router를 임포트한다.
그리고 FastAPI() 인스턴스의 include_router() 메소드를 아래와 같이 사용한다.
# api.py
from fastapi import FastAPI
from todo import todo_router
app = FastAPI()
@app.get("/")
async def welcome() -> dict :
return {
"message": "Hello World"
}
app.include_router(todo_router)
이제 모든 테스트 준비는 마쳤다!
아래 명령어를 통해 애플리케이션을 실행해 본다.
uvicorn api:app --port 8000 --reload
그리고 http://127.0.0.1:8000/docs 로 접근하게 되면 지금까지 작성했던 api를 UI를 통해 확인하고 테스트 할 수 있다.

위 홈페이지에서 Try It Out > Execute 버튼을 누르면 API가 호출되고 결과 값을 확인해 볼 수 있다. Request Body에 알맞은 형식의 데이터를 아래와 같이 입력하면 todo가 추가된다.

GET 메서드를 통해 POST 메서드를 통해 추가한 todo를 확인할 수 있다.

작성한 모든 코드가 아주 잘 동작하는 것을 확인할 수 있다. 😊
이렇게 이번 포스트에서는 FastAPI 라우팅에 관해서 간단하게 알아보았다!
참고자료: FastAPI를 사용한 파이썬 웹 개발 (한빛미디어)