API 서버를 위해 어떤 웹 프레임워크를 사용해야 할까? (Django, Flask, Express)

d4v1d·2022년 3월 6일
3

개요

동적 데이터를 다루는 웹을 구현하기 위한 프레임워크로 많이 사용하는 세 가지 프레임워크(Django, Flask, Express)를 비교하는 포스트입니다. 👀

목표

API 서버를 개발하기 위해 어떤 웹 프레임워크를 사용하는 것이 적절할지를 알아봅시다.

What is Web Framework? (Wikipedia)
웹 프레임워크 또는 웹 애플리케이션 프레임워크는 동적인 웹 페이지나 웹 애플리케이션, 웹 서비스를 개발하는 데 도움이 되는 애플리케이션 프레임워크를 말합니다.

What is API Server?
API 서버는 웹/앱을 이용하는 클라이언트가 데이터베이스, 혹은 다른 외부 프로그램을 이용하기 위해 그 사이에 존재하는 규격화된 서버입니다. 이번 포스트에서는 클라이언트-데이터베이스간 통신에 초점을 맞추어 여러 웹 프레임워크를 비교하려고 합니다.

프레임워크 비교하기

Django


Django는 python으로 작성된 오픈소스 풀스택 웹 프레임워크로, MVC(Model-View-Controller) 패턴에서 나아가 MTV(Model-Template-View) 아키텍쳐를 따르고 있습니다. UI로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적인 요소와 뒷단에서 실행되는 비즈니스 로직이 서로 영향을 주지 않고 쉽게 고칠 수 있는 디자인이죠.

Django의 목표는 데이터베이스 기반의 규모가 큰 웹사이트를 작성하는데 도움을 주는 것이며, 컴포넌트의 재사용성과 빠른 개발, 중복배제 원리(DRY: Don't Repeat Yourself)를 강조하고 있습니다.

특징
웹 개발에서 번거로운 요소들을 새로 개발할 필요 없이, 내장된 기능만을 이용해 빠르게 웹을 개발할 수 있습니다.

Django로 개발된 서비스

  • Instragram
  • Spotify
  • Youtube
  • DropBox
  • NASA
  • Mozilla
  • Bitbucket - Github와 비슷한 버전 관리 저장소 호스팅 서비스

Flask


Flask는 Django와 마찬가지로 python으로 작성된 마이크로 웹 프레임워크입니다.

특징
별도의 라이브러리가 필요없기 때문에 마이크로 프레임워크라고 불립니다. 또한, 웹 서버를 띄우기 위해 작성해야 하는 코드가 굉장히 단순하다는 장점이 있습니다.

# Flask를 이용해 "Hello World"를 보여주는 웹 애플리케이션 구동하기
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello() -> str:
    return "Hello World"

if __name__ == "__main__":
    app.run(debug=False)

Flask로 개발된 서비스

  • Netflix
  • Reddit
  • Airbnb
  • Pinterest
  • LinkedIn
  • Flask 자체 공동체 웹 페이지

Express


Express는 Node.js 기반 웹 애플리케이션 프레임워크로, Node.js로 서버를 구현하기 위해서 사실상 표준으로 사용되는 프레임워크입니다.

특징
앞의 두 프레임워크가 python으로 작성된 것과 달리, Express는 Node.js 기반(CommonJS) 프레임워크이므로 JavaScript에 익숙한 사용자라면 Express를 활용하여 쉽게 서버를 개발할 수 있습니다.

// Express를 이용해 "Hello World"를 보여주는 웹 애플리케이션 구동하기
const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

Express로 개발된 서비스

  • Fox Sports
  • Uber
  • IBM

어떤 프레임워크를 사용해야 할까?

Django

장점

  • Python으로 작성되어 python이 익숙하다면 편하게 개발할 수 있음
  • CDN(Content Delivery Networks, 컨텐츠 전송 네트워크)과 CMS(Content Management System)이 잘 갖추어져있어 유튜브, 인스타그램같은 대용량의 멀티미디어를 전송하는 서비스에서 많이 이용됨
  • 개발자가 애플리케이션을 위해 직접 개발해야하는 부분 이외의 기능들을 기본으로 제공하여 중복 배제(DRY) 원칙을 지킴
  • 프로그램 확장성이 좋음(scalable)

단점

  • Monolithic - 개발 자유도가 낮다! Django way대로만 개발해야 함
  • URL 맵핑을 위해 정규표현식(Regular Expression)을 사용해야 함
  • 작은 프로젝트에는 적합하지 않음

Flask

장점

  • 유연함 - Django에 비해 개발 자유도가 높다!
  • 프로그램 확장성이 좋음(scalable)
  • 프레임워크 자체가 가벼움

단점

  • 내장 기능이 많지 않아 필요한 기능이 들어있는 확장프로그램을 추가해야 함
  • 자유도가 높기 때문에 큰 프로젝트를 개발할 때 오히려 독이 될 수도...

Express

장점

  • 백엔드/프론트엔드를 모두 JavaScript로 개발할 수 있기 때문에 풀스택 개발도 가능, 혹은 양 엔드 개발자간 커뮤니케이션이 한층 수월함
  • Node.js에 익숙한 개발자를 위해 아주 얇은 계층의 레이어로 구현되어 있어 개발이 비교적 쉬움

단점

정리

스케일이 그렇게 크지 않을 것으로 예상되는 개인/팀 토이 프로젝트 개발에는 Flask 또는 Express를 사용하는 게 현명하다고 판단됩니다! 두 프레임워크 모두 간단한 설정과 짧은 코드를 통해 예제 서버 프로그램을 쉽게 작성할 수 있고, Python과 Node.js 둘다 활용도가 매우 높은 프로그래밍 언어들이므로 러닝 커브가 낮다는 장점이 있습니다.
반면, 대용량 컨텐츠를 주로 다루거나 보안과 트래픽 처리를 신경써야 하는 엔터프라이즈급 프로젝트에서는 Django를 사용하는 것이 좋습니다. 또한, Django는 외부 라이브러리가 필요없게끔 내장 기능들을 잘 갖추었기 때문에 프로젝트가 커질 가능성이 높다면 Django를 선택하는 것이 현명하겠죠. 😃

profile
데이터 엔지니어/백엔드 개발자 d4v1d의 개발 일지🐯

1개의 댓글

comment-user-thumbnail
2023년 8월 15일

감사합니다.

답글 달기