Python/Flask 3

Dropzone.js를 사용해 대용량 파일 업로드 API 성능 개선

파일 업로드 일반적으로 파일 업로드를 할 때에는 multipart/form-data 형식으로 업로드를 진행하도록 API를 디자인하게 된다. 이때, 일반적인 파일들은 파일 크기가 그렇게 크지 않겠지만, 영상 파일과 같이 용량이 GB 단위가 되는 경우에는 단순히 한번의 요청으로 전체 파일을 올리는 것이 매우 어려워지게 된다. 다음 코드는 multipart/form-data 형식으로 데이터를 업로드하기 위한 API를 Flask와 flask-restx로 구현한 간단한 예제이다: import uuid from flask import request, make_response from flask_restx import Resource, Namespace from werkzeug.utils import secure_f..

Python/Flask 2023.10.09

Flask에서 async 기반 API 구현하기

Flask에서 async API 만들기? 일반적으로 Flask는 wsgi와 연동되도록 synchronous하게 동작하는 것을 기대하고 구현되었기 때문에 async 함수 없이 구현하는 것이 일반적인 패턴이다. 그러나 경우에 따라 필요에 의해 Flask 서버에 비동기 non-blocking I/O 기반 기능을 추가해야 할 경우가 발생하게 된다. 애초에 async 함수로 구현되는 FastAPI에서는 그다지 할 필요가 없는 고민이긴 하다. 어찌되었든, Flask에서 비동기를 사용하고 싶다면 어떤 방법으로 문제를 해결할 수 있을까? 가장 간단한 방법으로는 `asyncio`를 사용해서 비동기적인 I/O 기능을 할 수 있도록 만들고, 이를 Flask 코드와 연결시키면 된다. 눈치 챈 사람들도 있겠지만, 파이썬에서 함..

Python/Flask 2023.10.09

Flask - "The browser (or proxy) sent a request that this server could not understand."

tl;dr: 이 에러는 플라스크에서 request body의 데이터에 대해 미리 정의한 key로 접근하는데에 실패하면서 발생하는 에러이다. "The browser (or proxy) sent a request that this server could not understand" Flask를 사용해서 파일 업로드 및 data form을 받는 웹 서버를 구현할 때에 가끔씩 다음과 같은 메세지를 리턴 받는 경우가 발생한다: The browser (or proxy) sent a request that this server could not understand. 서버 로그를 확인해보면 다음과 같은 내용이 있을 것이다: werkzeug.exceptions.BadRequestKeyError: 400 Bad Reque..

Python/Flask 2023.10.09