FastAPI (10) 썸네일형 리스트형 [FastAPI] FastAPI MVC Pattern ! 목차 ">목차 개요 근 7~8개월간 쭉 FastAPI를 사용해왔다. 주로 사이드 프로젝트나 회사에서 FastAPI로 개발 시 코드 베이스를 어떻게 구성하면 좋을까에 대한 고민들을 거쳤다. 익숙한 것이 MVC 이기 때문에 이를 기반으로 FastAPI를 다룰 때는 계속 MVC라는 밑그림 위에서 코드 베이스를 구성해 나갔는데 경험이 쌓이다보니 FastAPI로 MVC를 만들 때 기초적인 밑그림 정도는 이렇게 잡아놔야지라는 개인적인 스타일이 생겼다. 이 글에 작성된 내용과 방식이 옳든 틀리든 FastAPI로 개발하면서 만들었던 이 "개인적인 스타일"에 대한 정리와 필자 개인의 생각을 남기려 한다. 1. FastAPI에서 MVC를?!FastAPI에서 MVC를 사용하면서 들었던 개인적인 의견은 FastAPI.. FastAPI의 이상한 파일 업로드 목차 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 개요 최근 FastAPI를 이용해 파일 업로드 기능을 다뤄야 했다. 대용량 파일 업로드 처리나 분산 파일 업로드 서버를 구현하는 게 아닌 "단순" 파일 업로드가 가능한 API만 구현하면 끝인 상황이었다. FastAPI 문서나 구글 검색을 참조해 이리저리 구현하던 도중에 Type Hinting을 통해 생성되는 Swagger 문서에서 특징을 발견할 수 있었는데 이 글은 겪었던 그러한 특징에 대해 정리한 글이다. 1. 단건 파일업로드 처리1.1 UploadFile 객체와 bytes를 이용한 파일 업로드 예제다음은 FastAPI 문서에서 제공되는 파일업로드를 구현하기 위한 기본 코드 예제이다. from fastapi imp.. [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.. 이전 1 2 다음