FastAPI ErrorHandling 과 CORS (3) - 문제 해결
·
탐구 생활/FastAPI CORS
FastAPI 에서 ErrorHandling 하는 과정에서 CORS 문제가 발생하는 이슈와 그 원인을 그리고 그에 따른 사람들의 대응을 알아봤습니다. 그리고 저는 문제의 원인이 Starlette에 있다고 생각했고, 나름대로 연구하여 Starlette codebase 에 코드 3줄을 추가하여 이러한 문제를 해소할 수 있는 방법을 찾았습니다. 당장이라도 Starlette 에 PR 을 올리고 싶었지만, 의외로 다른 사람들의 더 나은 대안을 가지고 있거나 FastAPI 나 Starlette 에서 이미 관련 이슈를 해소할 계획일 있을지도 모르기 때문에 우선 discussion 을 이용하기로 했습니다.FastAPI Discussion[discussion link]이 문제가 FastAPI 에 문서화 될 계획이 있다면..
티스토리 스킨 hELLO 에 기여해보기
·
탐구 생활/개발 탐구
이전에 FatAPI 의 문서 번역에 기여한것에 이어서 FastAPI 의 공식문서에 내용을 변경하는 등 기여를 하고 있는중이다. 오픈소스 초보자의 FastAPI 기여하기회사에서 FastAPI 로 전환을 하기에 FastAPI Document 를 보면서 공부중이었다. 한국어로 번역된 문서도 있는반면 영어 그대로인 문서들도 있었다. 왜일까? 하고 찾아보던중 FastAPI Github 에서 번역활동probehub.tistory.com   FastAPI 에서 기여하는 흐름은 이런식이다.[Fork 를 한다] -> [적절한 이름의 Branch 를 만든다] -> [변경하고자하는 사항을 변경하고 PR을 올린다] -> [리뷰를 받는다] -> [머지 혹은 리젝된다] 하지만 이번에 티스토리 hELLO 에 기여했던 흐름은 전혀 ..
FastAPI & Postgres 로 multi-tenancy 구현하기
·
탐구 생활/개발 탐구
stackoverflow 를 돌아다니다가 "FastAPI multi-tenant 를 구현하는데 경쟁조건이 발생한다" 는 내용의 질문을 발견했습니다. 회사에서 FastAPI 에서 PostgreSQL 의 schema 단위로 tenant 를 구분하여 DB 에 연결하는 기능을 구현했는데, 생각보다 여기서 어려움을 겪는 사람이 있는것 같아서 내용을 정리해봤습니다.문제 분석우선 저는 질문자가 구현한 middleware 를 살펴봤습니다. 큰 흐름은 다음과 같습니다.ContextVar 를 이용한다.Request 가 있을때마다 SessionLocal 에서 session 을 얻어온다.얻어온 session 에서 switch schema 를 실행하고 request.state 에 db 라는 이름으로 넘겨준다.일단 주어진 코드로..
FastAPI ErrorHandling 과 CORS (2) - 대안 파악
·
탐구 생활/FastAPI CORS
Starlette 와 FastAPI 의 ISSUE(link,link) 에서는 다음의 해결법이 논의 되었습니다.논의된 해결법1. FastAPI 앱을 CORSMiddleware로 감싸기from: thomasleveilfrom starlette.applications import Starlettefrom starlette.authentication import AuthenticationBackend, AuthenticationErrorfrom starlette.exceptions import HTTPExceptionfrom starlette.middleware.authentication import AuthenticationMiddlewarefrom starlette.middleware.cors import ..
FastAPI ErrorHandling 과 CORS (1) - 문제 파악
·
탐구 생활/FastAPI CORS
Starlette와 FastAPI에서 제공하는 CORSMiddleware와 ExceptionHandler가 함께 작동하지 않는 상황은 꽤 혼란스럽습니다. 이는 REST API 개발자 입장에서 상당히 중요한 이슈로, 많은 FastAPI 사용자들이 다양한 해결책을 논의(link, link, link)해 왔지만 제가 봤을때 명확하고 만족스러운 답이 나오지 않은 상태입니다. 우선 문제의 원인과 그 해법이 만족스럽지 않은 이유를 이야기해보겠습니다. 다소 장황한 글이 될 수 있기 때문에 문제 원인과 문제 상황만 파악하고자 하시는 분은 "문제의 원인" 그리고 "문제 상황" 만 보셔도 됩니다.문제 파악Starlette  Middlewere chain Strlette 는 ASGI Spec 을 준수하며, 그에 따라 Mid..
FastAPI log (3) - 설계, 구현
·
탐구 생활/FastAPI Log
이 시리즈는 AWS EKS & FastAPI 환경에서 로그를 적용하는 과정을 다루고 있습니다. 전체 시리즈는 다음과 같습니다.- FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기- FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?- FastAPI log (3) - 설계, 구현- FastAPI log (4) - 개선하기 이전 글 "AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기" 을 통해 로그를 Cloudwatch 로 보내는 인프라 세팅을 맞췄습니다. 이제는 FastAPI 프레임워크에서 어떻게 로그를 형성하여 보내는게 좋을지 더 실무적인 관점에서 고민한 내용을 기록해놓으려고 합니다.uvicorn ..
FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?
·
탐구 생활/FastAPI Log
이 시리즈는 AWS EKS & FastAPI 환경에서 로그를 적용하는 과정을 다루고 있습니다. 전체 시리즈는 다음과 같습니다.- FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기- FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?- FastAPI log (3) - 설계, 구현- FastAPI log (4) - 개선하기 이전글 "AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기" 에서 Fargate 내부에 Fluent Bit 에이전트가 기본적으로 설치되어 있으며, AWS가 제공하는 설정 방식에 따라 CloudWatch 등으로 로그를 전송할 수 있음을 설명했다.그러나 클라우드 환경에서 관측 데이터(t..
FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기
·
탐구 생활/FastAPI Log
이 시리즈는 AWS EKS & FastAPI 환경에서 로그를 적용하는 과정을 다루고 있습니다. 전체 시리즈는 다음과 같습니다.- FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기- FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?- FastAPI log (3) - 설계, 구현- FastAPI log (4) - 개선하기 기존 모놀리식 서비스를 마이크로서비스 아키텍처로 전환하면서 AWS EKS(Fargate) 기반으로 운영하는 방안을 선택했습니다. 이 과정에서 Java & Spring 기반 서비스를 Python & FastAPI로 변경하는 것뿐만 아니라, EKS Kubernetes 환경에서 운영하는 방법을 익히는 것도..