장고 (웹 프레임워크)

장고(Django IPA: [ˈdʒæŋgoʊ]), django로도 표기함)는 파이썬 기반의 자유-오픈 소스 웹 프레임워크이다. 모델-템플릿-뷰(MTV) 아키텍처 패턴을 따르고 있다. 미국의 501(c)(3) 비영리 단체인 장고 소프트웨어 재단에 의해 관리되고 있다. 고도의 데이터베이스 기반 웹사이트를 작성하는 데 있어서 수고를 더는 것이 장고의 주된 목표이다. 장고는 컴포넌트의 재사용성(reusability)과 플러그인화 가능성(pluggability), 빠른 개발 등을 강조하며 중복배제(DRY) 원리를 따랐다. 설정, 파일과 데이터 모델에까지 파이썬 언어가 넓게 쓰였다. 장고는 또한 관리자를 위해 동적인 생성, 읽기, 갱신, 삭제 인터페이스를 제공한다. 장고를 사용한 것으로 널리 알려진 사이트로는 인스타그램, 빗버킷, Disqus, 모질라가 있다. 장고는 2003년과 2004년에 로렌스 저널-월드(Lawrence Journal-World)라는 신문사의 인턴 웹 프로그래머였던 에이드리안 홀로바티(Adrian Holovaty)와 사이먼 윌리슨(Simon Willison)이 파이썬을 이용해 애플리케이션을 만들기 시작하면서 처음 개발되었다. 당시 로렌스 저널-월드의 웹사이트는 PHP 기반으로 쓰여졌었는데 홀로바티와 윌리슨은 PHP는 규모가 큰 웹사이트에 적합하지 않다고 생각했고 이를 계기로 파이썬으로 웹 개발을 하기로 결심했다. 하지만 규모가 큰 웹 개발에 적합한 파이썬 도구가 없다는 것을 깨닫고 그들은 장고를 개발하게 되었다. 장고라는 이름은 홀로바티가 좋아하던 집시 재즈 기타리스트인 장고 라인하르트에서 따온 것이다. 사실 장고는 오직 로렌스 웹사이트를 구동하기 위함이었으나 홀로바티와 윌리슨이 로렌스의 소유자인 더 월드 컴퍼니(The World Company)를 설득하여 오픈 소스로 2005년 7월에 BSD 사용 허가서로 공개하게 되었다. 2008년 6월, 장고 소프트웨어 재단이 공식적으로 장고 프로젝트를 관리하게 된다는 공지가 장고 웹사이트에 올라왔다. 2017년 12월에 장고 2.0 버전이 출시되었다. 장고는 웹 개발에서 번거로운 요소들을 새로 개발할 필요 없이 내장된 기능만을 이용해 빠른 개발을 할 수 있다는 장점이 있다. 장고는 파이썬으로 코딩한 모델을 관계형 데이터베이스로 구축해주는 모델(Model), HTTP 요청을 처리하는 웹 템플릿 시스템인 뷰(View), URL의 라우팅을 처리하는 URL 컨트롤러 (Controller) 로 구성된 MVC 디자인 패턴을 따른다. 하지만 전통적인 MVC 디자인 패턴에서 이야기하는 컨트롤러의 기능을 프레임워크를 자체에서 하기 때문에 모델(Model), 템플릿(Template), 뷰(View)로 분류해 MTV 프레임워크라고 보기도 한다. 모델은 데이터에 관한 정보를 담는다. 데이터에 대한 접근, 검증, 작동과 데이터 사이의 관계를 정의하는데, 일반적으로 각각의 모델은 데이터베이스에서 테이블에 해당한다. 장고에서는 모델을 정의할 때 필드의 종류를 지정해줘야 하는데, 이것이 데이터베이스에게 컬럼 타입을 알려주고 HTML 폼으로 표시 될 때의 입력 타입도 내포하는 역할을 한다. 또한 장고의 폼 자동 생성 API를 이용할 때 데이터 검증에 쓰이기도 한다. 어떤 데이터가 표시될 것인지를 정의한다. 뷰는 HTTP 응답(response)를 반환해야 하며 응답의 종류는 웹 페이지, 리디렉션, 문서 등의 다양한 형태가 가능하다. 장고에는 자주 사용되는 형태의 뷰를 패턴화하여 추상화 해둔 재사용 가능한 뷰들을 내장해 놓았는데, 이들을 제네릭 뷰(generic view) 라고 하며 원하는 제네릭 뷰를 상속한 클래스 뷰를 생성하여 사용할 수 있다. 데이터가 어떻게 표시되는 지를 정의한다. 템플릿은 사용자에게 실제로 보여지는 웹 페이지나 문서를 다룬다. 흔히 HTML 에 기반해서 템플릿을 만들며, HTML 에 동적인 요소를 추가하기 위해 파이썬의 일부 기능을 쓰게 도와주는 장고 템플릿 태그가 존재한다. 장고에는 아래와 같은 웹 개발에서 자주 쓰이는 애플리케이션이 'contrib' 패키지에 내장되어 있다. 확장가능한 사용자 인증 시스템 동적 관리자 인터페이스 RSS 또는 아톰을 위한 피드 생성 사이트맵 생성 사이트 간 요청 위조(CSRF), 사이트 간 스크립팅(XSS), SQL 인젝션과 같은 해킹 시도에 대한 보안 대책 내장된 요소들 중에 원하는 것이 없으면 장고를 위해 개발된 외부 패키지를 이용할 수도 있다. 장고에서 사용할 수 있는 패키지들을 모아놓은 웹사이트 Django Packages의 경우에는 3600개가 넘는 패키지가 등록되어있는 것을 알 수 있으며, 커뮤니티 멤버들의 꾸준한 기여 덕분에 많은 양질의 패키지들이 개발되고 있다. 이는 파이썬의 "건전지 포함"(Batteries Included)의 정신에 입각한 것으로 볼 수도 있다. 장고는 아파치 HTTP 서버에 mod wsgi 또는 mod python 모듈을 설치하여 서비스할 수 있다. 또한 장고는 FastCGI 모드로 구동할 수 있기 때문에 FastCGI를 지원하는 서버와 연동하여 서비스할 수 있다. 장고는 공식적으로 아래의 데이터베이스를 지원한다. PostgreSQL MySQL SQLite Oracle 마이크로소프트 SQL 서버는 django-mssql를 설치하여 사용할 수 있으나 마이크로소프트 운영 체제 내에서만 작동한다. 플라스크 (웹 프레임워크) Pylons Web2py 토네이도 (웹 서버) 루비 온 레일즈 “Release 5.1.1”. 2024년 9월 3일. 2024년 9월 21일에 확인함.  “FAQ: General | Django documentation | Django” (영어). 2017년 12월 28일에 확인함.  “Web Service Efficiency at Instagram with Python – Instagram Engineering”. 《Instagram Engineering》. 2016년 6월 21일. 2018년 1월 4일에 확인함.  “Bitbucket, lessons learned - Jesper Noehr (djangocon.eu) - Reinout van Rees”. 2018년 1월 4일에 확인함.  Robenolt, Matt. “Scaling Django to 8 Billion Page Views” (영어). 2018년 1월 4일에 확인함.  Bogdanov, Vladimir. “Top 10 sites built with Django Framework”.  “Django FAQ”. 2017년 12월 27일에 확인함.  “What is the history of the Django web framework? Why has it been described as 'developed in a newsroom'? - Quora” (영어). 2018년 1월 4일에 확인함.  “Django's Roadmap | Weblog | Django” (영어). 2018년 1월 4일에 확인함.  “The Model-View-Controller Design Pattern - Python Django Tutorials”. 《The Django Book》 (미국 영어). 2018년 1월 5일에 원본 문서에서 보존된 문서. 2018년 1월 4일에 확인함.  “FAQ: General | Django documentation | Django” (영어). 2018년 1월 4일에 확인함.  “Models | Django documentation | Django” (영어). 2018년 1월 4일에 확인함.  “파이썬 장고(Django), 클래스형 뷰를 사용하는 이유 · Tonic” (미국 영어). 2018년 1월 4일에 확인함.  DjangoGirls. “Django templates · Django Girls Tutorial” (영어). 2018년 1월 4일에 확인함.  “Django web application security” (미국 영어). 2018년 1월 4일에 확인함.  “Five Reasons to Pick Django as Your Framework”. 《Treehouse Blog》 (미국 영어). 2015년 7월 27일. 2018년 1월 4일에 확인함.  아파치 웹서버와 mod_wsgi를 사용한 장고 사용법 Archived 2013년 3월 8일 - 웨이백 머신 (영어) 위키미디어 공용에 관련된 미디어 분류가 있습니다. 장고 장고 - 공식 웹사이트 장고 한국어 사용자 구글 그룹스 장고 한국어 사용자 페이스북 그룹 Django Packages