본문 바로가기

프로그램 개발

FastAPI를 사용한 API 백엔드 개발; 1. 윈도우 FastAPI 개발환경

FastAPI를 사용한 API 백엔드 개발

1. React Native 개발 환경 설치

2. Vagrant로 VirtualBox 서버 추가

 

1. FastAPI 소개

인공지능의 인기가 올라가면서 가장 인기 있는 언어가 파이썬이 되었다. 인공지능이 전에는 파이썬은 C언어로 된 라이브러리를 쉽게 사용할 수 있게 만들어진 인터프리터 언어로 인식이 되어서 시스템 운영자가 관리를 위한 목적으로 자동화를 할 때 많이 사용하였다. 클라우드 시대가 되면서 파이썬이 클라우드 운영을 위한 가장 각광받는 언어가 되었는데, 인공지능의 시대가 되면서 C언어로 만들어진 CUDA나 Tensorflow를 사용하기 위한 언어로 자리를 잡으면서 점차 영역을 넓혀갔다.

 

이전에 한번 인기 있는 언어에 대한 그래프를 소개한 적이 있는데,

 

출처) IEEE 2024

 

파이썬은 현재 다른 어떤 언어보다도 많이 사용하는 언어가 되었다. 파이썬은 웹서버 또는 API서버로 사용하려면 HTTP 프로토콜을 구현한 프레임워크가 필요한데, 가장 간단한 프레임워크가 Flask이다. Django가 먼저 세상에 나왔지만 Django는 데이터 처리, 웹 서버, 템플릿 엔진 등 MVC 패턴을 준수하는 웹서비스를 포괄적으로 지원하도록 발전하면서 복잡하고 무거워졌는데, 이런 Django와 정 반대로 light weight http server만을 제공하는 프레임워크가 Flask이다. 물론 다른 프레임워크도 많지만 많이 사용하는 기준에서 대표적인 반대 성향인 프레임워크가 Flask와 Django라고 보면 된다.

 

API서비스를 Flask로 개발하면, 입맛에 맞추어 원하는 기술 스택을 포함하여 서비스를 만들 수 있는 골격은 제공하지만, 좀 더 복잡한 서비스를 개발하려면 여전히 Django에 준하는 프레임워크가 필요해진다. 이때 Django보다는 기능이 적지만 API개발에 필요한 편리한 기능만을 포함해 놓은 것이 FastAPI로 보면 된다. 만일 API가 아니라 웹서비스에 도움이 되는 템플릿엔진이나 Admin기능까지 포함하게 되면 다시 Django를 고려하게 된다.

 

이번에 앱을 개발하면서 인공지능 기능을 같이 포함할까 고민하게 되다 보니 빠르게 사용할 수 있는 Node.js보다는 파이썬을 고민하게 되었고, 당연히 API서버이다 보니 FastAPI로 만드는 것이 효율적일 것이라 생각되어 이번에는 사용하면서 블로그로 정리하려고 한다.

2. 설치

먼저 파이썬이 설치가 되어 있어야 하고, 설치되어 있지 않다면 다음 글을 참고해서 설치한다.

 

윈도우에 만드는 파이썬 개발 환경; 1. pyenv로 여러 버전의 파이썬 설치

윈도우에 만드는 파이썬 개발 환경1. pyenv로 여러 버전의 파이썬 설치2. venv로 파이썬 가상환경 만들기3. 아나콘다 없이 무료로 Jupyter notebook 설치4. VSCode에 Jupyter연결0. 파이썬, 그냥 설치하면 안

front-it.tistory.com

파이썬이 설치되었으면 이제 프로젝트를 위한 가상환경을 만든다. 가상환경에 대한 설명은 아래 글을 참고하면 된다.

 

윈도우에 만드는 파이썬 개발 환경; 2. venv 가상환경, VSCode 연결

윈도우에 만드는 파이썬 개발 환경1. pyenv로 여러 버전의 파이썬 설치2. venv로 파이썬 가상환경 만들기3. 아나콘다 없이 무료로 Jupyter notebook 설치4. VSCode에 Jupyter연결5. venv (Virtual ENVironments)venv는 ve

front-it.tistory.com

 

python -m venv api-server

 

가상환경을 만들고 만들어진 가상환경 폴더로 가서 pip을 업그레이드한다.

 

python -m pip install --upgrade pip

 

그리고 FastAPI 패키지를 설치한다. 개발용으로 FastAPI를 설치하려면 아래 패키지를 설치하고

 

pip install "fastapi[standard]"

 

unicorn서버와 같이 사용하려면 다음 명령으로 설치하면 된다.

 

python -m pip install fastapi uvicorn[standard]

 

이제 프로그램을 체계적으로 관리하기 위해 app 폴더를 만들고 폴더 안에 main.py를 아래와 같이 만들고 FastAPI의 기능에 대해 잠시 살펴본다.

 

# /app/main.py

from fastapi import FastAPI

app = FastAPI()

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

 

FastAPI는 NestJS나 Java Spring과 같이 @ 어노테이션을 사용하여 HTTP 요청을 처리하는 함수를 만들 수 있다. HTTP 요청의 종류에 따라

 

  • @app.get() : 데이터를 읽을(read) 때
  • @app.post() : 데이터를 생성(create)할 때
  • @app.put() : 데이터를 수정(update)할 때
  • @app.delete() : 데이터를 삭제(delete)할 때

사용하는 어노테이션을 함수에 지정하면 되고, 자주 사용하지는 않지만 

 

  • @app.options() : HTTP Option을 처리할 때
  • @app.patch(): HTTP Patch를 처리할 때
  • @app.trace(): HTTP Trace를 처리할 때

사용하는 어노테이션도 지정할 수 있다.

 

파일을 app폴더에 저장하고 실행하려면, fastapi[standard]로 설치했으면

 

fastapi dev main.py

 

명령을 사용하면 된다. 이제 http://127.0.0.1:8000 을 통해 API서버에 접근할 수 있다.

 

 

FastAPI는 이름에서 의미하듯이 API개발을 위한 프레임워크이기 때문에 별도의 패키지 설치 없이 Swagger가 지원된다. 친숙한 Swagger화면을 보려면 http://127.0.0.1:8000/docs 를 열면 Swagger화면이 나오는데, FastAPI는 추가로 http://127.0.0.1:8000/redoc 화면도 제공하고 있다. 또, 크라칸과 가은 API서버에 바로 사용할 수 있는 json으로 된 API정의서도 http://127.0.0.1:8000/openapi.json 을 통해 얻을 수 있다.

 

 

{
    "openapi": "3.1.0",
    "info": {
        "title": "FastAPI",
        "version": "0.1.0"
    },
    "paths": {
        "/": {
            "get": {
                "summary": "Read Root",
                "operationId": "read_root__get",
                "responses": {
                    "200": {
                        "description": "Successful Response",
                        "content": {
                            "application/json": {
                                "schema": {}
                            }
                        }
                    }
                }
            }
        }
    }
}