Django 소스 코드 저장소¶
Django 애플리케이션을 실제 프로덕션 환경에 배포할 때는 거의 항상 `공식 패키지 릴리스로 제공되는 Django`_를 사용하는 것이 좋습니다.
그러나 다가오는 릴리스의 개발 중인 코드를 사용해 보거나 Django 개발에 기여하고 싶다면, Django 소스 코드 저장소를 복제하여 사용해야 합니다.
이 문서는 코드 저장소의 구성 방식과 그 안에서 내용을 찾고 작업하는 방법을 다룹니다.
전반적인 개요¶
Django 소스 코드 저장소는 코드 변경 사항을 추적하기 위해 `Git`_을 사용합니다. 따라서 컴퓨터에 Git 클라이언트(``git``이라는 프로그램)를 설치하고, Git의 기본적인 사용 방법에 익숙해져야 합니다.
Git 웹사이트에서는 다양한 운영체제용 다운로드 파일을 제공합니다. 또한 방대한 양의 `documentation`_확인할 수 있습니다.
Django Git 저장소는 `github.com/django/django <https://github.com/django/django>`_에서 온라인으로 확인할 수 있습니다. 이 저장소에는 모든 Django 릴리스의 전체 소스 코드가 포함되어 있으며, 온라인으로 둘러볼 수 있습니다.
Git 저장소에는 다음과 같은 여러 `branches`_가 포함되어 있습니다.
main브랜치에는 현재 개발 중인 주요 코드가 포함되어 있으며, 이는 Django의 다음 패키지 릴리스가 됩니다. 이 브랜치에서 대부분의 개발 활동이 이루어집니다.``stable/A.B.x``는 릴리스 준비 작업이 이루어지는 브랜치입니다. 기능 버전의 초기 릴리스 이후 필요에 따라 수행되는 버그 수정 및 보안 릴리스에도 사용됩니다.
Git 저장소에는 `tags`_도 포함되어 있습니다. 이는 Django 1.0 버전부터 패키지된 릴리스가 생성된 정확한 리비전을 나타냅니다.
일부 태그는 archived work<archived-feature-development-work>`를 위해 ``archive/` 접두사를 가진 형태로 존재합니다.
Djangoproject.com 웹사이트의 소스 코드는 `github.com/django/djangoproject.com <https://github.com/django/djangoproject.com>`_에서 확인할 수 있습니다.
메인 브랜치¶
Django의 다음 릴리스에 포함될 개발 중인 코드를 사용해 보거나, 버그 수정이나 새로운 기능 개발을 통해 Django에 기여하고 싶다면 메인 브랜치에서 코드를 가져오는 것이 좋습니다.
참고
2021년 3월 이전에는 메인 브랜치의 이름이 ``master``였습니다.
이 작업을 수행하면 Django *전체*를 가져올 수 있습니다. Python 코드가 포함된 최상위 django 모듈뿐만 아니라 Django의 문서, 테스트 스위트, 패키징 스크립트 및 기타 파일도 함께 포함됩니다. Django의 코드는 복제본 내의 ``django``라는 디렉토리에 위치합니다.
자신의 애플리케이션에서 개발 중인 코드를 사용해 보려면 복제본이 포함된 디렉토리를 Python의 import 경로에 추가하세요. 그러면 Django를 찾는 import 문은 복제본 내의 django 모듈을 사용하게 됩니다.
Django의 코드를 작업하려는 경우(예를 들어 버그를 수정하거나 새로운 기능을 개발하는 경우), 여기까지만 읽고 :doc:`the documentation for contributing to Django </internals/contributing/index>`로 넘어가시면 됩니다. 이 문서에서는 선호하는 코딩 스타일과 패치를 생성하고 제출하는 방법 등을 다룹니다.
안정 브랜치¶
Django는 릴리스 준비를 위해 브랜치를 사용합니다. 각 주요 릴리스 시리즈에는 각각의 안정 브랜치가 있습니다.
이러한 브랜치는 저장소에서 ``stable/A.B.x``브랜치로 확인할 수 있으며, 첫 번째 alpha 태그가 지정된 직후 생성됩니다.
예를 들어 Django 1.5 alpha 1 태그가 지정된 직후 stable/1.5.x 브랜치가 생성되었으며, 이후 최종 1.5 릴리스를 위한 코드 준비 작업은 모두 이 브랜치에서 이루어졌습니다.
이러한 브랜치는 :ref:`supported-versions-policy`에 설명된 대로 버그 수정 및 보안 지원도 제공합니다.
예를 들어 Django 1.5 릴리스 이후 stable/1.5.x 브랜치에는 보안 및 치명적인 안정성 버그에 대한 수정만 반영되며, 이는 이후 Django 1.5.1 등의 버전으로 릴리스됩니다. 또한 stable/1.4.x 브랜치에는 보안 및 데이터 손실 관련 수정만 반영되고, stable/1.3.x 브랜치는 더 이상 업데이트되지 않습니다.
과거 정보
stable/A.B.x 브랜치를 처리하는 이 정책은 Django 1.5 릴리스 주기부터 채택되었습니다.
이전에는 이러한 브랜치가 릴리스 직후에야 생성되었고, 안정화 작업은 주요 저장소 브랜치에서 이루어졌습니다. 따라서 Django의 다음 릴리스를 위한 새로운 기능 개발 작업은 최종 릴리스가 이루어질 때까지 커밋할 수 없었습니다.
예를 들어 Django 1.3 릴리스 직후 stable/1.3.x 브랜치가 생성되었습니다. 해당 릴리스에 대한 공식 지원은 종료되었으므로 더 이상 Django 프로젝트에서 직접 유지보수를 받지 않습니다. 그러나 이 브랜치와 이와 유사한 이름의 다른 브랜치들은 계속 존재하며, 관심 있는 커뮤니티 구성원들이 이전 Django 릴리스를 위한 비공식 지원을 제공하는 데 가끔 활용되고 있습니다.
태그¶
각 Django 릴리스는 릴리스 담당자가 태그를 지정하고 서명합니다.
태그는 GitHub의 tags 페이지에서 확인할 수 있습니다.
보관된 기능 개발 작업¶
과거 정보
Django가 2012년에 Git으로 전환된 이후, 누구나 저장소를 복제하고 자신의 브랜치를 만들 수 있게 되었으며, 이에 따라 소스 코드 저장소에서 공식 브랜치의 필요성이 줄어들었습니다.
다음 섹션은 저장소의 이력을 살펴볼 때, 예를 들어 일부 기능이 어떻게 설계되었는지 이해하려는 경우에 유용합니다.
기능 개발 브랜치는 그 특성상 일시적으로 유지되는 경우가 많습니다. 일부는 성공적으로 개발되어 Django의 주요 브랜치에 병합되어 공식 릴리스의 일부가 되지만, 그렇지 않은 경우도 있습니다. 어느 쪽이든 시간이 지나면 더 이상 어떤 개발자도 해당 브랜치를 활발히 작업하지 않게 됩니다. 이 시점에서 해당 브랜치는 종료된 것으로 간주됩니다.
Django는 과거에 Subversion 형상 관리 시스템을 사용해 유지관리되었습니다. 그러나 이 시스템에는 이를 표시하는 표준적인 방법이 없었습니다. 이에 대한 대안으로, 종료되어 더 이상 유지관리되지 않는 Django 브랜치는 ``attic``으로 이동되었습니다.
archive/ 접두어 아래에는 이러한 작업과 과거에 참고할 가치가 있는 다른 작업을 유지하기 위한 여러 태그가 존재합니다.
archive/attic/ 접두어 아래의 다음 태그는 코드가 결국 Django 자체에 포함된 브랜치의 최신 상태를 가리킵니다.
boulder-oracle-sprint: Oracle 데이터베이스 지원을 Django의 객체 관계 매퍼(ORM)에 추가했습니다. 이는 Django 1.0부터 포함되었습니다.gis: 지리/공간 쿼리 지원을 Django의 객체 관계 매퍼(ORM)에 추가했습니다. 이는 Django 1.0부터django.contrib.gis번들 애플리케이션으로 제공되었습니다.i18n: Django에 :doc:`국제화 지원 </topics/i18n/index>`을 추가했습니다. 이는 Django 0.90 릴리스부터 포함되었습니다.magic-removal: Django 객체 관계 매퍼의 내부 구조와 공개 API 전반에 대한 대규모 리팩토링입니다. 이는 Django 0.95 릴리스부터 포함되었습니다.multi-auth: Django’s bundled authentication framework 지원을 추가했습니다. 이는 Django 0.95 릴리스부터 포함되었습니다.new-admin: :doc:`Django’s bundled administrative application </ref/contrib/admin/index>`에 대한 리팩토링입니다. 이는 Django 0.91 릴리스부터 포함되었지만, Django 1.0 릴리스 이전에 다른 리팩토링으로 대체되었습니다(다음 목록 참고).newforms-admin: DDjango의 번들 관리 애플리케이션에 대한 두 번째 리팩토링입니다. 이는 Django 1.0 릴리스부터 포함되었으며, 현재 ``django.contrib.admin``의 기반이 되는 구조입니다.queryset-refactor: Django 객체 관계 매퍼의 내부 구조에 대한 리팩토링입니다. 이는 Django 1.0 릴리스부터 포함되었습니다.unicode: Django와 Django 애플리케이션 전반에서 Unicode 기반 문자열을 일관되게 사용하도록 Django 내부 구조를 리팩토링한 것입니다. 이는 Django 1.0 릴리스부터 포함되었습니다.
또한 archive/attic/ 접두어 아래의 다음 태그는 종료된 브랜치의 최신 상태를 가리킵니다. 이러한 브랜치는 코드가 Django에 병합된 적이 없고, 구현하려던 기능도 완료되지 않았습니다.
full-historygeneric-authmultiple-db-supportper-object-permissionsschema-evolutionschema-evolution-ngsearch-apisqlalchemy
마지막으로 archive/ 접두어 아래에는 2009년과 2010년 Google Summer of Code 프로그램에 참여한 학생들이 Django에서 작업하며 사용했던 브랜치의 최신 상태를 가리키는 soc20XX/<project> 태그가 포함되어 있습니다.