분류 전체보기847 FastAPI add_middleware() 관련 이슈 개요 FastAPI에서 일반적으로 미들웨어를 설정하는 경우 add_middleware() 메소드를 활용한다. 하지만 https://github.com/tiangolo/fastapi/issues/5071 깃헙 이슈에 따르면 해당 메소드의 경우 호출할 때 마다 미들웨어를 re-initialize하는 이슈가 있다고 한다. 따라서 Middleware클래스를 활용하여 넣어주는 방식으로 변경하는게 좋다고 나와있고 본 포스팅에서는 관련된 내용을 간단하게 담아본다. Middleware 클래스 일반적인 미들웨어 세팅 방식은 다음과 같다. app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_.. 2022. 7. 23. Python Generic Type 개요 스프링에서는 Spring Data JPA라는 것이 존재한다. 해당 라이브러리는 인터페이스를 생성 후 특정 인터페이스를 상속받으면 자동으로 메소드가 생성되는 역할을 한다. 예를 들어 findById(), findByEmail(), save(), delete() 등 여러가지 CRUD관련 메소드가 자동으로 생성된다. 실무에서 파이썬을 통해 서버를 개발하며 Layered architecture를 도입해서 사용하고 있는데, 특정 레포지토리를 생성할 때 마다 동일한 역할을 하는 메소드를 만드는게 귀찮았다. 그래서 스프링의 Data JPA와 같은 것을 만들어볼 순 없을까 생각했고 우연찮게 FastAPI 를 만든 개발자의 깃헙에서 비슷한 코드를 발견하였다. (https://github.com/tiangolo/fu.. 2022. 7. 7. Python Metaclass 사용해보기 개요 파이썬에는 메타 클래스(Metaclass)라는 것이 존재한다. 메타 프로그래밍(Meta prgramming)이라고도 불리는데 이를 이용하면 특이한 행위를 수행하는 클래스를 만들 수 있다. 기본적으로 파이썬에서 메타 클래스란 클래스를 만드는 클래스를 의미하고 이를 구현하는 방법은 아래와 같이 두 가지가 존재한다. - type을 사용하여 동적으로 클래스를 생성하는 방식 - type을 상속받은 후 메타 클래스를 구현하는 방식 대부분의 경우에서 메타 클래스가 필요한 경우는 없다고 볼 수 있다. 인터넷을 찾아보면 Django ORM 등을 구현할 때 사용하는 방법이라는 예제도 나와있는데 실제로 나도 실무에서 메타 클래스를 사용한 경험은 거의 없었다. 구글 등 파이썬 메타 클래스에 대해 검색하면 수많은 자료들이.. 2022. 7. 6. Redlock 알고리즘 개요 이전에도 동시성 관련된 글을 몇개 포스팅한적이 있다. 실무에서도 redlock알고리즘의 구현체인 aioredlock을 활용하여 동시성 제어를 진행하고 있는데, redlock 알고리즘에 대해 조금 더 자세히 살펴봐야할 것 같아서 Redis 공식 문서를 찾아봤고 나에게 필요한 부분만 추려서 번역을 진행했다. 본문은 https://redis.io/docs/reference/patterns/distributed-locks/ 에서 확인할 수 있다. Safety and Liveness Guarantees Safety property: 상호배제. 어떤 순간에도 하나의 클라이언트만 락을 획득할 수 있어야 한다. Liveness property A: 데드락이 발생하지 않는 것. 락을 획득한 클라이언트에 문제가 생겨.. 2022. 7. 2. FastAPI에서 SQLAlchemy Session 다루는 방법 개요 FastAPI는 비동기 프레임워크이다. 내부적으로는 Starlette를 Wrapping한 프레임워크인데 일반적인 동기 프레임워크인 Flask, Django등과는 다른 패러다임을 가지고 있다. 그에 따라 프로덕션 레벨에서 서비스를 운영하며 많은 트러블슈팅이 있었고 그 중 데이터베이스와 통신을 위해 사용하는 SQLAlchemy 라이브러리 또한 큰 이슈가 발생했었다. 기존에는 SQLAlchemy 1.3버전을 사용하고 있었기 때문에 비동기를 지원하지 않았지만 1.4버전부터 AsyncSession을 통한 비동기를 지원하기 시작했고 현재 사내 코드를 마이그레이션 하기위해 개인적인 테스트를 진행하고 있다. 본 포스팅에서는 비동기 프레임워크에 SQLAlchemy를 올바르게 사용하기 위한 트러블 슈팅을 포함하여 최.. 2022. 3. 23. SQLAlchemy AsyncSession으로 비동기 적용하며 생긴 문제점 개요 이전 포스팅(https://hides.tistory.com/1101)에서 SQLAlchemy 1.4부터 지원하는 AsyncSession을 사용하여 비동기 세션을 적용하는 방법에 대해 다뤄봤었다. 관련하여 테스트를 진행하던 도중 문제점을 하나 발견했고 나름 크리티컬하다고 볼 수있다고 생각하여 문제점에 대해 다뤄보고 해결방법에 대해 기술한다. asyncio.current_task와 문제점 SQLAlchemy 공식문서에서 async_scoped_session() 메소드 관련 문서를 찾아보면 위와 같은 글을 찾을 수 있다. 주목할점은 scopefunc인자에 asyncio의 current_task를 넣어준다는 점이다. scoped_session()의 scopefunc인자에 값을 대입하는 경우 registr.. 2022. 3. 21. 이전 1 ··· 5 6 7 8 9 10 11 ··· 142 다음