동적 데이터를 다루는 웹을 구현하기 위한 프레임워크로 많이 사용하는 세 가지 프레임워크(Django, Flask, Express)를 비교하는 포스트입니다. 👀
API 서버를 개발하기 위해 어떤 웹 프레임워크를 사용하는 것이 적절할지를 알아봅시다.
What is Web Framework? (Wikipedia)
웹 프레임워크 또는 웹 애플리케이션 프레임워크는 동적인 웹 페이지나 웹 애플리케이션, 웹 서비스를 개발하는 데 도움이 되는 애플리케이션 프레임워크를 말합니다.
What is API Server?
API 서버는 웹/앱을 이용하는 클라이언트가 데이터베이스, 혹은 다른 외부 프로그램을 이용하기 위해 그 사이에 존재하는 규격화된 서버입니다. 이번 포스트에서는 클라이언트-데이터베이스간 통신에 초점을 맞추어 여러 웹 프레임워크를 비교하려고 합니다.
Django는 python으로 작성된 오픈소스 풀스택 웹 프레임워크로, MVC(Model-View-Controller) 패턴에서 나아가 MTV(Model-Template-View) 아키텍쳐를 따르고 있습니다. UI로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적인 요소와 뒷단에서 실행되는 비즈니스 로직이 서로 영향을 주지 않고 쉽게 고칠 수 있는 디자인이죠.
Django의 목표는 데이터베이스 기반의 규모가 큰 웹사이트를 작성하는데 도움을 주는 것이며, 컴포넌트의 재사용성과 빠른 개발, 중복배제 원리(DRY: Don't Repeat Yourself)를 강조하고 있습니다.
특징
웹 개발에서 번거로운 요소들을 새로 개발할 필요 없이, 내장된 기능만을 이용해 빠르게 웹을 개발할 수 있습니다.
Django로 개발된 서비스
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로 개발된 서비스
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로 개발된 서비스
장점
단점
장점
단점
장점
단점
스케일이 그렇게 크지 않을 것으로 예상되는 개인/팀 토이 프로젝트 개발에는 Flask 또는 Express를 사용하는 게 현명하다고 판단됩니다! 두 프레임워크 모두 간단한 설정과 짧은 코드를 통해 예제 서버 프로그램을 쉽게 작성할 수 있고, Python과 Node.js 둘다 활용도가 매우 높은 프로그래밍 언어들이므로 러닝 커브가 낮다는 장점이 있습니다.
반면, 대용량 컨텐츠를 주로 다루거나 보안과 트래픽 처리를 신경써야 하는 엔터프라이즈급 프로젝트에서는 Django를 사용하는 것이 좋습니다. 또한, Django는 외부 라이브러리가 필요없게끔 내장 기능들을 잘 갖추었기 때문에 프로젝트가 커질 가능성이 높다면 Django를 선택하는 것이 현명하겠죠. 😃
감사합니다.