{{위키데이터 속성 추적}}
{{다른 뜻|장고}}
{{소프트웨어 정보
|이름 = 장고
|로고 = Django logo.svg
|화면 = Django 2.0 default page.png
|설명 = 
|원저자 = {{기호 없는 목록|에이드리안 홀로바티|[[사이먼 윌리슨]]}}
|개발자 =[[장고 소프트웨어 재단]]
|발표일 = {{시작 날짜와 나이|df=yes|2005|7|12}}
| latest_release_version = {{multiple releases
  | branch1  = 5:
  | version1 = {{wikidata|property|preferred|references|edit|P348|P548=Q2804309}}
  | date1    = {{시작 날짜와 나이|{{wikidata|qualifier|preferred|single|P348|P548=Q2804309|P577}}}}

  | branch2  = 4.2:
  | version2 = {{wikidata|property|preferred|references|edit|P348|P548=Q15726348}}
  | date2    = {{시작 날짜와 나이|{{wikidata|qualifier|preferred|single|P348|P548=Q15726348|P577}}}}

  | branch3  = 3.2:
  | version3 = {{wikidata|property|preferred|references|edit|P348|P548=Q6736813}}
  | date3    = {{시작 날짜와 나이|{{wikidata|qualifier|preferred|single|P348|P548=Q6736813|P577}}}}
}}
|미리보기 버전 =
|미리보기 버전 출시일 = 
|운영체제 = 
|플랫폼 = 
|크기 = 8.9 MB
|프로그래밍 언어 = [[파이썬]]
|종류 = [[웹 프레임워크]]
|라이선스 = [[BSD 사용 허가서]]
|웹사이트 = {{공식 URL}}
}}

