본문 바로가기
Python/API

[FastAPI] FastAPI를 이용한 서버 구축

by JONGSKY 2022. 10. 24.
728x90
SMALL

1.  글을 쓰게 된 계기

 

앞에 포스팅에서 FastAPI를 쓰게 된 이유를 나열했다.

 

FastAPI 간단 요약 특징들

  • 빠름 : NodeJS  Go 와 동등한 매우 높은 성능 (Starlette 및 Pydantic 덕분에). 사용 가능한 가장 빠른 Python 프레임워크 중 하나입니다.
  • 빠른 코딩 : 기능 개발 속도를 약 200%~300% 증가시킵니다.
  • 버그 감소 : 인간(개발자)이 유발하는 오류의 약 40%를 줄입니다.
  • 직관적 : 훌륭한 편집기 지원. 어디서나 완성 . 디버깅 시간이 적습니다.
  • Easy : 사용하고 배우기 쉽도록 설계되었습니다. 문서를 읽는 시간이 줄어듭니다.
  • Short : 코드 중복을 최소화합니다. 각 매개변수 선언의 여러 기능. 버그가 적습니다.
  • 강력함 : 프로덕션 준비 코드를 가져옵니다. 자동 대화형 문서를 사용합니다.
  • 표준 기반 : API에 대한 개방형 표준을 기반으로(그리고 완전히 호환 가능):오픈 API(이전에는 Swagger로 알려짐) 및 JSON 스키마.

이번에 작성하게 된 계기는

FastAPI 환경 설정 이후 실제로 어떻게 동작하는지에 대해서 알아보고자 한다.

 

2.  FastAPI를 이용해 서버 작동 확인하기

 

현재 디렉터리 설정 - 자세한 내용

.
├── app
│   └── main.py
├── Dockerfile
├── docker-compose.yml
└── requirements.txt

 

테스트 실행을 위한 main.py를 작성해준다.

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    store_detail: str = None #치킨전문점
    gps_lat: float = None #37.4977166
    gps_lon: float = None #127.0274515
    user_city: str = None #강남구
    user_dong: str = None #서초동
    user_dist: int = None #1

# 업종분석
@app.post("/analysis_svc/")
async def analysis_svc(item: Item):
    pass
    return {'svc_induty_nm':item.store_detail, 'slopee':'증가'}

- 데이터를 정의하기 위해 class를 작성하고 타입을 설정해주었다.

- 함수는 비동기적으로 작동하기 위해 async를 추가했다. - 동기와 비동기의 차이점은 해당 포스팅 설명을 보자.

 

 

잘 적용이 되었는지 localhost(127.0.0.1)의 8080 포트 docs에 접속해 확인해본다.(확인 링크)

 

FastAPI docs 화면

 

잘 설정된 것을 확인했다면,

실제로 API 서버에 요청 테스트해보자. (jupyter notebook에서 실행)

# 1. 라이브러리 호출
import requests
import json

# 2. 요청 할 url주소
url = "http://localhost:8080/analysis_svc/"

# 3. 파라미터로 보낼 데이터 작성
data = {"store_detail": "치킨전문점", "gps_lat":37.4977166, "gps_lon":127.0274515,
        "user_city":"강남구", "user_dong":"서초동", "user_dist":1}

# 4. post로 API서버에 요청
res = requests.post(url, data=json.dumps(data))

# 5. 결과 확인
res.text

 

실행결과

 

3. 마치며

 

FastAPI를 이용해 단순하게 파라미터를 보내고 내가 설정한 결과값을 받아오는 것을 확인했다.

이제 main.py에 해당 함수 사이에 받아온 파라미터를 이용해 데이터 분석을 하고 api를 이용해 결과값을 보내주면 된다.

 

확실히 django에 비해서 프로세스 자체가 가볍고 flask에 비해 빠르다.

FastAPI를 이용해 호출하고 보내주는 것도 좋지만 어떤 기능들이 있는지 확인하며 넘어가면 좋을 것 같다.

(물론 프로젝트를 진행하면서 공부까지 하는 건 힘들겠지만,,, 해봐야지...)

 

 

참고

 

Request Body - FastAPI

Request Body Warning The current page still doesn't have a translation for this language. But you can help translating it: Contributing. When you need to send data from a client (let's say, a browser) to your API, you send it as a request body. A request b

fastapi.tiangolo.com

 

728x90
LIST