Why Django?

최석우·2022년 2월 20일
0

웹 개발

목록 보기
3/3

시작하기 전에 ..

앞으로는 지금까지 개발을 하면서 사용하고 공부했던 많은 내용들을 글에 담을 예정이다. 아는 지식 안에서 최선을 다해서 작성하겠지만, 현업 개발자로 일했던 것이 아닌 오로지 혼자 공부한 내용들만 담기 때문에 전문가의 의견과 다소 차이가 있을 수 있다. 그렇기 때문에 글의 내용에 동의하기 어렵거나 틀린점 혹은 부족한 점이 있다면 댓글로 이야기해주면 좋을 것 같다.

필자는 친구들 4명과 웹, 앱 개발을 진행하고 있으며 그중 백 엔드를 담당하고 있다. 나머지 친구들은 웹과 앱 프론트엔드, 서버 인프라 및 백 엔드의 역할을 맡고있다. 백 엔드의 역할은 아주 단순하고 명료하다. 프론트엔드가 그려야할 내용과 그래프를 요청에 맞게 반환을 해주기만 하면 된다. 앞으로 작성할 장고의 글들은 "웹 요청에 응답을 반환하는 과정"에서 일어나는 다양한 일들에 대해 이야기 할 예정이다.

Django를 선택한 이유?

사실 다른 프레임워크를 사용해보지 않았기 때문에 필자의 의견은 섣부른 판단일 확률이 높다. 하지만, 지금까지 Django를 400시간 이상 사용하면서 느꼈던 것은 아래와 같았다.

Django는 신이고 나는 무적이다.

지금부터 필자가 생각하는 Django의 장점을 이야기해보겠다.

  1. Python이라는 언어의 강력함.
    Django를 이야기하기 위해서는 필연적으로 Python에 대한 이야기를 빼놓을 수 없다. 프레임워크는 각각이 돌아가는 언어에 종속적이기 때문에 언어의 숙련도와 편리함이 매우 중요하기도 하다. 필자는 프레임워크는 사용해본 적은 없었지만 언어들은 이것 저것 많이 사용해보았었다. java, c/c++, python은 고등학교, 대학교에서 어느 정도 많이 체험을 해봤었고 javascript는 어께넘어로 배워본 수준이었다. 그것들 중에서 Python은 단연 가장 쉬운 언어였다. tab으로 대괄호를 대신하기 때문에 언어의 규칙을 조금 타이트하게 지켜야한다는 점을 제외하고는 사용자에게 안성맞춤인 직관성을 제공한다고 느껴졌다. 개발을 하는 사람이 가장 많이 작성할 for, if, 함수선언, 변수선언 등 많은 점에서 적응하기만 한다면 생각하는 그대로 작성하기만 하면 돌아간다고 생각해도 될 정도로 편안한 언어라고 생각했다.

  2. Python이기 때문에 가지는 다른 장점들
    Python은 언어의 편리함 뿐만 아니라 수많은 강력한 라이브러리들을 가지고 있다. 내가 생각할 수 있는 거의 대부분의 기능은 라이브러리로 추가가 가능하며, 그 방법은 그냥 pip install 'some-library' 만 콘솔창에 입력해주면 된다. 라이브러리 크기가 조금 클 수 있지만 numpy, scipy, pytorch, tensorflow 등 빅데이터나 머신러닝 관련 라이브러리도 그냥 가져다 쓸 수 있다.

  1. Django의 기능 지원
    Python이 많은 라이브러리로 프로그램을 풍부하게 해준다면, Django는 많은 라이브러리로 프로그램의 코어를 제외한 부분에 신경을 덜 쓸 수 있도록 도와준다. Authentication, Database, Data Parsing, CORS, RESTful api 등 백엔드에서 필요로 하는 기능들을 또한 pip install만으로 설치가 가능하다.
  1. Django Database 의 편리함
    백 엔드를 개발하게 되면 정보 저장을 위해 필연적으로 database를 사용해야만 한다. 이때 db나 query에 대해서 전혀 모르더라도 장고의 클래스를 이해하기만 한다면 간단하게 모델을 작성할 수 있다. Django는 작성된 클래스와 그 클래스들을 불러오는 과정을 모두 query문으로 자동 번역하여 사용해주기 때문에 개발자는 query 작성에 머리를 싸매지 않아도 된다.

