Uvicorn은 ASGI(Asynchronous Server Gateway Interface) 서버이다. 비동기 처리를 지원하여, 높은 성능을 발휘할 수 있다. 다양한 웹 프레임워크와 함께 사용할 수 있다. FastAPI는 ASGI 서버인 Uvicorn 과 Starlette 프레임워크를 기반으로 더 많은 기능을 제공하도록 개발 되었다.
FastAPI와 Uvicorn은 비동기 처리를 지원하여, 기존의 멀티스레드 방식보다 더욱 빠른 처리 속도를 보장한다. Swagger와 같은 API 문서 자동화 기능을 제공하여, API 개발 시 생산성을 높일 수 있다. Pydantic과 함께 사용하여 데이터 유효성 검사를 할 수 있어, 보다 안정적인 API를 개발할 수 있다. FastAPI와 Uvicorn을 함께 사용하면, 빠르고 안정적인 웹 애플리케이션을 개발할 수 있다.
ASGI 서버인 Uvicorn의 비동기 처리와 FastAPI의 빠른 속도와 현대적인 기능을 활용하여, 멀티스레드 방식의 기존 웹 애플리케이션보다 더욱 빠르고 안정적인 애플리케이션을 개발할 수 있다.
ML 서비스 만들때 필요한 API를 fastAPI로 만들어보는게 목적이었기 때문에 아래 3가지 소스를 참고함
프로젝트의 코드가 들어갈 모듈 설정(app). 대안 : 프로젝트 이름, src 등
main.py는 간단하게 애플리케이션을 실행할 수 있는 Entrypoint 역할
main.py (또는 app.py) : FastAPI의 애플리케이션과 Router 설정
model.py는 ML model에 대한 클래스와 함수 정의
추가 참고 Link : FastAPI로 딥러닝 모델 API 구축하기 | 문자열 파일경로, Bytes 타입 입력받기
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return{"message" : "Hello World"}
uvicorn main:app --reload --host=0.0.0.0 --port=8000
main : 여기서 main은 main.py의 main을 말한다
app : main.py안에 있는 app=FastAPI()
--reload : 코드 변경 시 자동으로 저장되어 재시작 됨
--host : 모든 접근이 가능하게 하려면 0.0.0.0을 입력한다
--port : 접속 원하는 포트를 지정해준다.
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
app = FastAPI()
@app.post('/items/')
async def create_item(item: Item):
return item
# jupyter notebook 에서 한 줄 씩 실행
# 1. 필요한 라이브러리 임포트
import requests
import json
# 2. 요청 보낼 url 주소
url = "http://localhost:8000/items/"
# 3. 같이 보낼 데이터 작성
data = {"name": "new_challenge",
"description":"test1",
"price":2020,
"tax":2021}
# 4. post로 API서버에 요청보내기
res = requests.post(url, data=json.dumps(data))
# 5. 결과 확인하기
res.text
post만 개발해서, get 메소드는 메소드 에러가 나고있는 것으로 보임 ??
API 코드는 Pycharm에서 작성했는데, 왜 juptyer에서 해당 API를 사용하는게 가능한거지 ?