FastAPI 서버개발, FastAPI 설치

안녕하세요! 오늘은 FastAPI를 사용하여 백엔드 서버를 개발하는 방법에 대해 알아보겠습니다. FastAPI는 현대적인, 빠른 (고성능), 비동기 웹 프레임워크로, Python 3.6 이상에서 작동합니다. RESTful API를 구축하는 데 최적화되어 있으며, API 개발 속도를 빠르게 해주는 유용한 도구입니다. 이 튜토리얼에서는 FastAPI의 설치 방법과 간단한 서버를 만드는 실습을 진행합니다.

FastAPI란?

FastAPI는 Python에서 비동기 API 구축을 쉽게 해주는 웹 프레임워크로, StarlettePydantic 위에 구축되어 있습니다. FastAPI는 데코레이터(Decorator)를 통해 라우트를 쉽게 정의하고, 자동으로 Swagger 문서화 시스템을 생성해줍니다. 특히, 타입 힌트를 기반으로 하여 데이터 유효성 검사 및 자동 완성을 제공하는 점이 큰 장점입니다.

FastAPI 설치하기

FastAPI를 사용하기 위해서는 우선 Python이 설치되어 있어야 합니다. Python이 설치되어 있지 않다면, Python 웹사이트에서 다운로드 후 설치하시기 바랍니다.

1단계: Virtual Environment 설정하기

프로젝트를 진행하기에 앞서, 가상 환경을 사용하는 것을 추천합니다. 가상 환경을 통해 의존성을 분리할 수 있습니다. 아래 명령어로 가상 환경을 생성하고 활성화합니다.

python -m venv fastapi_env
# Windows
fastapi_env\Scripts\activate
# macOS/Linux
source fastapi_env/bin/activate

가상 환경이 활성화되면, 커맨드 프롬프트에 `(fastapi_env)`가 표시됩니다.

2단계: FastAPI 및 Uvicorn 설치하기

FastAPI를 설치하려면 pip를 사용하여 설치할 수 있습니다. Uvicorn은 FastAPI 앱을 실행하는 ASGI 서버입니다.

pip install fastapi uvicorn

3단계: FastAPI 설치 확인하기

FastAPI가 올바르게 설치되었는지 확인하기 위해, 간단한 Python 스크립트를 작성해 보겠습니다. 아래와 같이 main.py 파일을 생성하세요.

# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

FastAPI 서버 실행하기

이제 FastAPI 서버를 실행할 준비가 되었습니다. 아래와 같이 다음 명령어를 입력하여 서버를 실행하세요.

uvicorn main:app --reload

여기서 main:appmain.py 파일의 app 객체를 참조합니다. --reload 플래그는 코드 변경 시 서버를 자동으로 다시 로드해줍니다.

브라우저에서 http://127.0.0.1:8000에 접속하면 다음과 같은 JSON 응답을 확인할 수 있습니다.

{"Hello": "World"}

Swagger 문서 확인하기

FastAPI는 자동으로 Swagger UI를 생성하여 API 문서를 제공합니다. 아래 주소로 이동하면 API 문서를 확인할 수 있습니다.

http://127.0.0.1:8000/docs

Swagger UI에서는 우리가 정의한 API의 엔드포인트를 확인하고, 직접 호출해볼 수 있습니다.

FastAPI 기본 구조 소개

위의 예제에서 사용된 기본 FastAPI 구조에 대해 설명하겠습니다. FastAPI의 주요 구성 요소는 다음과 같습니다:

  • FastAPI 인스턴스: app = FastAPI()로 인스턴스를 생성합니다. 이 ‘app’ 객체는 라우터 및 미들웨어를 포함합니다.
  • 라우트 정의: @app.get(“/”)는 GET 요청을 처리하는 라우트를 정의합니다. 요청을 받으면 read_root 함수가 호출됩니다.
  • 응답: JSON 형태로 응답을 반환하며, FastAPI는 자동으로 Content-Type 헤더와 상태 코드를 설정해줍니다.

FastAPI에서 사용할 수 있는 여러 기능들

FastAPI는 다양한 기능을 제공합니다. 몇 가지 주요 기능은 다음과 같습니다:

  • 타입 시스템: 파라미터와 응답의 데이터 타입을 명확히 정의하고 유효성 검사를 자동으로 수행합니다.
  • 거대한 구성요소: 다양한 인증 및 권한 부여 옵션을 지원합니다.
  • 비동기 프로그래밍: async/await을 활용하여 비동기 요청 처리 가능.
  • 데이터베이스 통합: SQLAlchemy와 같이 다른 ORM을 쉽게 통합할 수 있습니다.

기본적인 CRUD API 구현해보기

이제 FastAPI의 기본 구조를 이해했으니, 간단한 CRUD(Create, Read, Update, Delete) API를 구현해 보겠습니다. 아래는 메모를 관리하는 API의 예입니다.

# main.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

app = FastAPI()

class Memo(BaseModel):
    id: int
    content: str

memo_list = []

@app.post("/memos/", response_model=Memo)
def create_memo(memo: Memo):
    memo_list.append(memo)
    return memo

@app.get("/memos/", response_model=List[Memo])
def read_memos():
    return memo_list

@app.put("/memos/{memo_id}", response_model=Memo)
def update_memo(memo_id: int, memo: Memo):
    for idx, m in enumerate(memo_list):
        if m.id == memo_id:
            memo_list[idx] = memo
            return memo
    return None

@app.delete("/memos/{memo_id}")
def delete_memo(memo_id: int):
    global memo_list
    memo_list = [m for m in memo_list if m.id != memo_id]
    return {"message": "삭제되었습니다."}

CRUD API 설명

  • Create: /memos/ 경로로 POST 요청을 보내면 새로운 메모를 생성할 수 있습니다.
  • Read: /memos/ 경로로 GET 요청을 보내면 모든 메모를 조회할 수 있습니다.
  • Update: /memos/{memo_id} 경로로 PUT 요청을 보내면 특정 메모를 수정할 수 있습니다.
  • Delete: /memos/{memo_id} 경로로 DELETE 요청을 보내면 특정 메모를 삭제할 수 있습니다.

결론

이번 포스트에서는 FastAPI의 설치 방법과 기본적인 서버 구현 방법에 대해 알아보았습니다. FastAPI는 빠르고 유연한 API 개발을 할 수 있게 도와주며, 비동기 처리가 가능하기 때문에 높은 성능을 제공합니다. 앞으로 더 많은 기능을 활용하여 고급 API를 개발할 수 있습니다. 추가적인 학습을 위해 FastAPI의 공식 문서를 참고하시기를 권장합니다.

시청해 주셔서 감사합니다! 여러분의 프로젝트에 도움이 되었기를 바랍니다.