본문 바로가기
728x90
SMALL

fastapi8

WSGI와 ASGI 비교 (feat. gunicorn, uvicorn) 1. 글을 쓰게 된 계기 WSGI 그리고 ASGI 아마 API를 만들어본 사람들은 많이 들어본 키워드일 것이다. 여기서 두 개를 비교하고 어떻게 정의하고 평소에 궁금했던 내용들에 대해서 정리해보고자 한다. 2. WSGI(Web Server Gateway Interface)가 뭐야? Web server의 Request를 python application으로 보내주고 Response를 받아서 Web server로 보내주는 것이 WSGI이다. 2003년 파이썬 표준으로 WSGI가 나온 이후로 현재까지 사용되었으며, WSGI Middleware는 WSGI의 구현체로 Request를 Flask, django와 같은 Web Framework에 연결하는 WSGI server 역할을 한다. (대표적인 예시로는 guni.. 2024. 4. 5.
uvicorn 이란 무엇인가? (feat. ASGI) 1. 글을 쓰게 된 계기 이전에 말했던 것처럼 gunicorn과 Uvicorn은 약속처럼 늘 같이 사용하고 있다. 그래서 이론적으로 다시 한번 정리하고자 글을 쓰게 되었다. 혹시 gunicorn에 대해서 궁금하신 분은 아래 링크를 참고하면 좋을 것 같다. gunicorn은 무엇인가? (feat. WSGI) 1. 글을 쓰게 된 계기 이전에 작고 큰 API들을 많이 개발했었다. 이전에는 flask나 django를 많이 사용했다면 최근에는 오히려 더 빠르게 개발할 수 있는 fastapi를 자주 사용하곤 한다. 그럴 때마다 guni jongsky.tistory.com 2. ASGI란 무엇인가? ASGI(Asynchronous Server Gateway Interface)는 WSGI의 비동기 버전이라고 생각할 .. 2024. 4. 3.
AWS docker기반 FastAPI 404 Error 해결(feat.로드밸런싱) 1. 글을 쓰게 된 계기 docker 기반의 FastAPI를 AWS에 ec2로 업로드 하고 로드밸런서로 연결했다. 그랬더니 docker의 로그를 확인해보니 계속해서 404 Not Found 에러가 발생하고 있었다. 이를 해결하기 위한 방법이다. 2. 에러가 나는 이유 - 해결에 앞서 이렇게 에러가 나는 이유가 뭘까? 그 이유는 로드밸런싱의 상태 검사를 생각해보면 좋다. 상태 검사는 30초 간격으로 해당 ec2를 호출해서 정상적인 상태인지 확인하게 되는데 이때 요청한 결과가 정상적이지 않아 나타나게 되는 오류이다. 3. 해결방법 1. 아래 코드를 추가해준다. @app.get("/") async def read_root(): return {"message": "Hello, World"} 추가 해주는 이유는 .. 2023. 9. 5.
동일 API 호출에 대한 처리 방법(feat. asyncio) 1. 글을 쓰게 된 계기 동일 API를 호출하는 경우들이 굉장히 많다. 현재 상황은 다음과 같다. API요청이 들어왔을 때 해당 API에서 동작되는 함수들이 실행되고 최종적으로는 해당 결과가 db에 저장되도록 되어있다. 여기서 불필요한 API호출를 방지하기 위해 1. db에 있는 경우 함수가 작동되지 않도록 했다. 2. 함수가 작동되고 있는 경우 (기존과 동일한 요청에서 대해서) 함수가 작동되지 않도록 했다. 내가 글을 작성하는 내용은 2번의 상황을 해결하는 것이다. 2. 해결 방법 간단하게 asyncio.Lock()을 사용하면 해결할 수 있다. emailUid_locks = {} # emailUid = "test1234" if emailUid in emailUid_locks: logging.info(f.. 2023. 9. 5.
[FastAPI] FastAPI와 DB(MySQL) 연결하기 1. 이 글의 목표 이미 존재하는 별도의 MySQL DB를 FastAPI에서 ORM을 이용해서 가져올 수 있다. 2. FastAPI와 MySQL(DB) 연결하기 - 디렉터리 구조 . ├── app.py ├── models.py └── database.py - 필요 모듈 설치 pip install fastapi pip install pydantic pip install SQLAlchemy pip install mysql - database.py : 기존에 존재하는 database를 sqlalchemy를 이용해 연결해주는 파일 from sqlalchemy import * from sqlalchemy.orm import sessionmaker DB_URL = 'mysql+pymysql://{USERNAME}:.. 2022. 11. 30.
ORM vs SQL Mapper 1. 글을 작성하게 된 이유 Rest API를 만들면서 생겨난 이슈사항이다. FastAPI를 이용해 request가 왔을 때 response를 해주는 Rest API를 만들고 있었다. response를 위해서는 기존에 만들어진 db(mysql)에서 데이터를 가져와 미리 만들어진 분석 코드를 실행시켜 데이터 분석 결과를 결과값으로 응답해주어야 했다. 이때 기존에 만들어진 db에서 데이터를 어떻게 가져와야 할까 라는 고민이 생겼다. ORM이 좋은 방법일까 아니면 SQL Mapper가 좋은 방법일까 장단점에 대해 비교해보자. 2. ORM vs SQL Mapper ORM 이란? ORM(Object-relational mapping)을 단순하게 표현하면 객체와 관계와의 설정이라 할 수 있다. OOP(Object .. 2022. 11. 5.
728x90
LIST