안녕하세요 성조입니다.
학습한 내용을 기반을 복습 및 정리하여 포스팅하는 것이므로 100% 올바른 정답이라고 단정 짓기 어렵습니다. 만약 잘못된 지식 전달 사항이 조금이라도 있는 경우 언제든지 댓글을 달아서 문제가 되는 부분에 대해서 공유해 주시면 감사드리겠습니다!
Flask란?
흔하게 언급되는 Flask의 정의로 오스트리아 개발자 Armin Ronacher가 만우절을 기념해서 만들었던 프로젝트로 2010년 4월 1일에 정식으로 출시하게 된 재미난 역사가 있는 프레임워크이다. (Flaks GitHub Topis 참조)
Flask의 특징
Flask의 경우 풀스택을 지향하는 Django 프레임워크와 다르게 최소한의 구성으로 이뤄진 프레임워크로 Jinja 템플릿 엔진과 Tool 이라는 라이브러리만을 활용하여 프로젝트를 진행할 수 있다.
최소한의 기능들을 가지고 빠른 프로젝트를 구현할 수 있다는 특징이 있지만 최소한의 기능으로 출발했다가 향후 서비스가 커지는 경우 오히려 많은 기능들을 추가로 구현해야 하는 경우도 많이 있을 수 있다. 자유도가 높은 만큼 커스텀할 때 역량에 따라서 활용도가 다른 부분 또한 특징이다.
경량 된 만큼 필요한 기능들이 많을 텐데 필요한 기능들은 확장팩을 활용해서 붙이거나 구현해서 활용해야 한다.
Flask의 jinja란?
Jinja 템플릿의 경우 다음과 같은 구문을 갖는다. (코드 예제 : wikipedia)
<!DOCTYPE html>
<html>
<head>
<title>{{ variable|escape }}</title>
</head>
<body>
{%- for item in item_list %}
{{ item }}{% if not loop.last %},{% endif %}
{%- endfor %}
</body>
</html>
흔한 HTML 코드와 다름이 없지만 {%구문%}을 기반으로 하는 Jinja를 활용하면 코드를 쉽게 재사용하여 생산성을 증대시킬 수 있다.
Flask의 장단점
장점
경량성 : Flask 프레임워크는 경량형을 바라봄녀서 필요한 기능만을 제공하여 빠르게 개발 하는 것을 초점으로 잡고 나왔기 때문에 파일의 용량은 비교적 적다.
유연성 : 레고 블록을 작게 조립하는 것처럼 Flask도 작은 기능 하나로도 빠르게 시작할 수 있기 때문에 다양한 기능들을 붙여서 유연하게 작동시킬 수 있게 된다. 필요한 부품을 체크하는 것과 동일하게 프로젝트에서 필요한 기능들을 체크해서 붙여낼 수 있는 장점이 존재한다.
초반에는 쉬운 학습 곡선 : 레고 부품으로 간단한 프로그램을 만들 때는 비교적 쉽게 만들 수 있는데 Flask도 그런 작은 부품 단위들을 잘 정리한 것과 같이
강력한 디버깅 기능 : 내장된 디버깅 기능을 활용하여 버그를 빠르게 제거할 수 있는 장점이 존재한다.
단위 테스트 지원 : 디버깅과 함께 내장된 유닛 테스트 지원으로 테스트 케이스를 쉽게 작성해서 TDD 운용을 보다 쉽고 빠르게 진행할 수 있다.
단점
보안 : 경량형을 지향하는 Flask는 보안을 위해서는 자체 라이브러리나 모듈을 만들어서 사용해야 보안성을 지킬 수 있다.
대규모 프로젝트 : Flask가 MSA(Microservice)에 가까운 프레임워크라고 하지만 대규모 프로젝트로 넘어가면 Spring의 아성이나 다른 프레임 워크들의 아성을 따라가기 애매한 위치에 존재하기 때문에 큰 규모의 프로젝트로 넘어가면 조금 버거울 수 있다.
개발자의 스킬 : 기본적으로 제공되는 라이브러리나 프레임워크들이 내장된 것들이 아니기 때문에 하나의 기능을 추가해도 의존성 체크부터 시작해서 다양한 에러 사항들을 모두 봐야하는 어려움이 있다. 오히려 초반을 제외하고 후반에 대규모 프로젝트에 적용할 때 타입 충돌나는 부분이 발생될 수 있는 점들을 주의해야 한다.
성능 : 경량 프레임워크로 빠른 성능을 요구하는 것이지만 최근에는 Node.js의 아성에 도전하는 Fastapi 프레임워크가 존재하기 때문에 속도적인 측면만 봤을 때 Flask가 빠른 생산성과 속도를 가졌다고 판단하기 어렵다.
대체품의 존재 : Django도 Fastapi도 다양한 프레임워크들이 발생하고 있는 것들이 Flask가 고평가되기 어려운 부분이 될 부분이라 생각된다. Django의 경우 Python 프레임워크의 1인자 자리를 차지한지 오래됐으며, Fastapi의 경우 위 언급과 동일하게 Node.js의 빠른 속도를 따라잡기 시작한 프레임워크이며, 이 포스팅 작성 당시 Python 언어 기반의 프레임워크중 가장 빠른 프레임워크라고 측정되고 있는 부분들이 존재한다.
Flask와 Django 장단점 비교
Flask 프레임워크의 경우 작은 규모의 프로젝트를 빠르게 개발할 수 있으며, 유연하게 개발할 수 있는 장점이 있지만 큰 단점으로 만들어야 하는 모듈이나 라이브러리가 많이 있기 때문에 오히려 시간이 더 생길 수 있다는 점이다. 프레임워크 자체가 대규모 프로젝트에도 적합할 수 있으나 모든 기능을 동적 타입 언어에서 설계하고 만들어내는 것 자체가 유지보수 측면부터 프로젝트 전반적인 부분들이 전체적으로 힘들어질 수 있다. Node.js만 봐도 TypeScript를 도입했고, Spring의 경우 안정적인 운용을 도와준다.
Django의 경우 ORM을 기본 지원하며, Python 언어중 가장 큰 커뮤니티를 구축하고 있다는 점. 그리고 기본적으로 관리자 페이지를 제공하며, 대규모 프로젝트로 서비스를 성공한 사례가 많이 존재하기 때문에 좋은 벤치마킹 사례를 만들 수 있다. 하지만 Django 역시 단점으로 기본 제공되는 규칙들이 존재하기 때문에 Flask 비해서 덜 코드에 신경쓸 수 있지만 코드를 대규모 프로젝트를 만들어낼 수는 없다. 성능적 측면도 Fastapi와 같은 프레임워크가 발생하면서 장점이라 보기 어려울 수 있다. ORM의 기능이 물론 좋은 기능이지만 ORM 기능만으로 처리하기 어려운 쿼리문을 배제하기 어렵다는 부분도 인지해야 한다.
각각 프레임워크의 장단점은 나름 뚜렷하게 존재한다. 프로젝트를 진행하는데 있어서 상황에 맞춰서 좋은 프로젝트를 진행하는 것이 권장한다. 속도적인 측면은 어떤 프레임워크를 활용해도 결국 언어의 이해도가 있어야 프로젝트를 온전히 활용해서 만들 수 있을 것이라 생각된다. Django도 Flask, Fastapi 프레임워크 등 다양한 프레임워크를 활용해서 개발하는 개발자들에게 응원을 보내고 싶다.
각자의 프로젝트가 성공적인 서비스로 진행될 수 있기를 바란다.
부족한 포스팅 읽어주셔서 감사드립니다.
올바르지 못한 내용이나 궁금한 내용이 있다면 언제든지 댓글로 지식을 얘기해 주시면 감사드리겠습니다.
더 좋은 포스팅 작성할 수 있도록 더 노력해보겠습니다.
다음 포스팅 때 뵙겠습니다.
참고
https://en.wikipedia.org/wiki/Jinja_(template_engine)
https://github.com/topics/flask