Django

내위키
Dennis (토론 | 기여)님의 2021년 12월 18일 (토) 01:51 판

파이썬 기반의 웹 프레임워크. 장고재단(Django Foundation)이 관리하고 있다. 공식 웹사이트는 여기로. 파이썬으로 웹 기반 서비스를 만들 때 Flask와 함께 가장 많이 쓰이고 있다. REST API 서비스를 개발할 때에는 FastAPI가 이게 파이썬 기반 맞나 할 정도로 빠른 속도를 무기로 뜨고 있으나 아직은 Django REST 프레임워크가 많이 쓰이는 편이다.

로렌스 저널-월드라는 미국 캔자스 로렌스 지역 일간신문에서 저널리스트 겸 웹 프로그래머로 근무하던 에이드리언 홀로바티(Adrian Holovaty)와 인턴으로 근무하던 웹 프로그래머인 사이먼 윌슨(Simon Willison)이 2003년 가을부터 개발에 착수했다. 윌슨의 인턴십이 끝나기 직전에 제이콥 캐플런-모스(Jacob Kaplan-Moss)가 회사에 고용되어 개발에 합류했고, 2005년에 BSD 라이선스로 첫 선을 보였다. 원래는 로렌스 저널-월드의 CMS 시스템을 위해서 개발을 시작한 것이지만 점점 기능이 확대되어 풀 스택 웹 프레임워크로 성장했다. 이름은 에이드리언 홀로바티가 좋아하던 집시 재즈 기타리스인 장고 라인하르트의 이름에서 따 온 것인데, 홀로바티는 기타 연주에도 능했고 자신이 직접 작곡한 음악으로 음반까지 낸 바 있다. 유튜브에도 그의 기타 연주 채널이 있고 구독자가 3만 명이 넘는다.

가장 큰 특징이라면 'batteries included'[1]라는 말로 상징되는, 풀 스택 프레임워크라는 점이다. 즉 외부 모듈 없이도 Django가 제공하는 기능만으로도 일반적인 웹 서비스를 제공하는 데 문제가 없다는 뜻이다. 이는 경쟁자로 가장 많이 손꼽히는 Flask와는 대척점에 있다고 할 수 있는데, Flask는 마이크로 웹 프레임워크를 추구하고 있어서 기본적인 기능만 내장하고 필요한 다른 기능들은 외부 모듈을 붙여서 쓰도록 하는 반면, 풀 스택 프레임워크인 Django는 MVC 패턴을 기반으로 자체 템플릿 엔진, ORM, 심지어 고수준의 관리자 페이지까지도 몽땅 자체 지원한다.[2] 따라서 웬만한 웹사이트는 정말로 외부 모듈 필요 없이 Django만으로 관리자 기능까지 구축할 수 있다. 파이썬 ORM 중에서는 가장 완성도가 높아서 이것만 따로 떼어서 쓸 정도이기도 하다.[3] 다만 웹 서비스의 종류는 무척 다양하기 때문에 이에 따라 외부 모듈이 필요한 경우는 있다. 가장 많이 쓰는 외부 모듈 중 하나라면 Django REST 프레임워크.

단점이라면 아무래도 덩치가 크다는 것. 파이썬 자체가 인터프리트 언어로 속도 문제가 자주 시빗거리가 되는지라 여기에 온갖 기능을 다 때려넣어 덩치까지 무거운 Django의 성능은 종종 논란거라가 된다. 하지만 엔터프라이즈급 웹 서비스 중에도 Django로 잘만 굴러가는 사이트가 부지기수다. 가장 규모가 큰 서비스라면 인스타그램. 단, ORM을 비롯한 여러 부분을 마개조한 것으로 알려져 있다.[4] 또한 일반 웹사이트에 필요한 모든 부분을 Django가 제공한다는 것은 그만큼 개발자는 선택의 폭이 좁다는 뜻이 된다. Django가 제공하는 것보다 더 나은 대안이 있어도 그걸 갖다 쓰기가 쉽지 않다. 반면 Flask는 자체 기능은 정말 기본의 기본 수준이고, 개발자가 자기가 선호하는 외부 모듈을 이것저것 붙여서 구성할 수 있다.

속도를 높이기 위한 몇 가지 대안들이 있다. 속도 문제로 가장 많이 까이는 걸로는 템플릿 엔진이 있는데, 장고에서 만든 것이니 당연히 궁합은 가장 좋지만 병목현상을 일으키는 주범으로 지목되어 왔다. Jinja2 같은 템플릿 엔진을 고려해 보라고 심지어 Django 공식문서에서도 얘기할 정도.[5] PyPy를 사용하는 것도 방법이지만 웹 프레임워크에서는 별 차이가 없다는 견해도 있다. 예를 들어 템플릿 엔진은 PyPy 쪽이 더 빠르지만 데이터베이스 드라이버는 표준 구현체인 CPython이 더 낫다는 견해다. JIT 컴파일 방식을 사용하는 PyPy가 반복적인 코드 실행에는 더 유리하지만 C 언어로 만들어 붙인 모듈은 CPython 쪽과 더 잘 맞기 때문인 것으로 보인다. 또한 C 언어로 만든 일부 모듈은 PyPy에서 실행이 잘 안 되는 문제도 있다.


각주

  1. 말 그대로 해석하면 '배터리 탑재'인데, 원래는 파이썬의 모토로, 웬만한 일은 다 할 수 있을 정도로 광범위한 모듈을 제공한다는 뜻으로 풀이한다. 즉 뭔가를 할 수 있는 도구만 주는 게 아니라 실제 그 도구를 써먹는 데 필요한 파워를 외부에서 끌어올 필요 없이 자체 내장하고 있다는 뜻으로 볼 수 있을 듯.
  2. 필요에 따라 맞춤 설정할 수 있는 여지도 많기 때문에 서비스에 맞는 관리자 페이지를 구축할 수 있다.
  3. Flask에는 SQL-Alchemy 같은 ORM 모듈을 붙여 쓰기도 하지만 Django ORM이 워낙 좋고 많이들 쓰다 보니 이걸 붙여서 쓰기도 할 정도다.
  4. 하긴, Django만큼이나 속도 문제로 말이 많은 Ruby on Rails로 서비스하는 웹사이트가 GitHub이고, 트위터도 한동안 이걸 쓰다가 나중에 Java로 갈아탔다.
  5. "Performance and optimization", Django 4.0 Documentation.