본문 바로가기

728x90

Frame Work

(43)
[FastAPI] Too Many Open files Error가 일어난다면 HTML 삽입 미리보기할 수 없는 소스 개요 최근 locust라는 도구를 이용해 손수 만들어본 코드 구조가 얼마나 효율적인지 테스트해 보는 중이다. (locust는 성능 테스트도구이다.) 직접 만든 코드 유틸에는 여러 계층의 db transaction을 묶어서 처리하기 위한 decorator라던지 sqlalchemy의 imperative mapping 방식을 이용한 ORM과 depdency-injector를 이용한 DI 처리와 같은 것들이 존재한다.. 앞서 언급한 코드 유틸에는 학습과 아이디어 검증을 우선으로 구현했기 때문에 테스트와 같은 부분을 차일피일 미루고 있었는데 여러 자료를 접하게 되면서 우선 locust를 이용해 성능 테스트를 시도해 보기로 했다. 그렇게 성능 테스트를 진행 중에 관련 로그를 ..
[FastAPI] dataclass를 pydantic의 BaseModel 로 변환하기 HTML 삽입 미리보기할 수 없는 소스 개요 FastAPI의 공식문서에는 pydantic을 이용한 예제들이 많이 등장한다. 하지만 pydantic보다 dataclass를 선호해서 FastAPI+dataclass 조합을 이용중인데 이대로 사용하다 보니 Swagger 문서에서 Response 되는 Data를 명시하는 부분에 제외(exclude)할 데이터를 설정하는 부분에서 문제가 있었다. 이 문제를 해결하기위해 python dataclass를 pydantic의 BaseModel로 변환시켜 보자는 아이디어를 떠올렸고 이번 포스팅은 그 방법을 기록한 내용이다. 1. FastAPI의 response_model_exclude ? FastAPI의 APIRouter 클래스에는 다음과 같은 옵션들이 존재한다. 이 중에..
[FastAPI] Request 단위의 Transaction 잡기 HTML 삽입 미리보기할 수 없는 소스 2023.10.06 - [Frame Work/FastAPI] - [FastAPI] DI는 bootstrapping을 생각해보기 개요 FastAPI에서 DI를 적용하기 위해, FastAPI의 Depends 함수가 아닌 dependency-injector 라이브러리를 활용했다. 이를 통해 DB Session을 Singleton으로 설정하고, Repository에서 Session을 주입받아 처리하는 시도를 했다. 그러나 이 과정에서 여러 Repository 간에 수행되는 쿼리에 대한 Transaction이 올바르게 묶이지 않는 문제가 발생했다 이번 글은 이러한 문제의 배경과 함께 어떻게 이를 해결했는지에 대한 기록을 담는다. 1. Transaction 처리의 발단 Fas..
[FastAPI] Header Authenticate와 Swagger Authorize Jwt 인증 시 header에 "access-token"이라는 key를 통해특정 api 호출 시에만 검증 하고 싶다.  목차 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스개요 FastAPI의 EndPoint에 Jwt Authenticate를 적용해야하는 상황이다. header key에는 "access-token"을 지정하고 EndPoint는 실제로 Authenticate를 수행할 건지 말 건지는 선택적으로 적용하고 싶었는데 어째선지 FastAPI에서는 관련 내용을 찾아보기 힘들었다.  문서에 관련 내용은 없어도 FastAPI에서 제공하는 APIRouter는 dependencies라는 parameter를 통해 API가 실행되기 전 수행할 동작을 지정할 수 있지만 다소 문제..
[FastAPI] Post API의 Form Body 테스트 HTML 삽입 미리보기할 수 없는 소스 개요 FastAPI에서 Post Method를 이용해 동작하는데 API를 만들었다. 이때 입력이 Json 방식이 아니라 Form이라면 테스트 코드는 어떻게 만들어야 할까? 1. FastAPI, Post API의 Body FastAPI에서 Form을 사용하려면 python-multipart가 설치되어있어야한다. FastAPI를 설치하는 중에는 함께 설치가되진 않는다. $ pip install python-multipart 아래 코드는 FastAPI를 통해 API를 정의한 예제 코드다. from __future__ import annotations from fastapi.responses import JSONResponse from fastapi.routing impo..
[FastAPI] 테스트 코드 작성 시에는 연결을 조정할 수 있게 만들자. HTML 삽입 미리보기할 수 없는 소스 개요 이번 글의 주제는 지난번 글에서 기재한 내용 중 일부를 이용해 FastAPI에서 테스트 코드 작성 시에 dependency-injector를 통해 이를 조정할 수 있게 만드는 방법을 기록한다. 1. app.py를 사용 시 외부환경 고려하기 지난 글에서 사용한 app.py는 다음과 같이 생긴 코드이다. # app.py from fastapi import FastAPI from src.config import setup class FastApi: def __init__(self, app): self.app = app def __call__(self, *args, **kwargs): setup.router(self.app) setup.container() retur..
[FastAPI] DI는 bootstrapping을 생각해보기 HTML 삽입 미리보기할 수 없는 소스 이 글의 DI는 의존성 주입(Dependecny injection)을 의미한다. 개요 FastAPI는 Django와 Flask랑 확연이 차이가 있다는 지점을 느낀 부분이 DI이다. FastAPI의 DI를 사용할 수도 있으며 dependency-injector라는 라이브러리를 이용해서 DI를 사용할 수도 있다. 이 글은 FastAPI의 dependency-injector라는 라이브러리를 적용하기 위해 고민했던 흔적을 남긴다. 1. 부트스트래핑과 DI dependency-injector를 적용하기 위해 먼저 고민했던 것은 DI의 시작점을 어떻게 가져갈 것인지에 대한 부분이었다. django에서는 settings.py라는 것을 통해 간접적으로 드러나는데 FastAPI로 ..
[FastAPI] 실행은 Factory Pattern을 적용하자. HTML 삽입 미리보기할 수 없는 소스 개요 최근에 FastAPI를 통해 이것저것 시도해보고 있는 중이다. 무언가를 새롭게 배우고 있는 중이라 확실히 알아가는 재미를 느끼고 있다. 문제는 개발하려는 개념을 쪼개서 Project Directory에 녹이려 하다 보니 FastAPI Document에서 제시하는 내용을 가지고는 부족함을 느끼고 있다. 그래서인지 항상 Google에 이것저것 검색하게 되면서 "삽질"의 시간이 늘어남을 체감 중이다. 이번 글에 기록할 내용은 FastAPI를 실행시키기 위한 진입점인 main.py 혹은 경우에 따라서는 app.py 로도 사용하는 파일에 대해 고찰한 내용이다. FastAPI, main.py? FastAPI Document는 FastAPI를 구동시키기 위해 main.py..

728x90
반응형