파이썬은 웹 애플리케이션 개발을 위한 다양한 프레임워크를 제공하며 대표적으로 Django, Flask, FastAPI가 있다.
* 프레임워크 : 웹 어플리케이션이나 서비스를 구현하는데 필요한 패키지나 모듈을 제공하여 개발과정을 더 수월하게 만들어주는 일종의 뼈대.
플라스크(Flask)
장점
- 단순하고 간단하게 일부를 쉽게 안전하게 변경할 수 있다.
- 대규모 네트워크에 배포할 수 있는 모듈식의 응용 프로그램이나 서버를 만들 수 있다.
- 파이썬을 잘 이해하면 쉽게 응용 프로그램을 개발할 수 있다.
- 모놀리식 애플리케이션이 아니므로 확장성이 뛰어나다.
단점
- Django에 비해 기능이 적고, 표준화되어 있지 않기때문에 Django 등의 프레임워크 전환이 어려울 수 있다.
- 개발 확장과 배포를 위해서 라이브러리 및 확장을 많이 검색해봐야 한다.
- 전체 웹 애플리케이션을 개발하기에는 제약이 있다.
장고(Django)
Django는 웹 애플리케이션 개발을 위한 풀스택 웹 프레임워크이다.
내장 ORM과 DB 마이그레이션으로 model을 쉽게 관리할 수 있고 많은 보안기능을 제공하고 있다.
장점
- Model(모델), Template(템플릿), View(뷰)로 구성된 MTV 패턴을 사용하고 있다. (MVC 패턴과 유사)
- MVC (모델-뷰-컨트롤러) 아키텍처를 활용한 데이터 베이스 접근이 용이하다.
- SQL을 사용하지 않고 Database에서 사용하는 테이블(RDBMS)을 자동으로 대응해 주는 ORM(Object-Relational Mapping)을 통하여 코드를 작성할 수 있다.
- 많은 보안 기능을 내장하고 있어, 보안성이 우수하다.(CSRF (사이트간 요청 위조), 사이트 간 스크립팅, SQL Injection 등의 보안 모듈 제공)
- 다양한 타사 패키지 및 플러그인을 지원하며, 다른 프레임워크보다 많은 라이브러리를 사용할 수 있다.
단점
- 소규모 프로젝트에는 무겁고 기능이 많아 부적합하다.
- Django 프레임워크의 규칙이 별도로 존재하지 않는다.
- 단일 패키지로 간주해야 하는 모놀리식 아키텍처이다.
- 개별 프로세스에 대한 요청은 Django 개발 프로세스를 느리게 할 수 있다.
- ORM을 사용한다고 했을 때, 복잡한 데이터 구조(Join이 많은 경우)나 Procedure(프로시져)를 많이 사용한 곳에는 적합하지 않을 수 있다.
FastAPI
파이썬 웹 프레임워크 중 가장 유명한 장고와 플라스크는 주로 웹 서비스를 만들때 사용한다.
하지만 FastAPI는 API를 만드는데 보다 집중한 프레임워크이다.
FastAPI로 작성한 API는 리액트, Vue.js과 같은 프론트엔드 웹 프레임워크에서 사용할 수 있고 안드로이드, 아이폰 앱에서도 사용할 수 있다.
만약 장고나 플라스크로 웹 서비스를 만들었다면 이에 대응하는 안드로이드나 아이폰 앱을 위한 API 개발을 따로 해야 하지만 FastAPI는 한번 만든 API를 여러 클라이언트에서 변경 없이 사용할 수 있다.
FastAPI는 Flask와 비슷한 구조를 가졌으며, 비동기식으로 작성되어 병목현상이 자주 일어나는 웹 서버에서 빠른 성능을 보여준다.
* 비동기처리(Asynchronous) : 특정 로직의 실행이 끝날때까지 기다리지 않고 나머지 코드를 먼저 실행하여 처리함.
장점
- FastAPI는 내부적으로 Starlette이라는 비동기 프레임워크를 사용하기 때문에 빠른 속도와 높은 성능 지원이 가능하다.
- FastAPI는 입출력을 정의하고 입출력 값의 검증을 빠르고 안전하게 할 수 있다.
- FastAPI로 작성한 API는 API 사용법에 관한 문서를 따로 작성할 필요 없이 API 문서가 자동으로 생성된다. API 문서는 웹 페이지 형태로 제공되며 쉽게 API 동작을 테스트할 수 있다.
- 웹 서버 WSGI (Web Server Gateway Interface) 및 비동기 ASGI (Asynchronous Server Gateway Interface)을 지원한다.
단점
- FastAPI는 새로운 프레임워크이기 때문에 다른 프레임워크에 비해 커뮤니티 등 교육 정보가 매우 적고 신뢰성이 낮다.
- FastAPI Security를 제공하지만 Django에 비해 보안성이 부족하다.
- ORM 사용을 위해 sSqlAlchemy 사용, DB마이그레이션을 위해 Alembic 설치, validation을 위한 Pydnatic 설치 등 다양한 의존성을 직접 관리해야한다.
선택의 기준
각각의 프레임워크는 다른 목적과 용도에 적합한 장단점을 가지고 있다.
프로젝트의 목표, 규모, 기술적 요구 등 프로젝트의 특성에 따라 적합한 프레임워크를 선택해야한다.
- Flask : 작은 규모의 웹 애플리케이션을 개발하고자 하는 경우, 유연한 개발이 필요한 경우
- Django : 전체 웹 애플리케이션을 개발하고자 하는 경우, 강력한 보안기능이 필요한 경우
- FastAPI : 비동기 처리를 필요로 하는경우, 높은 성능과 효율성이 요구되는 경우, API 개발에 중점을 둔 경우
'Days > IT' 카테고리의 다른 글
깃헙 소스트리 사용해보기 (0) | 2024.02.23 |
---|---|
DNS (1) | 2023.12.20 |
GET / POST (1) | 2023.12.04 |
데이터 크롤링과 BeautifulSoup (1) | 2023.12.01 |
알아두면 도움이 되는 IT 용어 (0) | 2022.07.01 |
댓글