2022년 11월 29일 화요일

FastAPI 0.88.0 : uvicorn -> hypercorn 사용하자

FastAPI 0.88.0 : uvicorn -> hypercorn 사용하자

* 2022/11/28일 FastAPI 가 따끈따끈하게 릴리즈 되었습니다.

* 2023/3/18일 확인해보니 0.94.1 까지 나왔네요~


  • uvicorn 말고 hypercorn을 써도 되는데, 둘다 ASGi를 지원하는 좋은 서버들이다.
    차이가 있다면 hypercorn은 HTTP/1, HTTP2, WebSocket over H/1 and H/2, ASGI/2, ASGI/3를 모두 지원해서 개인적으로 좀 더 선호하고 있다
  • 대부분 fastapi 가 uvicorn을 사용하는 이유는 안정적, 가벼움, 그리고 일부 성능에서는 좋음. http2를 지원하기 위해서는 SSL이 필수라 이것도 번거롭기도 하다.
  • 예제 만들기 with poetry + pyenv
     6865  mkdir fastapi
     6866  cd fastapi
     6867  ll
     6868  mkdir hypercorn
     6869  cd hypercorn
     6871  poetry init
     6873  poetry shell
     6874* . /Users/{yourhome}/svn/fastapi/hypercorn/.venv/bin/activate
     6875* poetry add fastapi
     6876* poetry add hypercorn
     6877* code .
           vscode에서 main.py를 만든다.
     6878* unvicorn main:app --reload
     6879* hypercorn main:app --reload
     6880* exit
    
  • main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

  • pyproject.toml
    [tool.poetry]
    name = "hyperconexam" 
    version = "0.1.0" 
    description = "" 
    authors = ["youremail@gmail.com>"]
    
    [tool.poetry.dependencies]
    python = "^3.9" 
    fastapi = "^0.88.0" 
    hypercorn = "^0.14.3" 
    
    [tool.poetry.dev-dependencies]
    
    [build-system]
    requires = ["poetry-core>=1.0.0"]
    build-backend = "poetry.core.masonry.api" 
    
    
  • 특정 포트로 바인딩하기 <uvicorn vs hypercorn> : 이렇게 해야 다른 PC에서도 접속할 수 있다.
    기본은 http://127.0.0.0:8000 이라 다른곳에서 접속 불가
    # Hypercorn
    hypercorn myapp:app --bind 0.0.0.0:8080
    
    # Uvicorn
    uvicorn myapp:app --host 0.0.0.0 --port 8080
    
  • 여러 IP addr로 바인딩 하기
    hypercorn myapp:app --bind "0.0.0.0:5000" --bind "[::]:5000" 

라벨: , ,