fastapi 6

[fastapi] lifespan

Lifespan fastapi를 사용하면서, 앱이 시작할 때 혹은 앱이 종료될 때에 실행되어야 하는 로직이 분명 존재하게 됩니다. 저는 모니터링 관련 세팅이 앱 시작할 때 주로 실행되도록 구성을 많이 하고 있는데요. 이런 세팅들을 명시적으로 실행 위치를 정해주는 기능이 fastapi에 존재합니다. lifespan이라는 기능인데, 오늘은 fastapi의 lifespan을 소개해보겠습니다. 먼저 위에서 언급했듯이, 앱이 시작하기 전 혹은 종료 시 실행되어야 하는 로직을 정하고 lifespan 함수를 선언해서 함수 안에 로직들을 작성하고 연결만해주면 됩니다. 바로 예시 코드를 보면서 소개드리겠습니다. 아래 코드는 fastapi 공식 문서에 소개된 코드입니다. (https://fastapi.tiangolo.co..

python/fastapi 2024.03.03

[Python] contextvars

fastapi가 등장한 이후로, python에서도 비동기로 구현하는 방식이 많이 활성화되고 있습니다. 멀티 스레딩으로 구현할 때는, thread의 context를 활용해서 로그를 남겨서 쉽게 모니터링 할 수 있었는데 비동기에서는 thread context가 없어서 해당 부분을 해소하기 위해서 등장한 것이 contextvars입니다. contextvars는 파이썬 표준 라이브러리로 따로 설치를 해야하는 것은 없습니다. 사용법은 매우 간단합니다. ContextVar를 한 번 선언을 하고, set 함수를 호출하여 context를 설정해주면 get 함수를 호출해서 가져다 쓸 수 있습니다. 바로 예시 코드를 보겠습니다. import asyncio import contextvars import random impo..

python 2024.01.07

[fastapi] Middleware

오늘은 fastapi의 middleware에 대해서 알아보려고 합니다. https://fastapi.tiangolo.com/tutorial/middleware/ Middleware - FastAPI FastAPI framework, high performance, easy to learn, fast to code, ready for production fastapi.tiangolo.com fastapi의 middleware를 활용하면, 모든 request에 대해서 전/후 처리를 추가해줄 수 있습니다. 바로 예시 코드를 보도록 하겠습니다. import time from fastapi import FastAPI, Request app = FastAPI() @app.middleware("http") async..

python/fastapi 2023.07.02

[fastapi] fastapi utils를 활용한 주기적인 작업(periodic task) 실행하기

백엔드 서버를 띄운 상황에서, 주기적인 작업(periodict task, repeated task)을 실행하고 싶은 경우가 생길 수 있습니다. 예를 들면, DB에 주기적으로 polling을 해서 어떤 데이터를 가져와서 서버에서 들고 있게 하는 등의 작업이 필요할 수 있는데요. fastapi 자체적으로 제공하는 것은 없지만, fastapi-utils(https://fastapi-utils.davidmontague.xyz/)를 활용하면 이런 작업을 수행할 수 있습니다. 설치는 pip로 간단하게 하시면 됩니다. pip install fastapi-utils fastapi-utils를 활용하여 주기적인 작업을 실행하는 방법은 아래와 같습니다. from fastapi import FastAPI from sqlal..

python/fastapi 2023.06.18

[fastapi] background task

개요 background task를 처리하는 방식은 다양한데, fastapi의 framework 내에서도 충분히 처리를 할 수 있어서 그 방식에 대해서 정리를 해보려고 합니다. background task는 API 요청을 받아서 실시간으로 응답을 바로 주는 것이 아닌 API 요청에 대해서 별도로 천천히 처리해도 되는 작업들에 사용하게 됩니다. 예를 들면 회원가입을 할 때, 회원가입을 완료했을 때 성공했다는 응답을 반환하고 email로 환영 메세지를 발송하는 것과 같은 경우가 있을 수 있습니다. 사용방법 사용 방법은 공식 홈페이지에 잘 나와있습니다. (https://fastapi.tiangolo.com/tutorial/background-tasks/) 문서의 예시 코드를 한 번 보도록 하겠습니다. fr..

python/fastapi 2023.06.04

SQLAlchemy에서 ORM 활용하기

이전 글(https://seokhyun2.tistory.com/84)에서 SQLAlchemy에 대해서 소개를 해보았는데요. 오늘은 ORM을 활용하는 방법을 준비해보았습니다. ORM을 사용하기 위해서는, table에 매핑되는 class를 선언해서 사용하면 되는데요. 바로 예제 코드를 보도록 하겠습니다. from sqlalchemy.orm import declarative_base from sqlalchemy import Column, Integer, String, DateTime from sqlalchemy.sql import func Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary..

python/SQLAlchemy 2022.09.04