FastAPI 개념 및 구성요소

zzin·2025년 4월 4일

SKALA

목록 보기
12/12

1. Fast API란?

FastAPI는 웹 애플리케이션 개발을 위한 Python 기반의 백엔드 프레임워크다.

  • REST API를 빠르고 쉽게 만들기 위한 도구로 많이 사용된다.
  • 특히 비동기(Async) 처리와 자동 문서화(Swagger UI) 지원이 뛰어나다.
  • Python 생태계의 주요 라이브러리들과 호환이 잘 된다. (예: Pydantic, SQLAlchemy, Uvicorn 등)

Pytorch, TensorFlow, Keras 같은 프레임워크나 라이브러리를 사용하여 딥러닝 모델 개발을 하면, 그 모델을 웹 API로 외부에서 호출 가능하게 만드는 용도로 FastAPI가 쓰인다!

⇒ 즉, “Serving”을 위한 프레임워크 라고 보면 된다.

⇒ Java에서는 Spring Boot가 있다면, Python에는 FastAPI가 있는 것!

FastAPI 사용 예시

PyTorch 모델을 FastAPI로 서빙하는 간단한 예시를 살펴보자.

from fastapi import FastAPI   # FastAPI 불러오기
import torch
from model import MyModel  # 사전 학습된 모델(딥러닝 모델 정의)

app = FastAPI()            # FastAPI 인스턴스 생성
model = MyModel()          # 딥러닝 모델 인스턴스 생성
model.load_state_dict(torch.load("model.pth"))#학습된 모델 가중치 로드
model.eval()               

@app.post("/predict")      # FastAPI 라우팅 (API 경로 설정)
def predict(data: dict):   # 클라이언트가 JSON으로 보낸 데이터받기
    input_tensor = preprocess(data)  # 데이터 전처리 (딥러닝용)
    output = model(input_tensor)     # 딥러닝 모델 추론
    return {"result": output.tolist()}  # 예측 결과 JSON으로 반환

클라이언트가 /predict에 JSON 데이터로 요청을 보내면, 모델이 예측하고 결과를 반환해준다.

2. FastAPI와 마이크로 프레임워크

※ 핵심요약※

FastAPI는 마이크로 프레임워크의 한 종류다.
즉, 마이크로 프레임워크는 개념이고, FastAPI는 그 개념에 해당하는 구체적인 구현체(Framework) 라고 보면 된다.

마이크로 프레임워크란?

마이크로 프레임워크(Micro Framework)는 최소한의 핵심 기능만 제공하는 경량 웹 프레임워크로, Web API 개발에 특화되어 있으며 SPA 백엔드에 주로 사용된다.

  • 작은 규모의 REST API 서버 구축이나 모델 서빙(MLOps), 비동기 처리에 적합하다.
  • HTML 템플릿 렌더링보다 RESTful API 제공에 집중할 때 사용한다.
  • 풀스택 프레임워크(Django 등)와는 달리 ORM, 인증 관리자 페이지 같은 내장 기능은 없다.
  • 라우팅, 요청/응답 처리 기능 중심으로 최소한의 기능만 탑재된다.
  • 대표적인 마이크로 프레임워크에는 FastAPI, Flask가 있다.

마이크로 프레임워크 중 왜 FastAPI??

FastAPI는 단순히 가벼운 웹 프레임워크 이상으로, 마이크로 프레임워크에 속하면서도 비동기 처리와 타입 안전성을 강조한 Python 웹 프레임 워크다.

📌 FastAPI 핵심 특징

기능설명
자동 문서화Pydantic 스키마 기반으로 Swagger UI, ReDoc 자동 생성 (자동 문서화로 테스트 및 유지 보수 편리)
타입 안전성Python의 타입 힌트 기반 → 개발 시점에 타입 검증 가능
비동기 지원async def 기반, ASGI 기반 서버와 연동 가능 (ML예측, 실시간 처리에 빠른 비동기 처리 필요)
빠른 성능Starlette 기반으로 Flask보다 빠른 처리 속도 (Flask보다 2~5배 빠르다고 평가)
Schema-Driven DevelopmentAPI 요청/응답 구조를 명확히 정의하여 프론트-백엔드 병렬 개발 가능