'''장고'''({{lang|en|Django}} {{IPA-all|ˈdʒæŋgoʊ}})<ref>{{웹 인용|url=https://docs.djangoproject.com/en/2.0/faq/general/#what-does-django-mean-and-how-do-you-pronounce-it|제목=FAQ: General {{!}} Django documentation {{!}} Django|언어=en|확인날짜=2017-12-28}}</ref>, '''django'''로도 표기함)는 [[파이썬]] 기반의 [[자유-오픈 소스 소프트웨어|자유-오픈 소스]] [[웹 프레임워크]]이다. [[모델-뷰-컨트롤러|모델-템플릿-뷰]](MTV) [[아키텍처 패턴]]을 따르고 있다. 미국의 [[501 (c) 단체|501(c)(3)]] 비영리 단체인 [[장고 소프트웨어 재단]]에 의해 관리되고 있다.

고도의 [[데이터베이스]] 기반 웹사이트를 작성하는 데 있어서 수고를 더는 것이 장고의 주된 목표이다. 장고는 컴포넌트의 재사용성(reusability)과 플러그인화 가능성(pluggability), 빠른 개발 등을 강조하며 [[중복배제]](DRY) 원리를 따랐다. 설정, 파일과 데이터 모델에까지 파이썬 언어가 넓게 쓰였다. 장고는 또한 관리자를 위해 동적인 [[CRUD|생성, 읽기, 갱신, 삭제]] 인터페이스를 제공한다.

장고를 사용한 것으로 널리 알려진 사이트로는 [[인스타그램]]<ref>{{뉴스 인용|url=https://engineering.instagram.com/web-service-efficiency-at-instagram-with-python-4976d078e366|제목=Web Service Efficiency at Instagram with Python – Instagram Engineering|날짜=2016-06-21|뉴스=Instagram Engineering|확인날짜=2018-01-04}}</ref>, [[빗버킷]]<ref>{{웹 인용|url=https://reinout.vanrees.org/weblog/2011/06/07/bitbucket.html|제목=Bitbucket, lessons learned - Jesper Noehr (djangocon.eu) - Reinout van Rees|확인날짜=2018-01-04}}</ref>, Disqus<ref>{{뉴스 인용|url=https://blog.disqus.com/scaling-django-to-8-billion-page-views|제목=Scaling Django to 8 Billion Page Views|성=Robenolt|이름=Matt|언어=en|확인날짜=2018-01-04}}</ref>, [[모질라 재단|모질라]]<ref>{{웹 인용|url=https://www.linkedin.com/pulse/top-10-sites-built-django-framework-vladimir-bogdanov|제목=Top 10 sites built with Django Framework|성=Bogdanov|이름=Vladimir}}</ref>가 있다.

== 역사 ==
장고는 2003년과 2004년에 로렌스 저널-월드(Lawrence Journal-World)라는 신문사의 인턴 웹 프로그래머였던 에이드리안 홀로바티(Adrian Holovaty)와 [[사이먼 윌리슨]](Simon Willison)이 파이썬을 이용해 애플리케이션을 만들기 시작하면서 처음 개발되었다. 당시 로렌스 저널-월드의 웹사이트는 PHP 기반으로 쓰여졌었는데 홀로바티와 윌리슨은 PHP는 규모가 큰 웹사이트에 적합하지 않다고 생각했고 이를 계기로 파이썬으로 웹 개발을 하기로 결심했다. 하지만 규모가 큰 웹 개발에 적합한 파이썬 도구가 없다는 것을 깨닫고 그들은 장고를 개발하게 되었다. 장고라는 이름은 홀로바티가 좋아하던 [[집시 재즈]] 기타리스트인 [[장고 라인하르트]]에서 따온 것이다.<ref>{{웹 인용|url=https://docs.djangoproject.com/en/2.0/faq/general/#what-does-django-mean-and-how-do-you-pronounce-it|제목=Django FAQ|성=|이름=|날짜=|웹사이트=|출판사=||확인날짜=2017-12-27}}</ref>

사실 장고는 오직 로렌스 웹사이트를 구동하기 위함이었으나 홀로바티와 윌리슨이 로렌스의 소유자인 더 월드 컴퍼니(The World Company)를 설득하여 오픈 소스로 2005년 7월에 [[BSD 사용 허가서]]로 공개하게 되었다.<ref>{{웹 인용|url=https://www.quora.com/What-is-the-history-of-the-Django-web-framework-Why-has-it-been-described-as-developed-in-a-newsroom|제목=What is the history of the Django web framework? Why has it been described as 'developed in a newsroom'? - Quora|언어=en|확인날짜=2018-01-04}}</ref>

2008년 6월, 장고 소프트웨어 재단이 공식적으로 장고 프로젝트를 관리하게 된다는 공지가 장고 웹사이트에 올라왔다.

2017년 12월에 장고 2.0 버전이 출시되었다.<ref>{{웹 인용|url=https://www.djangoproject.com/weblog/2015/jun/25/roadmap/|제목=Django's Roadmap {{!}} Weblog {{!}} Django|언어=en|확인날짜=2018-01-04}}</ref>

== 특징 ==
장고는 웹 개발에서 번거로운 요소들을 새로 개발할 필요 없이 내장된 기능만을 이용해 빠른 개발을 할 수 있다는 장점이 있다.

=== 구성 ===
장고는 파이썬으로 코딩한 모델을 [[관계형 데이터베이스 관리 시스템|관계형 데이터베이스]]로 구축해주는 모델('''M'''odel), HTTP 요청을 처리하는 웹 템플릿 시스템인 뷰('''V'''iew), URL의 라우팅을 처리하는 URL 컨트롤러 ('''C'''ontroller) 로 구성된 [[모델-뷰-컨트롤러|MVC 디자인 패턴]]을 따른다.

하지만 전통적인 MVC 디자인 패턴에서 이야기하는 컨트롤러의 기능을 프레임워크를 자체에서 하기 때문에 모델('''M'''odel), 템플릿('''T'''emplate), 뷰('''V'''iew)로 분류해 MTV 프레임워크라고 보기도 한다.<ref>{{뉴스 인용|url=https://djangobook.com/model-view-controller-design-pattern/|제목=The Model-View-Controller Design Pattern - Python Django Tutorials|뉴스=The Django Book|언어=en-US|확인날짜=2018-01-04|archive-date=2018-01-05|archive-url=https://web.archive.org/web/20180105011449/https://djangobook.com/model-view-controller-design-pattern/|url-status=}}</ref><ref>{{웹 인용|url=https://docs.djangoproject.com/en/2.0/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names|제목=FAQ: General {{!}} Django documentation {{!}} Django|언어=en|확인날짜=2018-01-04}}</ref>
[[파일:Django useradmin.png|대체글=장고의 관리자 페이지 예시|섬네일|장고의 관리자 페이지 예시]]

==== 모델 ====
모델은 데이터에 관한 정보를 담는다. 데이터에 대한 접근, 검증, 작동과 데이터 사이의 관계를 정의하는데, 일반적으로 각각의 모델은 데이터베이스에서 테이블에 해당한다.

장고에서는 모델을 정의할 때 필드의 종류를 지정해줘야 하는데, 이것이 데이터베이스에게 컬럼 타입을 알려주고 HTML 폼으로 표시 될 때의 입력 타입도 내포하는 역할을 한다. 또한 장고의 폼 자동 생성 API를 이용할 때 데이터 검증에 쓰이기도 한다.<ref>{{웹 인용|url=https://docs.djangoproject.com/en/2.0/topics/db/models/|제목=Models {{!}} Django documentation {{!}} Django|언어=en|확인날짜=2018-01-04}}</ref>

==== 뷰 ====
어떤 데이터가 표시될 것인지를 정의한다. 뷰는 HTTP 응답(response)를 반환해야 하며 응답의 종류는 웹 페이지, 리디렉션, 문서 등의 다양한 형태가 가능하다.

장고에는 자주 사용되는 형태의 뷰를 패턴화하여 추상화 해둔 재사용 가능한 뷰들을 내장해 놓았는데, 이들을 제네릭 뷰(generic view) 라고 하며 원하는 제네릭 뷰를 상속한 클래스 뷰를 생성하여 사용할 수 있다.<ref>{{웹 인용|url=https://jwkcp.github.io/2016/11/08/python-jango-why-generic-views/|제목=파이썬 장고(Django), 클래스형 뷰를 사용하는 이유 · Tonic|언어=en-us|확인날짜=2018-01-04}}</ref>

==== 템플릿 ====
데이터가 어떻게 표시되는 지를 정의한다. 템플릿은 사용자에게 실제로 보여지는 웹 페이지나 문서를 다룬다.

흔히 HTML 에 기반해서 템플릿을 만들며, HTML 에 동적인 요소를 추가하기 위해 파이썬의 일부 기능을 쓰게 도와주는 장고 템플릿 태그가 존재한다.<ref>{{웹 인용|url=https://tutorial.djangogirls.org/en/django_templates/|제목=Django templates · Django Girls Tutorial|성=DjangoGirls|언어=en|확인날짜=2018-01-04}}</ref>

=== 내장 애플리케이션 ===
장고에는 아래와 같은 웹 개발에서 자주 쓰이는 애플리케이션이 'contrib' 패키지에 내장되어 있다.
* 확장가능한 사용자 인증 시스템
* 동적 관리자 인터페이스
* RSS 또는 [[아톰 (문서 편집기)|아톰]]을 위한 피드 생성
* 사이트맵 생성
* [[사이트 간 요청 위조]](CSRF), [[사이트 간 스크립팅]](XSS), [[SQL 삽입|SQL 인젝션]]과 같은 해킹 시도에 대한 보안 대책<ref>{{웹 인용|url=https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/web_application_security|제목=Django web application security|언어=en-US|확인날짜=2018-01-04}}</ref>

=== 외부 패키지 ===
내장된 요소들 중에 원하는 것이 없으면 장고를 위해 개발된 외부 패키지를 이용할 수도 있다. 장고에서 사용할 수 있는 패키지들을 모아놓은 웹사이트 Django Packages의 경우에는 3600개가 넘는 패키지가 등록되어있는 것을 알 수 있으며, 커뮤니티 멤버들의 꾸준한 기여 덕분에 많은 양질의 패키지들이 개발되고 있다. 이는 파이썬의 "건전지 포함"(Batteries Included)의 정신에 입각한 것으로 볼 수도 있다.<ref>{{뉴스 인용|url=http://blog.teamtreehouse.com/choose-django|제목=Five Reasons to Pick Django as Your Framework|날짜=2015-07-27|뉴스=Treehouse Blog|언어=en-US|확인날짜=2018-01-04}}</ref>

== 서비스 배포 ==
장고는 [[아파치 HTTP 서버]]에 [[mod wsgi]] 또는 [[mod python]] 모듈을 설치하여 서비스할 수 있다. 또한 장고는 [[FastCGI]] 모드로 구동할 수 있기 때문에 FastCGI를 지원하는 서버와 연동하여 서비스할 수 있다.<ref>[https://docs.djangoproject.com/en/1.3/howto/deployment/modwsgi/ 아파치 웹서버와 mod_wsgi를 사용한 장고 사용법] {{웨이백|url=https://docs.djangoproject.com/en/1.3/howto/deployment/modwsgi/ |date=20130308055856 }} {{언어링크|en}}</ref>

장고는 공식적으로 아래의 데이터베이스를 지원한다.

* [[PostgreSQL]]
* [[MySQL]]
* [[SQLite]]
* [[오라클 데이터베이스|Oracle]]

[[마이크로소프트 SQL 서버]]는 [http://code.google.com/p/django-mssql/ django-mssql]를 설치하여 사용할 수 있으나 [[마이크로소프트]] [[운영 체제]] 내에서만 작동한다.

== 같이 보기 ==
* [[플라스크 (웹 프레임워크)]]
* [[Pylons]]
* [[Web2py]]
* [[토네이도 (웹 서버)]]
* [[루비 온 레일즈]]
== 각주 ==
{{각주|1}}

== 외부 링크 ==
{{위키공용분류}}
* {{공식 웹사이트}}
* [http://groups.google.com/group/django-ko?hl=ko 장고 한국어 사용자 구글 그룹스]
* [https://www.facebook.com/groups/django/ 장고 한국어 사용자 페이스북 그룹]
* [https://djangopackages.org/ Django Packages]

{{고속 개발 도구}}
{{웹 프레임워크}}

{{전거 통제}}

[[분류:파이썬 웹 프레임워크]]
[[분류:파이썬으로 작성된 자유 소프트웨어]]
[[분류:BSD 라이선스 소프트웨어]]