-
[PROJECT] Django vs FastAPI프로젝트/Movie-Ticketing 2023. 12. 28. 18:54728x90
Django와 FastAPI는 둘 다 백엔드 웹 개발에 널리 사용되는 프레임워크다.
그러나 그들의 설계 철학, 사용 사례, 그리고 기능적인 측면에서 상당한 차이가 있다.
Django
배터리 포함 접근 방식
Django는 "배터리가 포함된" 접근 방식을 취한다.
대부분의 일반적인 웹 개발 요구사항을 충족하기 위해 필요한 도구와 기능이 프레임워크에 내장되어 있다는 것을 의미한다.
⇒ 프레임워크가 많은 기본 기능들을 내장하고 있어서, 복잡한 웹 애플리케이션을 개발할 때 필요한 대부분의 기능들을 즉시 사용할 수 있다.
FastAPI에서는 이러한 "배터리 포함" 접근 방식이 덜 두드러진다. FastAPI는 가벼운 프레임워크이며, 개발자가 필요에 따라 추가적인 도구나 라이브러리를 선택하여 통합해야 한다.
예를 들어, FastAPI에서 인증 시스템을 구축하려면 Pydantic 모델, OAuth2 표준, JWT 토큰 등을 사용하여 직접 설계해야 한다.
ORM (Object-Relational Mapper):
Django의 ORM은 데이터베이스 작업을 추상화하는 강력한 도구다. 개발자는 복잡한 SQL 쿼리를 작성하지 않고도 Python 코드를 사용하여 데이터베이스와 상호 작용할 수 있다.
블로그 포스트를 저장하는 모델을 만들고, 해당 모델의 인스턴스를 생성하고, 데이터베이스에 저장하는 작업을 Python 클래스와 메서드를 사용하여 간단하게 수행할 수 있다.
FastAPI는 ORM을 기본으로 제공하지 않는다. 대신, 개발자는 SQLAlchemy나 Tortoise ORM과 같은 외부 라이브러리를 사용하여 비슷한 기능을 구현할 수 있다. FastAPI의 비동기 지원은 비동기 ORM을 사용하여 성능 이점을 제공하지만, Django의 ORM만큼 직관적이거나 통합적이지 않을 수 있다.
Admin Interface:
Django는 구성 가능한 관리 인터페이스를 자동으로 제공한다. 이 인터페이스를 사용하면 개발자가 별도의 백오피스를 구축할 필요 없이 모델에 대한 CRUD (Create, Read, Update, Delete) 작업을 수행할 수 있다.
즉 사용자가 웹 인터페이스를 통해 블로그 게시글을 추가하고 수정할 수 있게 해주는 기능을 자동으로 제공한다.
FastAPI에는 내장 관리자 인터페이스가 없다.
Middleware:
Django의 요청 / 응답 처리에 대한 후크 프레임 워크로써 Django 상의 모든 API 입출력을 전역적으로 변경하기 위한 플러그인 시스템이다.
공식 문서에서 "Django의 입력 또는 출력을 전역적으로 변경하기 위한 가볍고 낮은 수준의 "플러그인" 시스템입니다." 라고 언급한다.
이를 통해 요청을 가로채서 추가적인 처리를 하거나 응답을 조작할 수 있다. ex) 요청에서 사용자의 지역을 감지하고 해당 지역에 맞는 콘텐츠를 제공하는 등의 작업을 수행할 수 있다.
FastAPI
FastAPI는 성능, 빠른 개발 속도, 그리고 적은 버그를 목표로 한다.
최신 웹 표준을 따르며 비동기 프로그래밍을 지원한다.
비동기 지원:
FastAPI는 Python의 async와 await 구문을 사용하여 비동기 프로그래밍을 지원한다.
I/O 바운드 작업(예: 데이터베이스 쿼리, 네트워크 요청)을 처리할 때 성능 이점을 제공한다.
예를 들어, FastAPI는 동시에 여러 데이터베이스 쿼리를 비동기적으로 실행하여 전체 요청 처리 시간을 단축할 수 있다.
Django에서도 비동기 뷰를 지원하기 시작했지만 (Django 3.1 이후), FastAPI만큼 비동기 프로그래밍이 핵심에 내장된 것은 아님. Django의 동기적인 nature 때문에 비동기 ORM이나 써드파티 라이브러리를 통합하는 것은 더 복잡할 수 있다.
자동 API 문서:
FastAPI는 OpenAPI와 Swagger UI를 기반으로 한 자동화된 API 문서를 생성한다.
개발자는 API 엔드포인트를 정의하고, 해당 메타 데이터에 대한 메타데이터를 추가함으로써 상호 작용 가능한 API 문서를 쉽게 얻을 수 있다.
이 문서로 API를 테스트하고, 요청을 보내고, 응답을 확인하는 것이 가능하다.
Django에서도 Swagger나 ReDoc과 같은 도구를 통합할 수 있지만, 이것은 추가 설정과 라이브러리가 필요하고, FastAPI처럼 프레임워크 수준에서 자동으로 이루어지는 것은 아니다.
데이터 검증과 직렬화:
FastAPI는 Pydantic을 사용하여 데이터 모델을 정의한다.
이를 통해 입력 데이터의 검증, 직렬화, 문서화가 자동으로 이루어진다.
예를 들어, 클라이언트로부터 받은 JSON 요청 바디를 Pydantic 모델로 변환하고, 해당 모델이 자동으로 요청 데이터의 타입과 구조를 검증할 수 있다.
Django에서도 비슷한 기능을 제공하는 Django REST framework와 같은 확장 패키지를 사용하여 요청 데이터를 검증하고 직렬화할 수 있지만,
별도의 패키지를 사용하는 것이며, FastAPI처럼 표준 라이브러리에 내장된 것은 아니다.
프레임워크 결정 - FastAPI
영화 예매 백엔드 시스템을 구현하는 데 있어서 FastAPI를 선택하는 것이 적절하다고 판단된다.
성능
영화 예매 시스템은 티켓 발매 시점에 사용자들로부터 대량의 트래픽을 받을 것으로 예상된다.
FastAPI는 Starlette (비동기 웹 프레임워크)에 기반을 둔 비동기 지원으로 높은 동시성 처리 능력을 가지고 있으며, I/O 작업을 최적화하여 처리량을 극대화할 수 있다.
예를 들어, 사용자가 동시에 여러 영화의 상영 시간을 조회하고 예매하는 경우, FastAPI는 비동기 데이터베이스 드라이버를 사용하여 병렬로 데이터베이스 조회를 수행하고, 이는 시스템의 응답성을 크게 향상시킬 수 있다.
빠른 개발
FastAPI는 개발자가 API를 빠르게 구축하도록 돕는 도구와 기능을 제공한다.
자동 문서 생성 기능은 개발자가 API 엔드포인트를 빠르게 테스트할 수 있다.
예매 시스템을 개발하는 도중에도 API의 변화가 빠르게 반영되어 즉시 인터페이스를 확인하고 통합할 수 있다.
타입 안정성과 데이터 검증
Pydantic을 사용하는 데이터 검증 시스템은 type hint와 함께 작동하여 실시간으로 요청 데이터의 유효성을 검사한다.
영화 예매 시스템에서는 다양한 형태의 데이터 입력이 필요하다.
(영화 선택, 시간 선택, 좌석 예약, 결제 정보... )
각 단계에서 데이터가 올바르게 형식화되고 유효한지 확인할 수 있다.
이를 통해 견고한 시스템을 만들 . 수있고, 잠재적 오류를 사전에 차단하여 버그의 발생을 줄일 수 있다.
확장성
영화 예매 시스템이 성장하고 복잡해질수록, 시스템의 여러 부분을 독립적으로 확장하거나 업데이트할 필요가 생긴다. FastAPI는 이러한 확장을 용이하게 하며, 각 마이크로서비스가 독립적으로 배포되고 관리될 수 있도록 도와준다.
728x90'프로젝트 > Movie-Ticketing' 카테고리의 다른 글
[Project] 아키텍처 결정 (0) 2024.01.09 [Project] 일정 수립 (0) 2024.01.09 [프로젝트] 유저 플로우 (0) 2024.01.09 [PROJECT] 부하테스트 도구 선택 (0) 2023.12.28 [PROJECT] MySQL, PostgreSQL (1) 2023.12.28