💾 Backend/Python
Flask, Django 기본 개념 정리 및 비교
hjinn0813
2024. 10. 10. 15:57
728x90
Python으로 API 만들어서 제공하는 기능을 구현하려면 Flask 혹은 Django를 사용할 수 있다. 두 프레임워크는 철학과 구조에서 큰 차이가 있기 때문에, API를 만드는 방식이 다르고 유지보수 측면에서도 각각의 장단점이 있다. 회사에서 백엔드로 Python을 사용할 예정이라, 프론트엔드 측에서 API를 불러오려면 Python으로 API 만드는 방법을 대략적이라도 알아야 할 것 같아서 정리하는 글.✍
Flask
Python 기반의 마이크로 웹 프레임워크.
"마이크로"는 기본적으로 최소한의 기능만 제공하는 프레임워크라는 뜻.
사용자가 필요에 맞게 다양한 플러그인이나 라이브러리를 추가해 사용할 수 있다.
Flask 특징
- 가볍고 유연함: 필수 구성 요소가 거의 없고, 개발자가 원하는 대로 프로젝트 구조를 설계할 수 있다.
- 자유로운 커스터마이징: 기본 제공하는 기능이 적어서 필요한 기능을 직접 구현하거나 플러그인으로 추가해야 한다.
- 빠른 시작 가능: 단일 파일로 간단한 웹 서버나 API를 바로 구축할 수 있다.
Flask 사용 예시
- 소규모 프로젝트: 간단한 웹 애플리케이션이나 API 서버를 빠르게 만들 때 유용하다.
- 단순한 API 서비스: 가벼운 REST API 서버를 구축할 때 자주 사용된다.
- 프로토타입 제작: 초기 단계에서 빠르게 시제품을 만들 때 적합하다.
장점 | - 간결함: 프로젝트가 작거나 간단할 때 빠르고 간편하게 사용할 수 있다. - 유연성: 프로젝트 구조를 자유롭게 설계할 수 있어 다양한 요구 사항에 맞출 수 있다. - 학습곡선이 낮음: 기본적인 기능만 학습하면 바로 프로젝트를 시작할 수 있다. |
단점 | - 큰 프로젝트에는 복잡함: 대규모 프로젝트에서는 모든 구성요소를 개발자가 직접 처리해야 해서, 구조와 관리가 복잡해질 수 있다. - 내장된 기능 부족: ORM(데이터베이스), 인증, 관리자 패널 등 기본적인 기능을 제공하지 않아서 직접 추가해야 한다. |
Flask로 API 만들기 예시 코드 (by chatGPT)
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/data')
def get_data():
return jsonify({"orders": 150, "sales": 345000})
if __name__ == '__main__':
app.run(debug=True)
Django
"The web framework for perfectionists with deadlines"라는 슬로건을 가지고 있으며, 즉각적인 개발 생산성을 목표로 하는 Python 기반의 풀스택 웹 프레임워크. 많은 기능이 기본으로 내장되어 있어 복잡한 웹 애플리케이션을 빠르고 효율적으로 개발할 수 있다.
Django 특징
- 강력한 내장 기능: ORM(데이터베이스 처리), 인증, 관리자 패널, URL 라우팅, 폼 처리 등 웹 개발에 필요한 대부분의 기능을 기본으로 제공한다.
- 엄격한 구조: 프로젝트 구조가 미리 정의되어 있어, 코드의 일관성이 높고 유지보수에 용이하다.
- 대규모 애플리케이션에 적합: 복잡하고 기능이 많은 대규모 웹 애플리케이션 개발에 적합하다.
Django 사용 예시
- 대규모 웹 애플리케이션: 소셜 네트워크, 전자상거래 플랫폼, 블로그 등의 복잡한 기능을 가진 웹사이트 등.
- 프로덕션 환경: 완성도 높은 웹 애플리케이션을 만들고, 보안과 확장성을 고려해야 할 때 유용하다.
- 관리 도구가 필요한 서비스: 관리자가 데이터를 관리하거나 모니터링할 필요가 있는 프로젝트에서 Django의 관리자 패널이 매우 유용하다.
장점 | - 내장 기능으로 인한 빠른 개발: 많은 기능을 직접 구현하지 않고 바로 사용할 수 있어 개발 속도가 빠르다. - 강력한 관리자 패널: 자동으로 생성되는 관리 인터페이스가 개발자와 관리자에게 유용하다. - 보안 기능 제공: 인증, 권한 관리, CSRF 방어 등 여러 보안 관련 기능이 기본적으로 제공된다. - 대규모 프로젝트에 적합: 잘 정의된 구조 덕분에 유지보수와 확장이 쉽다. |
단점 | - 무거움: 많은 기능이 기본으로 제공되어, 작은 프로젝트에서는 불필요한 기능이 많을 수 있다. - 복잡성: 대규모 프로젝트에 적합한 도구라, 처음 접하는 사람들에게는 다소 복잡할 수 있다. |
Django로 API 만들기 예시 코드 (by chatGPT)
# views.py
from django.http import JsonResponse
def get_data(request):
data = {"orders": 150, "sales": 345000}
return JsonResponse(data)
# urls.py
from django.urls import path
from .views import get_data
urlpatterns = [
path('api/data/', get_data),
]
Django에서 API를 만들 때 views.py와 urls.py로 파일이 나눠져 있는데, 그 이유는 각각의 역할이 다르기 때문에 코드를 구조화해서 가독성과 유지보수를 쉽게 하기 위해서이다.
/
1. views.py
사용자가 요청한 데이터나 처리 결과 반환 등, 실제 비즈니스 로직을 담당하는 부분.
클라이언트(프론트엔드)에게 받은 요청을 처리하고, 그 결과를 HTML, JSON 등 적절한 응답으로 돌려주는 파일.
쉽게 말해, "사용자가 어떤 요청을 했을 때, 어떤 데이터를 보내줄지" 결정하는 부분.
/
2. urls.py
URL 요청이 들어오면 그걸 어떤 view로 연결할지 설정하는 파일.
Django에서는 각 URL마다 해당하는 뷰를 연결해야 하는데, 이때 그 연결 설정을 urls.py에서 한다.
쉽게 말해, "어떤 URL에서 어떤 작업을 할까?"를 결정하는 부분.
/
👉 예시로 보면: urls.py에서 '/api/data/'라는 URL로 요청이 들어오면, 그 요청을 views.py의 get_data 함수로 연결시켜주는 구조이다. 내가 익숙한 React에 대입해보면, urls.py가 라우팅 설정이고 views.py가 페이지의 내용인 셈이다. 이렇게 코드가 구조화되어 있으면, 각 파일의 역할이 명확하니까 특정 기능을 쉽게 확인할 수 있어서 유지보수가 훨씬 편리하다.
Flask와 Django 비교
/ | Flask | Django |
성격 | 마이크로 프레임워크 (최소 기능 제공) | 풀스택 프레임워크 (기본 기능 다수 제공) |
자유도 | 매우 높음 (개발자가 직접 구성) | 낮음 (엄격한 구조 제공) |
학습 난이도 |
쉬움 (간단하게 시작 가능) | 중간 (초반 설정이 복잡할 수 있음) |
기본 기능 | 거의 없음 | ORM, 인증, 관리자 패널 등 기본 제공 |
사용처 | 소규모 프로젝트, 단순 API | 대규모 애플리케이션, 복잡한 웹사이트 |
유지보수 | 프로젝트가 커지면 복잡해질 수 있음 | 구조가 명확해서 대규모 프로젝트에 유리함 |
그러므로,
Flask는 간단한 API나 소규모 프로젝트에 적합하고, 자유로운 구성을 원할 때 유리하다.
Django는 내장된 다양한 기능을 통해 복잡한 애플리케이션의 빠른 개발이 가능하고, 대규모 프로젝트에서 유지보수가 쉽다.
728x90