💾 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