유튜브에서 FastAPI 관련한 영상을 봤는데 너무 간편해보여 찍먹을 해보려고 한다.
FastAPI는 API를 만들기 위한 파이썬 웹 프레임워크이다. FastAPI는 이름에 걸맞게 빠른 속도를 자랑한다. 높은 성능과 쉬운 사용성을 목표로 설계되었으며, 대규모 애플리케이션 부터 간단한 프로젝트까지 다양한 요구 사항을 만족시킬 수 있다.
더보기
API(Application Programming Interface)는 서비스의 요청과 응답에 대한 규칙을 의미하지만 보통 API라고 하면 이러한 요청과 응답을 처리하는 서비스(기능)을 의미한다.
주요 특징으로는
- 고성능 : 비동기 프로그래밍을 지원한다. 내부적으로 Starlette 라는 비동기 프레임워크를 사용한다.
- 쉬운 사용성 : Python의 타입 힌트를 활용하여 자동으로 요청 데이터를 검증하고 문서화한다. 이를 통해 개발자는 코드 작성과 동시에 API 문서를 쉽게 생성할 수 있다.
- 자동 문서화 : 자동으로 API 문서를 생성한다. Swagger UI와 ReDoc을 통해 직관적이고 사용하기 쉬운 API 문서를 제공한다.
- 보안 및 검증 : 데이터 검증과 보안을 간편하게 처리할 수 있는 도구를 제공한다. Pydantic을 사용하여 입력 데이터의 유효성을 검사하고, OAuth2, JWT 등 다양한 인증 방식을 지원한다.
- 유연성 : 플러그인과 확장이 용이하며, 다양한 데이터베이스와의 통합 및 외부 라이브러리 사용이 쉽다.
간단한 예시
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.get("/")
async def read_root():
return {"message": "Welcome to FastAPI"}
@app.post("/items/")
async def create_item(item: Item):
return {"item": item}
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
위의 코드는 FastAPI를 사용하여 기본적인 CRUD 기능을 제공하는 API를 구성하는 예시이다. 'Item' 모델을 정의하고, GET 및 POST 요청을 처리하는 엔드포인트를 설정하였다.
FastAPI 프로젝트 구조
my_fastapi_project/
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── core/
│ │ ├── __init__.py
│ │ ├── config.py
│ │ └── security.py
│ ├── models/
│ │ ├── __init__.py
│ │ └── user.py
│ ├── schemas/
│ │ ├── __init__.py
│ │ └── user.py
│ ├── crud/
│ │ ├── __init__.py
│ │ └── user.py
│ ├── db/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── session.py
│ ├── api/
│ │ ├── __init__.py
│ │ └── api_v1/
│ │ ├── __init__.py
│ │ ├── endpoints/
│ │ │ ├── __init__.py
│ │ │ └── users.py
│ │ └── api.py
│ ├── tests/
│ │ ├── __init__.py
│ │ └── test_user.py
├── alembic/
│ └── (alembic migration files)
├── .env
├── .gitignore
├── requirements.txt
├── README.md
각 디렉토리와 파일의 역할
- app/: 애플리케이션의 주요 코드가 위치하는 디렉토리입니다.
- main.py: FastAPI 애플리케이션 인스턴스를 생성하고, 라우터를 포함한 초기 설정을 담당합니다.
- core/: 설정, 보안, 유틸리티 함수 등을 포함합니다.
- config.py: 애플리케이션 설정을 관리합니다.
- security.py: 보안 관련 설정과 유틸리티를 포함합니다.
- models/: SQLAlchemy 모델 정의를 포함합니다.
- user.py: 사용자 모델을 정의합니다.
- schemas/: Pydantic 모델 정의를 포함합니다.
- user.py: 사용자 스키마를 정의합니다.
- crud/: 데이터베이스 조작(CRUD) 함수가 포함됩니다.
- user.py: 사용자 관련 CRUD 함수들을 포함합니다.
- db/: 데이터베이스 설정 및 초기화 스크립트를 포함합니다.
- base.py: Base 모델과 관련된 설정을 포함합니다.
- session.py: 데이터베이스 세션을 관리합니다.
- api/: 라우터 및 엔드포인트를 정의합니다.
- api_v1/: API 버전 1과 관련된 엔드포인트를 포함합니다.
- endpoints/: 특정 엔드포인트 모듈을 포함합니다.
- users.py: 사용자 관련 엔드포인트를 정의합니다.
- api.py: 버전 1의 API 라우터를 정의하고 등록합니다.
- endpoints/: 특정 엔드포인트 모듈을 포함합니다.
- api_v1/: API 버전 1과 관련된 엔드포인트를 포함합니다.
- tests/: 테스트 코드가 포함됩니다.
- test_user.py: 사용자 관련 테스트를 포함합니다.
- alembic/: 데이터베이스 마이그레이션 파일을 포함합니다.
- .env: 환경 변수를 저장하는 파일입니다.
- .gitignore: Git에서 무시할 파일과 디렉토리를 정의합니다.
- requirements.txt: 프로젝트에서 필요한 패키지를 명시합니다.
- README.md: 프로젝트에 대한 설명을 포함합니다.
'Back-End' 카테고리의 다른 글
기능은 됐는데 성능이 안 나오는 코드의 특징 5가지 (0) | 2025.05.09 |
---|---|
ArrayList vs LinkedList -add 시간복잡도와 메모리 사용 차이(Kotlin / Java) (0) | 2025.04.30 |
백엔드 개발자도 알아야 하는 브라우저 캐시의 (1) | 2025.04.09 |