Django

"The web framework for perfectionists with deadlines."

— 출시 기한에 사정없이 쫓기는 완벽주의자 개발자들을 구원하겠다는 장고의 유구하고 도도한 공식 슬로건.

처음에는 기본 제공해 주는 강력한 내장 기능(Admin, Auth)에 감격하여 눈물을 흘리지만, 프로젝트가 커져 일부분을 튜닝하려고 장고 소스코드를 뜯는 순간 장고가 걸어둔 단단한 집안 룰에 가로막혀 좌절하는 고집불통 시어머니. 장고가 시키는 방향으로만 짜면 정시 퇴근이지만, 다른 프레임워크 스타일을 고집하는 순간 밤새도록 스택오버플로우를 구경하게 된다

1. 개요

DjangoPython 언어로 작성된 오픈소스 웹 애플리케이션 프레임워크다. 2003년 캔자스주의 한 신문사 뉴스 웹사이트를 관리하던 개발자들이 '매번 기사를 올리고 관리하는 회원가입과 어드민 페이지를 새로 짜기 귀찮아서' 표준화해 만든 것이 그 출발이다.

이 프레임워크의 최대 정체성은 'Batteries Included (모든 전지 내장)' 철학이다. 다른 경량 프레임워크(Flask, FastAPI)들이 라우팅 기능만 던져주고 데이터베이스 연동, 인증, 어드민 등은 개발자가 오픈소스를 알아서 쇼핑해 조립하게 만드는 방임주의를 채택할 때, 장고는 그냥 처음부터 완벽한 패키지를 한 보따리 안겨주어 개발자가 딴생각(?)을 못 하도록 철저하게 보호한다.(...)

2. 모든 전지 내장 철학의 완벽함과 그늘

2.1. 버튼 하나로 솟아오르는 신의 도구: 장고 어드민 (Django Admin)

장고 개발자들의 최대 무기이자 최고의 자랑거리다. 모델(Model) 클래스에 데이터베이스 구조를 단 몇 줄 정의하고 어드민에 등록만 하면, 데이터를 조회, 수정, 검색, 필터링할 수 있는 압도적 퀄리티의 관리자 웹 페이지가 즉석에서 렌더링된다. 이 엄청난 도구 덕분에 개발자는 관리자 페이지를 깎기 위해 아까운 프론트엔드 공수를 소모하지 않아도 되므로, 스타트업이나 초기 창업 기업의 개발 기한을 기적처럼 단축시켜 준다.1

2.2. 강력하고 안전한 내장 ORM

SQL 쿼리를 날 것으로 작성하지 않고 파이썬 객체 메서드로 데이터베이스를 다룰 수 있는 장고 ORM 역시 극강의 편의성을 선사한다. 특히 데이터베이스 스키마 변경 이력을 정밀하게 추적하여 SQL 스크립트로 번역해 실행해 주는 마이그레이션(makemigrations, migrate) 도구는 버그 없는 깔끔한 DB 반영을 완벽하게 보장해 준다.

2.3. 장고의 고집에 가로막힌 자유도

그러나 장고가 깔아놓은 레일 위를 벗어나면 지옥문이 열린다. 장고 고유의 MTV 패턴과 완고한 미들웨어, 그리고 기본 설정 방식이 매우 견고하기 때문에, 데이터베이스 설정을 특이하게 가져가거나 최신 비동기 소켓 통신을 우아하게 처리하려 하면 설정 코드의 사정없는 꼬임과 싸워야 한다. 이 때문에 최근 프론트엔드가 React 중심의 SPA로 재편된 웹 환경에서는 무거운 장고 템플릿 엔진 대신 데이터 전송 기능만 전문으로 빼내는 DRF(Django REST Framework) 패키지를 강제 조립해 구동하는 기형적인 아키텍처가 반필수 교리가 되었다.2

3. Django 관련 유구한 인터넷 드립

3.1. N+1 쿼리 폭탄과 꿀벙어리 ORM

장고 ORM은 SQL의 귀찮은 조인(Join) 문법을 추상화해 주어 편리하다. 하지만 연관된 데이터를 호출할 때 내부적으로 루프를 돌며 루프 개수만큼 데이터베이스 쿼리를 끊임없이 호출하는 N+1 문제의 단골 주범이다. 멋모르고 ORM 코드를 편하게 짰다가, 단 한 명의 유저가 로그인했는데 데이터베이스 서버에 수천 번의 쿼리 요청이 무자비하게 꽂혀 서버가 내려앉는 호러 쇼를 감상할 수 있다. 이 쿼리 폭탄을 예방하기 위해 select_relatedprefetch_related라는 어색한 최적화 메서드를 공부하는 것은 장고 백엔드 주니어들의 통과의례다.

3.2. 장고걸스 (Django Girls)의 참교육

여성 및 비전공자들의 개발 입문을 돕는 전 세계적인 자원봉사 튜토리얼 단체명이다. 이곳에서 배포하는 장고 튜토리얼 가이드북이 워낙 명작이라 수많은 남성 전공생들도 몰래 이 문서를 보고 첫 웹 앱 개발을 배운다는 훈훈한 비하인드가 도사린다. 커뮤니티에서는 '대학 4년 등록금 갈아 넣은 전공 수업보다 장고걸스 하루 코스가 훨씬 직관적이고 훌륭하다'라며 전공 교수님들을 돌려 까는 조롱 밈으로 쓰이기도 한다.(...)

4. 여담

  • 쿠엔틴 타란티노 영화와의 우연: 오픈소스 프레임워크 'Django'의 정식 발음은 '쟁고'에 가깝지만, 국내에서는 영화 '장고: 분노의 추적자' 덕분에 완벽한 '장고'로 명칭이 대동단결되었다. 실제로 프레임워크 명칭의 원래 유래는 전설적인 재즈 기타리스트인 장고 라인하르트(Django Reinhardt)의 이름에서 영감을 받았다.
  • 엄청난 보안 기능의 파수꾼: 장고는 웹 해킹의 삼대장인 CSRF, XSS, SQL Injection 방어를 프레임워크가 아예 기본 사양으로 탑재해 두었다. 개발자가 보안 공부를 전혀 안 했더라도 장고를 쓰면 기본적인 해커들의 짤짤이 공격은 알아서 차단되는 축복을 선사한다.
  • 인스타그램을 지탱하는 버팀목: 전 세계 수억 명이 사용하는 소셜 네트워크 서비스인 인스타그램(Instagram)은 탄생 초기부터 지금까지 백엔드 핵심 엔진으로 장고 프레임워크를 수만 대의 서버에 올려 구동하고 있다. 장고의 성능적 한계를 극복하기 위해 파이썬 코드를 기계어로 컴파일하는 온갖 기괴한 튜닝 기술을 직접 고안해 적용하는 장인 정신을 보여주고 있다.3

5. 관련 문서

각주

  1. 이 때문에 토이 프로젝트나 해커톤에서 장고를 들고나오는 팀은 어드민 조작 속도 면에서 타 팀의 부러움을 한 몸에 받곤 한다.

  2. 이 무거움을 피하기 위해 최근 파이썬 진영 주니어들은 장고 대신 초경량 비동기 프레임워크인 FastAPI로 대거 망명하는 이주 현상이 벌어지고 있다.

  3. 인스타그램 개발팀은 자사의 장고 튜닝 노하우와 마이그레이션 자동화 스크립트를 오픈소스로 대거 환원하며 장고 재단의 최대 후원사 역할을 톡톡히 하고 있다.(...)