
FastAPI는 Python의 표준 타입 힌트* 기반의 API를 구축하기 위한 웹 프레임워크입니다. Node.js나 Go과 대등할 정도로 빠른 개발 속도와 처리 속도를 가지고 있어 Fast라는 이름이 붙여졌습니다.
*표준 타입 힌트 : Python 3.6 버전부터 도입된 type hinting 문법을 API 개발에 그대로 활용하는 것. 자세한 내용은 아래 후술
간단한 작성방식
Starlette과 Pydantic을 기반으로 하여 빠른 코드 작성을 지원할 뿐 아니라, 코드 중복을 최소화하고 코드 자체를 간결하게 만들어 직관적이고 배우기 쉬운 프레임워크를 설계하였습니다. 예를 들어 서버의 라우팅 과정을 Flask와 비교하면 이름 식별자나 routing 파일 위치(Flask에서는 blueprint 위치)등을 작성하지 않는 것을 볼 수 있습니다.
# Flask
news_router = Blueprint('news', __name__)
@news_bp.route('', methods=['GET'])
def get_news():
# FastAPI
news_router = APIRouter()
@news_router.get("")
def get_news():
표준 타입 힌트
이전 프레임워크에서는 데이터의 형식을 검증하기 위해 별도의 라이브러리나 복잡한 코드가 필요했지만, FastAPI는 Python 기본 문법만으로 이를 해결합니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None): # 표준 타입 힌트
return {
"item_id": item_id,
"q": q
}
위 코드는 item의 id에 해당하는 서버 요청을 실행하느 엔드포인트 함수입니다. 여기서 FastAPI는 표준 타입 힌트를 보고 다음 작업들을 자동으로 수행합니다.
- 데이터 파싱: URL이 "/items/123"과 같이 들어왔다면, "123"을 파이썬 정수 123으로 자동 변환합니다.
- 데이터 검증: URL이 "/items/abc"와 같이 들어왔다면, 코드 실행 전 유효하지 않다는 에러를 클라이언트에 반환합니다.
- 자동 완성: 개발환경 프로그램(VS Code 등)에서 해당 변수가 int임을 인지하고 관련 함수들을 추천해 줍니다.
타입 힌트로 Pydantic의 사용자 지정 타입 또한 사용할 수 있습니다.
비동기 처리
이전에 존재했던 Python 웹 프레임워크인 Flask나 Django는 동기 방식(Synchronous)이지만, FastAPI는 비동기 방식(Ascynchronous)입니다. Flask는 기본적으로 한 번에 하나의 요청을 처리하는 구조입니다. 하지만 FastAPI는 서버가 기다리는 시간을 허비하지 않기 때문에, 빠른 처리가 가능해집니다.
서버 실행
FastAPI는 자체 내장 서버가 없기 때문에, uvicorn같은 외부 서버를 이용해 따로 실행해주어야 합니다.
터미널에서 다음과 같은 명령어를 통해 서버를 실행할 수 있습니다.
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
python 코드 내에서 실행하려면 이런 식으로 작성하면 됩니다.
import uvicorn
if __name__ == "__main__":
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)
app.main:app | ./app/main.py의 app 객체를 실행합니다.
host | 서버가 실행될 주소입니다. (0.0.0.0은 모든 외부 기기에 대해 접속을 허용하는 상태입니다)
port | 서버가 요청을 받을 포트 번호 입니다.
reload | 코드에 수정사항이 발생했을 때, 서버를 자동으로 재시작합니다.
https://fastapi.tiangolo.com/ko/
FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com
'Backend > Python' 카테고리의 다른 글
| [FastAPI] lifespan - 생명주기 (0) | 2026.05.11 |
|---|---|
| [FastAPI] APIRouter - 라우팅 설정하기 (0) | 2026.05.02 |