본문 바로가기

Server-DB/Express

CRUD를 중심으로 express와 django 웹프레임워크를 비교해본다

express와 django 모두 웹프레임워크이나, 몇 가지 차이점이 존재한다.

어느 웹 프레임워크를 사용하건 간에, CRUD를 중심으로 웹서비스를 구현하는 건 모두 똑같다. 그래서 하나의 웹프레임워크를 사용하는 것에 익숙해지면, 다른 웹프레임워크도 쉽게 익숙해질 수 있다. API를 설계하는 과정은 결국, GET/POST/PUT/DELETE 요청(읽기, 쓰기, 수정, 삭제)에서 모든 기능이 나오기 때문이다.

 

다만, 어떤 언어를 기반으로 하는가, 그리고 어떤 프레임워크를 중심으로 웹서비스를 구축하는가에 따라서 세부적인 부분들이 달라진다. 각 언어별로 대표적인 프레임워크들이 존재하지만, 개인적으로는 node.js와 python 환경의 프레임워크를 선호한다. java나 php 계열의 프레임워크가 안정성이 뛰어나다고 생각하지만, 안정성 이전에 스타트업쪽에 관심이 많은 나로서는, 서비스를 얼마나 빨리 만들어낼 수 있는가(생산성)가 주된 관심사이기 때문이다. 물론 작은 블럭이 아닌 큰 블럭으로 건물을 짓는 만큼 디테일함은 떨어질 수 있으나, 제품개발이라는 측면에서는, 개발속도가 더 중요한 요소라고 생각한다.

 

웹서비스 설계시 우선적으로 구현해야할 부분은 어느 url로 들어갔을 때, 어떤 로직이 작동하는가 일 것이다. 특히 url이라는 것의 mapping이 모든 것의 시작이라고 생각하는데, django의 경우, url mapping이 상당히 엄밀하다고 할 수 있다. 애초에 프레임워크 자체에서 application 생성 시 urls.py라는 파일이 주어진다. 그리고 모든 url을 이 곳에 정리해두어야 한다. 그리고 application을 추가할 경우에는, 또다른 urls.py가 생기기 때문에, include 라이브러리를 이용해, url을 계층적으로 관리해야 한다. 반면에 node.js환경의 express 프레임워크의 경우에는 덜 엄밀히 url을 관리할 수 있다. 별도의 url 파일이 없는 대신에 router 라이브러리를 활용해 url들을 분리하여 관리할 수 있다.

 

url mapping 이후에는, 해당 url에서 어떠한 로직이 작동해야 하는가에 대한 정리가 필요하다. 그러한 부분을 담당하는 파일이 server.js 그리고 views.py이다. 사실 이 부분은 두 프레임워크에 있어서 큰 차이를 느끼지 못했다. 그러나 개인적으로는 node.js 환경에서 로직을 만드는 것이 편했는데, call back 함수를 활용해 요청이 들어 왔을 때, 어떤 응답과 결과를 보내야 하는지가 code 상에서 객관적으로 드러났기 때문이다. django의 경우에는, 그 때 그 때 마다 함수를 정의해줘야 했지만, express는 app.get, app.post 이런 형식을 바로 바로 api를 설계할 수 있어서 편했다.

 

url과 로직을 만든 이후에는 이제 어떠한 html파일을 렌더링할지가 중요하다. 이 부분은 백엔드가 아닌 프론트에 가까운 부분이라 별 구분이 없다고 생각하지만, html 상에서 javascript나 python을 사용하기 위해서, 별도의 라이브러리가 필요한가에 대해서는 차이가 존재한다. node.js 환경에서는 ejs(embedded javascript)라는 라이브러리를 설치해야 하지만, django에서는 그럴 필요 없이 템플릿언어를 바로 사용하는 점이 차이점이었다.

 

마지막 부분이 가장 차이가 나는 부분이라고 생각하는데, db를 관리하는 측면에 있어서 django가 좀 더 엄밀하다는 생각이 들었다. 애초에 django는 orm 기능을 자체적으로 지원해서 db 설계에 있어서 express 보다 시작부터 많은 도구를 갖추고 있다는 인상이 강했다. 또한 db에 직접 저장하는가, 아니면 form이라는 객체를 활용하는가, 아니면 modelform을 사용하는가 등, 데이터를 저장하는 것에 있어서도 좀 더 엄격한 기능을 요구한다고 느꼈다.

 

반면에 node.js의 express 같은 경우에는, models.py와 같은 db를 관리하는 기능이 없는 대신에 mongo db와 같은 외부 서버를 쉽게 연결할 수 있었고, db 데이터를 조작함에 있어서도 operator 연산자를 지원함으로써, query문을 쉽게 보낼 수 있었다. 

 

종합적으로 보았을 때, 데이터 관리의 측면에 있어서는 django가 낫다고 느끼지만, 개인적으로는 프론트를 react로 만들경우, 백엔드와의 연동이 까다로운 문제가 될 수 있는데, 일관성있게 javascript로 모든 코드를 작성함으로써, express와 react를 쉽게 연동할 수 있다는 점이 매력적으로 다가왔다. 뿐만 아니라, django의 경우에는 url mapping이 상당히 까다로운 반면에, node.js는 보다 자유롭게 url 설계를 할 수 있다는 점이 더 매력적으로 다가오는 것 같다.

 

결론적으로, django는 아주 큰 벽돌로 건물을 지을 수 있지만, 그 벽돌이 화강암 급의 엄밀함을 지닌 벽돌이라면, express는 django 만큼의 큰 벽돌이면서도, 시멘트 재질이라 금방 만들고, 금방 부술 수 있다는 점에서 후자가 스타트업쪽에는 더 유용한 프레임워크라고 느낀다.

'Server-DB > Express' 카테고리의 다른 글

Node.js는 프레임워크인가 | Node.js에 대한 오해  (0) 2021.05.11