728x90 SMALL Python/API9 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. Celery 란 무엇인가? 1. 글을 작성하게 된 계기 기존에 운영하던 환경이 fastapi-redis-celery 형태였으며 django에서도 동일하게 celery를 활용해서 배포하고 있다. 이번 기회에 이론적인 내용에 대해서 정리하고 한다. 2. Celery는 무엇인가? Celery는 Python으로 작성된 분산 작업 대기열 시스템이다. 대규모 시스템에서 비동기 작업 실행과 작업 스케줄링을 용이하게 위해 설계되었다. 예를 들자면, 웹 서비스에서 응답시간은 생명과 같다. 빨리 응답해야 하는 웹 서비스에서 3초 이상 아니 1초 이상의 딜레이는 유저에게는 오류와 같으며 렉이라고 인지하게 된다. 그래서 이를 위해 비동기 작업을 처리할 수 있도록 넘기고 뒤에서 작동은 되게 하고 유저에게는 바로 응답하기 위해 사용된다. 즉, 백그라운드에.. 2024. 4. 4. 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. gunicorn은 무엇인가? (feat. WSGI) 1. 글을 쓰게 된 계기 이전에 작고 큰 API들을 많이 개발했었다. 이전에는 flask나 django를 많이 사용했다면 최근에는 오히려 더 빠르게 개발할 수 있는 fastapi를 자주 사용하곤 한다. 그럴 때마다 gunicorn과 uvicorn을 이용해서 배포를 하곤하는데 이를 이론적으로 정리하고자 해서 글을 작성하게 되었다. 2. WSGI란 무엇인가? gunicorn을 알기 전 WSGI에 대해서 먼저 알아보도록 하자. WSGI, 즉 Web server Gateway Interface는 파이썬 웹 애플리케이션과 웹 서버 사이의 표준 인터페이스로 웹 애플리케이션 개발과 배포를 단순화하는데 중요한 역할을 한다. WSGI는 파이썬 웹 개발의 핵심 구성 요소이며, 다양한 웹 서버와 애플리케이션 간의 통합을 .. 2024. 4. 3. 동일 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. 기존 database를 가져와서 ORM 만들기 1. 이 글의 목표 python에서 ORM을 활용하기 위해서는 통상 models.py라 불리는 데이터 형태를 저장해놓아야 한다. 저번 포스팅에서는 직접 models.py를 작성해서 기존의 database를 불러오는 것을 해보았다. 이번에는 직접 작성하는 것이 아닌 sqlacodegen를 활용해 기존의 database형태를 models.py에 저장하는 법에 대해서 알아보겠다. 2. 기존 database를 models.py에 저장하는 방법 1. sqlacodegen 모듈을 설치한다. pip install sqlacodegen 2. 연결하고 싶은 db를 작성하고 models.py에 저장시킨다.(mysql 기준) sqlacodegen mysql+pymysql://:@:/ > "./models.py" 3. mod.. 2022. 12. 11. 이전 1 2 다음 728x90 LIST