Research/General

FastAPI 설치시 함께 설치되는 라이브러리 톺아보기

JMcunst 2025. 4. 23. 14:27
728x90

개요

FastAPI를 설치하면 다음과 같은 패키지들이 자동으로 설치됩니다. 각 패키지의 역할에 대해 자세히 알아보겠습니다.

annotated-types==0.7.0
anyio==4.9.0
fastapi==0.115.12
idna==3.10
pydantic==2.11.3
pydantic_core==2.33.1
sniffio==1.3.1
starlette==0.46.2
typing-inspection==0.4.0
typing_extensions==4.13.2

각 패키지 설명

1. fastapi==0.115.12

  • 역할: 타입 힌트를 사용하는 고성능 Python 웹 프레임워크입니다. RESTful API 개발에 최적화되어 있습니다.
  • 기반: Starlette (ASGI 웹 프레임워크) + Pydantic (데이터 유효성 검사)
  • 특징:
    • 자동 문서화: Swagger UI, ReDoc을 자동으로 생성하여 API 문서화 작업을 간소화합니다.
    • 비동기 지원: async / await 키워드를 사용하여 비동기 코드를 작성할 수 있습니다.
    • 의존성 주입 (Dependency Injection): 코드 재사용성 및 테스트 용이성을 향상시키는 의존성 주입 시스템을 제공합니다.

2. starlette==0.46.2

  • 역할: FastAPI의 내부 HTTP 코어 프레임워크입니다.
  • 기능:
    • 라우팅: URL 경로에 따라 적절한 함수를 실행합니다.
    • 미들웨어: 요청 및 응답 처리에 관여하여 로깅, 인증 등의 공통 기능을 처리합니다.
    • WebSocket: 실시간 양방향 통신을 지원합니다.
    • 백그라운드 작업: HTTP 요청 외부에서 실행되는 작업을 처리합니다.
  • 기원: Django REST Framework의 개발자인 Tom Christie가 만들었습니다.

3. pydantic==2.11.3

  • 역할: Python 객체의 타입 기반 데이터 유효성 검사 및 직렬화를 수행합니다.
  • 기능:
    • BaseModel을 통한 스키마 정의: 데이터 모델의 구조와 타입을 정의합니다.
    • 자동 JSON 변환: Python 객체와 JSON 데이터 간의 자동 변환을 처리합니다.
  • 기원: "Parsing + Validation = Pydantic" 슬로건으로, Samuel Colvin이 개발했습니다.

4. pydantic_core==2.33.1

  • 역할: Pydantic v2의 Rust 기반 유효성 검사 엔진입니다. 속도 및 메모리 사용량을 최적화합니다.
  • 특징: Rust로 구현된 바이너리 모듈입니다.

5. annotated-types==0.7.0

  • 역할: Annotated 타입에 사용되는 메타데이터 타입을 제공합니다.
  • 기원: typing.Annotated는 Python 3.9부터 도입되었으며, Pydantic 2에서 이를 활용하여 더욱 강력한 유효성 검사를 수행할 수 있습니다.
  • 예시:
  • from typing import Annotated from annotated_types import Ge, Le age: Annotated[int, Ge(0), Le(120)] # 0 이상 120 이하

6. typing-inspection==0.4.0

  • 역할: Python 타입 힌트의 내부 구조를 검사하는 기능을 제공합니다.
  • 기원: 복잡한 타입 힌트의 내부 구조를 파악해야 할 때 유용합니다.

7. typing_extensions==4.13.2

  • 역할: 이전 버전의 Python에서 typing 모듈의 최신 기능을 사용할 수 있도록 지원합니다.
  • 기원: Literal, TypedDict, Annotated와 같은 기능을 Python 3.9 이전 버전에서도 사용할 수 있게 해줍니다.

8. anyio==4.9.0

  • 역할: 여러 비동기 라이브러리(asyncio, trio)에서 공통으로 사용할 수 있는 인터페이스를 제공하여, 비동기 코드의 이식성을 높입니다. 즉, asynciotrio 중 어느 것을 사용하더라도 anyio를 통해 작성된 코드는 동일하게 작동할 수 있습니다.
  • 기원: Trio에서 영감을 받아 여러 비동기 루프와의 호환성을 제공하기 위해 개발되었습니다. asyncio 외에 다른 비동기 라이브러리를 사용하는 경우에도 원활하게 통합될 수 있도록 설계되었습니다.
  • FastAPI에서: WebSocket, 백그라운드 작업 등, FastAPI의 비동기 기능을 구현하는 기반이 됩니다. FastAPI는 anyio를 통해 다양한 비동기 실행 환경을 추상화하고, 개발자에게 일관된 비동기 프로그래밍 경험을 제공합니다.

9. sniffio==1.3.1

  • 역할: 현재 실행 중인 비동기 이벤트 루프를 감지합니다. anyio가 어떤 이벤트 루프(asyncio 또는 trio)에 연결해야 하는지 자동으로 파악하는 데 사용됩니다.
  • 기원: anyio가 어떤 이벤트 루프에 연결해야 하는지 파악하기 위해 사용됩니다. sniffio는 실행 환경을 '스니핑'하여 적절한 이벤트 루프를 식별하고, anyio가 해당 루프와 상호 작용할 수 있도록 돕습니다.

10. idna==3.10

  • 역할: 국제화된 도메인 이름(IDN)을 인코딩/디코딩합니다. (예: "도메인.한국"과 같은 한국어 도메인 주소를 처리)
  • 사용처: httpx, requests와 같은 HTTP 클라이언트에서 국제화된 URL을 처리할 때 사용됩니다. idna는 이러한 클라이언트가 다양한 언어의 문자를 포함하는 도메인 이름을 올바르게 처리하도록 지원하며, 이는 FastAPI 애플리케이션이 외부 서비스와 통신할 때 중요합니다.

요약 도식

        📂 FastAPI
            │
    ┌──────────────────┐
    │                  │
Starlette          Pydantic(Core)
    │                  │
 AnyIO ↔ Sniffio      typing-inspection
    │                  │
typing_extensions    annotated-types
728x90