FastAPI

FastAPI 강좌 1강: FastAPI 기본 개념과 환경 설정

atomicdev 2024. 10. 9. 01:10
728x90

FastAPI 기본 개념과 환경 설정


강의 목표:

  • FastAPI의 기본 개념과 Flask와의 차이점을 이해한다.
  • FastAPI를 설치하고, 로컬 환경에서 기본적인 엔드포인트를 구성하고 실행할 수 있다.
    FastAPI 서버의 기본 설정

 


강의 세부 내용:

1. FastAPI란?

  • FastAPI는 고성능 비동기 웹 프레임워크로, API 개발을 쉽고 빠르게 할 수 있도록 도와줍니다.
  • 비동기 지원, 자동 문서화(Swagger, ReDoc), 유효성 검사, 높은 성능 등의 강점을 제공합니다.
  • Flask와 FastAPI의 주요 차이점:
    • Flask는 동기 방식, FastAPI는 비동기 방식(더 많은 요청을 동시에 처리 가능).
    • FastAPI는 Python의 타입 힌트(Type Hints)를 기반으로 데이터 유효성 검사를 자동으로 지원.
    • FastAPI는 내장된 OpenAPI 스펙을 제공해 자동 문서화를 지원.

2. FastAPI 설치 및 환경 설정

  1. Python 버전 확인: FastAPI는 Python 3.7 이상을 요구합니다. 터미널에서 Python 버전을 확인합니다.
    python --version

     
  2. 가상 환경 설정(선택 사항): 가상 환경을 설정해 프로젝트의 종속성을 분리합니다.
    python -m venv env
    source env/bin/activate  # Windows의 경우: .\env\Scripts\activate
     
  3. FastAPI 및 Uvicorn 설치: FastAPI는 ASGI 서버인 Uvicorn과 함께 동작하므로 두 가지를 함께 설치합니다.
    pip install fastapi uvicorn
     

실습: FastAPI 서버 구성 및 엔드포인트 작성

1. FastAPI 기본 서버 만들기

설치가 완료되면 FastAPI 애플리케이션을 작성할 수 있습니다.

  1. main.py 파일을 만들고, 기본적인 FastAPI 서버를 구성해봅니다.
    # main.py
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    async def read_root():
        return {"message": "Hello, World!"}

     
  2. 설명:
    • FastAPI()로 애플리케이션 객체를 생성합니다.
    • @app.get("/"): HTTP GET 메서드를 처리할 기본 루트 엔드포인트를 정의합니다. 브라우저에서 / 경로로 접속하면 "Hello, World!" 메시지를 반환합니다.
    • 비동기 함수인 async def read_root()에서 await 구문을 사용할 수 있는 비동기 처리 환경을 제공합니다.

 

2. FastAPI 서버 실행

  1. 터미널에서 다음 명령어를 입력해 FastAPI 서버를 실행합니다.
    uvicorn main:app --reload
  2. 설명:
    • uvicorn: FastAPI 애플리케이션을 실행하는 ASGI 서버입니다.
    • main:app: main.py 파일의 app 객체를 실행합니다.
    • --reload: 코드가 변경될 때 자동으로 서버를 재시작하도록 설정합니다(개발 중 편리함).
  3. 서버가 실행되면 터미널에 다음과 같은 메시지가 표시됩니다:
    INFO: Uvicorn running on http://127.0.0.1:8000
  4. 브라우저에서 http://127.0.0.1:8000으로 접속하면 JSON 형태의 응답을 확인할 수 있습니다.
    {
      "message": "Hello, World!"
    }

3. 기본 엔드포인트 확장

예제 1: 경로 파라미터 사용

FastAPI는 경로 파라미터를 통해 동적인 URL을 처리할 수 있습니다.

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

설명:

  • @app.get("/items/{item_id}"): URL 경로에 {}를 사용해 동적 값을 처리할 수 있습니다.
  • item_id: int: FastAPI는 타입 힌트를 사용해 파라미터의 타입을 자동으로 인식하고, 유효성 검사를 수행합니다.
  • 브라우저에서 http://127.0.0.1:8000/items/10으로 접속하면 {"item_id": 10}을 반환합니다.

예제 2: 쿼리 파라미터 사용

쿼리 파라미터는 URL 경로에 포함되지 않고, ? 뒤에 붙는 파라미터입니다.

@app.get("/users/")
async def read_user(name: str = "Guest"):
    return {"user_name": name}
 

설명:

  • name: str = "Guest": 기본값을 "Guest"로 설정해, 쿼리 파라미터가 없을 경우에도 값이 존재하도록 설정할 수 있습니다.
  • 브라우저에서 http://127.0.0.1:8000/users/?name=John으로 접속하면 {"user_name": "John"}을 반환합니다.

4. FastAPI의 자동 문서화 기능

FastAPI는 API 문서를 자동으로 생성해줍니다.

  1. /docs 경로로 접속하면 Swagger UI를 통해 API 문서를 확인할 수 있습니다:
    • http://127.0.0.1:8000/docs
  2. /redoc 경로로 접속하면 ReDoc 문서를 확인할 수 있습니다:
    • http://127.0.0.1:8000/redoc

마무리 및 추가 학습

  • 이번 강의에서는 FastAPI의 기본적인 개념과 서버 설정을 다루었습니다. 이 강의를 통해 FastAPI로 간단한 API 서버를 로컬에서 실행하고, 엔드포인트를 구성하는 방법을 학습했습니다.
  • 다음 강의에서는 데이터를 받아 처리하는 API를 FastAPI로 구현하는 실습을 진행합니다.
728x90