거의 모든 장점은 위의 4가지로 설명이 된다고 생각한다. 필자는 객체지향보다는 함수지향적인 프로그래밍 방식을 더 선호하는데, django는 이것에도 적합하다. 그렇다고 무엇이든 장점만 존재하지는 않는다. django를 사용하면서 느꼈던 불편한 점들은 다음과 같다.

  1. 느린 실행속도
    웹 개발에서 로딩속도는 매우매우 중요하다.

    A 1 second delay in page response can result in a 7% reduction in conversions - "How Loading Time Affects Your Bottom Line", https://neilpatel.com/blog/loading-time/

그런 면에서 Python의 계산속도는 아주 눈에 거슬리는 친구이다. 구글에만 조금 검색해봐도 10배에서 많게는 100배까지도 차이가 난다는 benchmark 실험들이 존재한다. 실제로 코딩을 해보아도 은근 체감이 되는 정도이다. 다만 Numba, Pypy, Cython등을 활용해서 단축시킬 수 있다. 그러나 다른 라이브러리를 써야만 실행시간이 짧아지는 것은 분명 불편한 점이다.

  1. 무거운 라이브러리와 고정된 사용법
    많은 라이브러리와 기능을 지원하는 만큼 django 자체의 크기가 크다. 또한 사용처가 고정된 함수들이 많아서 커스터마이징을 하기 쉽지 않다. 그렇지만 필자는 django를 api의 형식으로만 사용해서 크게 커스터마이징에 대한 불편함을 느끼지는 않았다.

  2. 비동기에 대한 불편함
    시간이 조금 오래걸리는 동작에 대해서 응답을 먼저 보내고, 남은 일을 처리하는 방법을 django에서 찾아보려고 했었으나 celery나 타 라이브러리를 가지고 오는 것이 많았다. 자체적으로 비동기를 지원하는 프레임워크에 비해서 더 불편한 점이라고 생각될 수 있다.

  3. 타입 처리
    이것 또한 Python의 단점을 그대로 가지고 온 것이다. 프로그램의 사이즈가 많이 크지 않을 때에는 머릿속으로 충분히 타입에 대한 이해를 할 수 있으나 프로그램이 길어지면 이 함수의 인자가 어떤 것인지 헷갈리기도 하고 자동완성도 되지 않아서 어쩔 수 없이 타입을 지정해주는 경우가 많아진다. 이런 상황에서는 가끔 그냥 type이 있는게 더 나을지도 모르겠다는 생각을 종종 하기도 했었다.

이런 저런 장단점들을 알아보았지만 필자는 django가 제공하는 여러 좋은 기능들이 간단하고 쉽게 구현이 가능하다는 점에서 높은 점수를 주고 싶다. 장고 덕분에 긴 시간 프로그래밍을 하면서 웹 개발 자체에 대한 고민보다는 핵심 기능의 구현에 대한 고민을 더 많이 할 수 있었다고 생각한다.

결론

지금까지 백엔드를 하면서 느꼈던 점은 "생각보다 별 것 없다?" 였다. 이미 framework에서 응답에 return하는 과정을 다 구현해놓았는데 개발자가 신경 쓸 것이 무엇이란 말인가? 결국 프로그램의 질을 좌우하는 것은 요청에 응답을 구현하는 과정이 아니라 그 내부에서 사용자에게 제공할 핵심 컨텐츠를 구현하는 알고리즘이다. 하지만 아무리 좋은 네비게이션을 만든다고 해도 악셀과 브레이크를 구분할 줄 모르는 무면허 운전자는 목적지를 찾아갈 수 없다. django를 자유자재로 다룰 수 있어야 웹 개발을 후딱 마치고 다른 것들을 신경쓸 수 있게 될 것이다. 다음 글들은 django를 다루는 과정에서 간간히 부딛힌 벽들을 위주로 이야기 해보아야 겠다.

profile
SNU computer science & engineering

0개의 댓글