Micro Framework vs Full-stack Framework

  • Micro Framework (마이크로 프레임워크)
    • 경량화된 웹 프레임워크로 라우팅, 요청/응답 처리, 최소한의 미들 웨어 등 핵심 기능만 제공한다.
    • 필요한 기능(ORM, 인증, 관리자 페이지 등)은 개발자가 직접 추가해야 한다.
    • 비유하자면, 마이크로 프레임 워크는 레고 블록 몇개만 있는 상태고, 내가 필요한 걸 하나씩 조립해서 완성하는 것!
  • Full-stack Framework (풀스택 프레임워크)
    • 백엔드 개발에 필요한 기능들을 풀셋으로 제공한다.
    • ORM, 인증 시스템, 세션 관리, 템플릿 엔진, 관리자 페이지까지 내장되어 있어 빠르게 뒙 애플리케이션을 만들 수 있도록 도와준다.
    • 비유하자면, 풀 스택 프레임 워크는 레고 성이 거의 다 만들어져 있어서 나는 꾸미기만 하면 되는 것!

[참고]

Schema 와 Pydantic

  • Schema (스키마란)?

    Schema(스키마)는 데이터의 구조와 형식을 정의한 설계도다.
    즉, 데이터가 어떤 모양이어야 하는지 미리 정해놓은 규칙이라 생각하면 된다.

    예시로, 회원 정보를 저장하는 경우 shcema를 아래와 같이 작성할 수 있다.
    {
      "username": "apple123",
      "email": "apple@example.com",
      "age": 25
    }
    이런 JSON 데이터를 API로 받을 때, 다음과 같이 정의할 수 있다.
    필드명자료형필수 여부
    username문자열(str)✔️ 필수
    email문자열(str)✔️ 필수
    age정수형(int)❌ 선택
    이런 형식을 스키마라 부른다.
    Python에서는 Pydantic
    Django에서는 Serializer
    Database에서는 Table Schema로 표현된다.
  • Schema가 왜 필요할까??
    • API에 이상한 데이터(ex. 문자 대신 숫자)가 들어오는 걸 막을 수 있다.
    • 데이터 유효성 검사를 자동으로 해준다.
    • 문서화에도 도움 된다. (어떤 데이터를 주고받는지 명확하게 보여주니까)
  • Pydantic이란? Pydantic은 Python에서 데이터 검증과 직렬화(serialize)를 쉽게 해주는 라이브러리다. FastAPI에서는 이걸 써서 요청(request)이나 응답(response) 데이터를 자동으로 검사하고 파싱해준다. → “들어온 데이터가 우리가 원하는 형식과 맞는지 확인해줘!”할 때 쓰는 도구로 생각!
  • Pydantic 예제
    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    # 1. 데이터 스키마 정의
    class User(BaseModel):
        username: str
        email: str
        age: int
    
    # 2. POST 요청으로 사용자 생성
    @app.post("/users")
    def create_user(user: User):
        return {
            "message": "User created successfully",
            "user": user
        }
    • User라는 클래스를 Schema로 쓴 거다.
    • FastAPI는 클라이언트가 보낸 JSON을 User에 맞춰 자동으로 파싱하고 검사한다 → 만약 age는 int값이여야 하는데, str이라면? 이런설 Pydantic이 잡아줘서 알려준다!
    • user:User → FastAPI가 request body에서 데이터를 읽고 User로 만들어준다.
  • Pydantic의 주요 기능
    기능예시
    자료형 검사age: int, email: str
    기본값 지정age: int = 18
    선택값 허용age: Optional[int]
    유효성 검사 추가EmailStr, conint(gt=0)
    중첩 구조class Address(BaseModel):, address: Address

ASGI란?

ASGI(Asynchronous Server Gateway Interface)는 Python 비동기 웹 애플리케이션을 위한 비동기 표준 인터페이스이다.

  • WSGI(Web Server Gateway Interface)는 동기 기반 → Flask, Django 기본 구조
  • ASGI는 이벤트 루프 기반 비동기 처리 가능 → WebSocket, Server-Sent Events 처리 가능
  • FastAPI는 ASGI 호환 프레임워크로 Uvicorn, Hypercorn 같은 비동기 서버와 잘 호환됨
  • async/await 키워드를 기반으로 동시성 처리가 가능하므로 I/O 병목 최소화에 유리

0개의 댓글