Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Hyen Dev

Flask vs FastAPI vs Django 본문

카테고리 없음

Flask vs FastAPI vs Django

hi_dev 2024. 7. 10. 23:32

배경 상황

이번 글 역시 저번 글에서 언급했던 GDSC 미니 프로젝트와 관련된 글이다.

AI 파트 팀원들이 백엔드보다 개발 시작을 늦게 하여 api를 개발할 때는 잠시 생각을 미뤄두고 있었던 점에 대해 다시 고민하기 시작하였다.

 

현재 백엔드는 Nest.js를 이용하여 이미 모든 api 개발이 다 끝난 상태이고, AI 파트에서는 임의로 학습시킬 이미지들을 생성하여 모델 학습까지 완료한 상태이다.

여기서 우리가 고민했던 점은 백엔드에서 모델로 학습시킬 데이터를 어떻게 넘기고, AI 모델 학습 후 결과 데이터는 어떻게 백엔드로 넘겨줄 수 있는가 였다. 그동안 ai와 관련된 프로젝트를 진행해본 적이 한 번도 없었기 때문에 백엔드와 AI 개발을 따로 진행하는 경우엔 어떻게 그 데이터 전송 과정이 이루어지는지 몰랐던 것이다.

처음에는 애초에 백엔드 개발과 모델 생성을 하나의 프로젝트 안에서 진행해야하나 싶어서 현재까지 만들어둔 백엔드 코드를 전부 Flask나 FastAPI로 다시 개발을 해야하나..?라는 생각을 하기도 했다.

그러나 gpt와 함께 열심히 토론한 결과, 백엔드 서버와 AI 모델 서버를 별도로 두는 방법이 있다는걸 알게되었다.

이 후, 이와 관련하여 좀 더 찾아본 결과, 오히려 이렇게 백엔드와 AI를 분리하여 개발하는 것이 아래의 이유들로 아키텍쳐 상으로 훨씬 좋다고 한다.

  1. 딥러닝의 경우, 리소스를 많이 사용하여 서버의 부담이 크기 때문에 API 형태로 분리하여 scale-out 하면 로드밸런싱을 도입할 수 있다. (스케일을 자유롭게 조절 가능)
  2. 담당하는 역할을 확실히 분리 가능하다. 백엔드는 서비스 제공에 중점을 두고, 딥러닝 API 서버는 모델 학습 및 데이터 처리 등에 중점을 두는 것이다.

 

추가로 우리 프로젝트에서는 동일한 이미지 데이터를 사용하진 않기 때문에 쓰이지 않는 개념인데 앞으로 알아두면 좋을 것 같은 점도 있다.

그건 바로 예측 결과를 DB에 저장해두고, 이를 캐시처럼 사용하는 것이다.

매번 들어오는 요청을 모두 받아 예측을 진행하기 보다는, 예측 결과를 DB에 저장하여 사용하여 이미 분석이 된적이 있는 사진이라면, DB에 캐싱된 데이터를 출력하여 훨씬 빠르고 리소스를 덜 사용하여 결과를 반환할 수 있다.

출처 : https://medium.com/@inerplat/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%EB%8F%84%EC%A0%84%EA%B8%B0-e9ca38d53c1b

 

이러한 이유로 AI 파트에서 Flask를 사용하여 API를 통해 백엔드로 데이터를 전달해주고, 백엔드에서는 HTTP 클라이언트 라이브러리를 사용하여 AI 모델 서버의 API 엔드포인트에 요청을 보내는 방식으로 진행하게 되었다.


Framework 비교

AI 모델 서버를 개발하는데 사용하는 프레임워크로 대표적인게 파이썬 웹 프레임워크인 Flask, FastAPI, Django이다. 이 3개의 프레임워크 비교를 해보려고 한다.

Flask

웹 개발에 특정 라이브러리나 도구가 필요하지 않고, 최소한의 기능만을 제공하는 마이크로 프레임워크이다. 쉽고 빠른 방법으로 더 낮은 기능을 가진 경량 애플리케이션을 개발하는데 많이 사용한다.

  • 장점
    • 가볍고 간결한 구조로 인해 학습 곡선이 낮고 개발이 편리하다.
    • 불필요한 기능이 없는 경량화된 프레임워크이기 때문에 가볍고 성능과 속도가 빠르다.
    • 개발자가 원하는 대로 구조를 잡을 수 있는 유연성을 제공한다.
    • 확장 라이브러리와 플러그인이 다양하고 풍부하다.
  • 단점
    • 다른 프레임워크에 비해 기본 제공 기능이 적기 때문에 개발자가 구현하는 데 더 많은 노력과 시간이 필요할 수 있다.
    • 대규모 웹 애플리케이션을 구축하는 데에는 적합하지 않다.
    • 표준화되어 있지 않기때문에 다른 프레임워크로의 전환이 어려울 수 있다.

FastAPI

FastAPI는 최근에 출시된 비동기 웹 프레임워크로, 빠른 속도와 효율성을 강조하여 개발자가 빠르게 API를 작성할 수 있도록 도와준다. 실시간 및 고성능 API 구축에 적합하다. 

  • 장점
    • 비동기 처리를 지원하여 높은 성능과 효율성을 제공한다.
    • OpenAPI와 Swagger를 통해 자동 문서화를 제공한다.
  • 단점
    • 비교적 새로운 프레임워크이기 때문에 기존 프레임워크에 비해 커뮤니티 지원 및 리소스가 많지 않다.
    • 비동기 프로그래밍을 처음 접하는 개발자에겐 학습 곡선이 있을 수도 있다.

Django

 

파이썬에서 가장 많이 사용되는 웹 프레임워크 중 하나이다. Django는 전체 웹 애플리케이션을 개발하기 위한 모든 기능을 포함하고 있으며, 강력한 보안 기능과 사용자 인증, 데이터베이스 ORM, 관리자 패널 등을 포함하고 있다. 또한, 웹 개발에 필요한 거의 모든 기능을 포함하고 있는 풀스택 프레임워크이다.

  • 장점
    • 사용자 인증, 관리자 인터페이스, 보안 기능, 데이터베이스 ORM 등 다양한 내장 기능을 제공하여 개발이 빠르고 편하다.
    • 강력한 템플릿 엔진을 제공하여 프론트엔드와 백엔드를 효율적으로 분리할 수 있다.
  • 단점
    • 많은 내장 기능 때문에 초기 설정과 기본 성능이 다소 무거울 수 있다.
    • 프레임워크의 구조와 관례를 따르는 것이 좋으며, 유연성이 떨어질 수 있다.
    • 기능이 많고 복잡하기 때문에 학습 곡선이 높을 수 있다.

정리

  • Django: 전체 웹 애플리케이션을 개발하고자 하는 경우, 강력한 보안 기능이 필요한 경우
  • Flask: 작은 규모의 웹 애플리케이션을 개발하고자 하는 경우, 유연한 개발이 필요한 경우, 개발 속도와 성능을 중시하는 경우
  • FastAPI: 비동기 처리를 필요로 하는 경우, 높은 성능과 효율성이 요구되는 경우, API 개발에 중점을 둔 경우

각각의 프레임워크에 따라 장단점이 분명하다. 대규모 프로젝트라면 당연히 Django이고 소규모이면 Flask, FastAPI 둘 중 하나를 사용할 것 같다. 단 대규모 프로젝트라도 프로젝트 자체가 마이크로 서비스 아키텍처라면 Flask를 사용하면 될 것 같다.