오늘은 간단하게 Python 기반 프레임워크를 비교해 보았습니다.
공부를 해가며 느낀점과 실제 다뤄보면서 느낀 점들도 같이 적었습니다.
Django, Flask, FastAPI의 장단점 선 소개
Django
장고의 설계 철학
- 느슨한 결합
- 적은 코드
- 신속 개발
- DRY(반복하지 말 것)
- 명시적인 것이 묵시적인 것 보다 낫다.
- 일관성
장점
- 완전한 기능 세트
- ORM
- 사용자 인증 및 권한
- 관리자 인터페이스
- 커뮤니티와 생태계
- 보안 및 안전성
단점
- 무거운 구조
- 기본적으로 많은 기능이 포함되어있어 상대적으로 무거움
- 초기 설정 복잡
- 초기 설정이 다른 프레임워크에 비해 조금 복잡할 수 있다.
개인적인 생각
- 대규모 웹 애플리케이션 개발에 적합한 고수준 프레임워크
- 개인적으로 생각하는 고수준 프레임워크로 여겨지는 이유 5가지
- 코드의 재사용성
- 많은 기능을 내장하고 있어, 새로운 웹 애플리케이션을 빠르게 개발할 수 있도록 돕는다.
- ORM의 사용
- ORM을 통해 데이터베이스와의 상호작용을 추상화 한다.
- SQL 질의문 대신 파이썬 코드를 사용해 데이터를 다룰 수 있다.
- 데이터베이스의 변경에 따른 코드 수정이 간단해진다.
- 대규모일 경우 데이터베이스 관리가 용이하다.
- Super 보안기능
- SQL인젝션, XSS, CSRF등 방어 기능 내장
- 스케일링 및 확장성
- 대규모 트래픽에 대한 확장성을 고려한 구조를 가졌다.
- 캐싱, 데이터베이스 샤딩(단일 데이터 세트를 파티션이나 샤드로 분할), 로드 밸런싱 등의 기능을 쉽게 적용가능하다. (타 프레임워크에 비해서겠지만 그마저도 쉽진 않아보인다....)
- 커뮤니티 지원, 문서화
- 제공되어있는 문서들이 많으며 활발한 개발자 커뮤니티를 가지고있다.
- 사람들이 많이 사용하다 보니 문서화된 것들이 많다.
- 파이썬 웹 프레임워크 중 가장 많이 사용
- 가장 많이 사용되기에 얻을 수 있는 정보들이 많다.
- 모르는 것이 생겼을 때 참고할 수 있는 것이 많다.
- 전체 웹 애플리케이션을 개발하기 위한 모든 기능을 포함
- 프론트와 백엔드 둘다 가능하다(풀 스택 프레임워크)
- ORM 기반의 MTV아키텍처에서 오는 편안함
- Admin 패널을 통해 강력한 관리자 기능 사용이 가능하다.
Falsk
Flask의 목적 및 철학
- 가볍고 유연한 마이크로 프레임워크
- "작게 시작해서 크게 성장"
장점
- 경량하고 간결한 구조 (Micro Web Framework)
- 유연성
- 자유도가 높음
- 개발자가 선호하는 라이브러리와 도구를 선택하여 사용할 수 있음
- 빠른 개발
- 간단한 프로젝트, 프로토타입을 빠르게 개발할 수 있다.
(개인적인 생각으로는 개발자가 어느정도 숙달되면 어떤 프레임워크라도....)
단점
- 기능 부족
- 장고에 비해 기본적으로 제공하는 기능이 적음
- 큰 규모의 프로젝트에는 추가작업이 많이 필요함
- 높은 자유도에 따른 책임이 있음
개인적인 생각
- 최소한의 구조를 가진 웹 프레임워크
- 확장성이 매우 뛰어나며 개발자에게 자유도를 제공한다.
- 개발자의 역량에 따라 많은 것들이 생길 수 있다.
(좋은 부분과 안 좋은 부분 모두)
- 작은 규모의 애플리케이션에 적합하다.
- 말 그대로 작은 규모의 Web 애플리케이션
- 프로토타이핑
- 간단한 API 서비스
FastAPI
FastAPI란?
FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python의 API를 빌드하기 위한 웹 프레임워크입니다.
장점
- 빠른 성능
- 자동 문서화
- Swagger와 ReDoc 같은 자동 API 문서 생성을 지원하여 API문서화가 간편하다.
(Django나 Flask도 가능하지만 자동이라는 것이 큰 이점)
- 향상된 코드 품질
- python 3.5 이상의 타입 힌트를 사용하여 코드의 가독성을 높이고, 개발자 간의 협업을 용이하게 한다.
- Pydantic을 사용하여 데이터 정의 및 유효성 검사를 한다.
단점
- 새로운 프레임워크
- 상대적으로 새로운 프레임워크이므로 Django나 Flask에 비해 커뮤니티 규모가 작다.
- 기본 기능의 부족
- 타 프레임워크에 비해서 기능들이 부족하다.
(일부 기능에 대해 추가 라이브러리가 필요하다.)
- ORM 연동이 상당히 귀찮다
(SQLAlchemy를 많이 사용)
개인적인 생각
- 비동기 처리를 지원한다.
- 빠르고 효율적인 데이터 직렬화 및 모델 처리.
- 자동 생성된 OpenAPI 및 JSON 스키마를 제공하여 API문서 자동화
- Pydantic을 활용한 데이터 검증
- API서버, ML/DL 모델 배포, 높은 성능의 서비스에 적합
그래서 무엇을 선택해야 하는가?
결론은 뭘 선택해야 좋은지 이것이 가장 큰 고민거리 입니다.
-
Django
- 대규모 및 복잡한 프로젝트
- 활발한 커뮤니티
- 강력한 보안 기능이 필요
- 전체 웹 어플리케이션을 개발할 경우
-
Flask
- 중간 규모 및 유연성이 필요한 프로젝트
- 개발 속도와 성능을 중요시 하는 경우
-
FastAPI
- API중심 및 빠른 프로토타이핑 프로젝트
- 비동기 프로그래밍 요구
- 자동화된 문서화
- 데이터 유효성 검사의 필요성
여기서 조금 더 요약을 하자면!
Django :
- 아 몰라 내 프로젝트는 좀 크고 보안도 중요하고 기능 많고 참고 할 수 있는 것이 많으면 좋겠다
Flask :
- 생각보다 큰 프로젝트가 아니고 내가 유연한 개발을 할 수 있으며 속도랑 성능이 좀 중요하다.
FastAPI :
- 비동기 처리가 필요하며 높은 성능과 효율성이 중요하고 API개발에 중점을 뒀다.
라고 생각했습니다