{"title":"Django 소스 코드 저장소","version":"6.1","locale":"ko","docname":"internals/git","url":"/ko/6.1/internals/git/","canonical":"https://djangodocs.dev/ko/6.1/internals/git/","summary":"Django 애플리케이션을 실제 프로덕션 환경에 배포할 때는 거의 항상 `공식 패키지 릴리스로 제공되는 Django`_를 사용하는 것이 좋습니다.","html":"<h1>Django 소스 코드 저장소<a class=\"heading-anchor\" href=\"#the-django-source-code-repository\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django 애플리케이션을 실제 프로덕션 환경에 배포할 때는 거의 항상 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>공식 패키지 릴리스로 제공되는 Django`_를 사용하는 것이 좋습니다.</p>\n<p>그러나 다가오는 릴리스의 개발 중인 코드를 사용해 보거나 Django 개발에 기여하고 싶다면, Django 소스 코드 저장소를 복제하여 사용해야 합니다.</p>\n<p>이 문서는 코드 저장소의 구성 방식과 그 안에서 내용을 찾고 작업하는 방법을 다룹니다.</p>\n<section id=\"high-level-overview\">\n<h2>전반적인 개요<a class=\"heading-anchor\" href=\"#high-level-overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django 소스 코드 저장소는 코드 변경 사항을 추적하기 위해 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Git`_을 사용합니다. 따라서 컴퓨터에 Git 클라이언트(<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>git``이라는 프로그램)를 설치하고, Git의 기본적인 사용 방법에 익숙해져야 합니다.</p>\n<p>Git 웹사이트에서는 다양한 운영체제용 다운로드 파일을 제공합니다. 또한 방대한 양의 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>documentation`_확인할 수 있습니다.</p>\n<p>Django Git 저장소는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>github.com/django/django &lt;<a class=\"reference external\" href=\"https://github.com/django/django\">https://github.com/django/django</a>&gt;`_에서 온라인으로 확인할 수 있습니다. 이 저장소에는 모든 Django 릴리스의 전체 소스 코드가 포함되어 있으며, 온라인으로 둘러볼 수 있습니다.</p>\n<p>Git 저장소에는 다음과 같은 여러 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>branches`_가 포함되어 있습니다.</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">main</code> 브랜치에는 현재 개발 중인 주요 코드가 포함되어 있으며, 이는 Django의 다음 패키지 릴리스가 됩니다. 이 브랜치에서 대부분의 개발 활동이 이루어집니다.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>stable/A.B.x``는 릴리스 준비 작업이 이루어지는 브랜치입니다. 기능 버전의 초기 릴리스 이후 필요에 따라 수행되는 버그 수정 및 보안 릴리스에도 사용됩니다.</p></li>\n</ul>\n<p>Git 저장소에는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>tags`_도 포함되어 있습니다. 이는 Django 1.0 버전부터 패키지된 릴리스가 생성된 정확한 리비전을 나타냅니다.</p>\n<p>일부 태그는 <span class=\"xref std std-ref\">archived work&lt;archived-feature-development-work&gt;`를 위해 ``archive/`</span> 접두사를 가진 형태로 존재합니다.</p>\n<p><a class=\"reference external\" href=\"https://www.djangoproject.com/\">Djangoproject.com</a> 웹사이트의 소스 코드는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>github.com/django/djangoproject.com &lt;<a class=\"reference external\" href=\"https://github.com/django/djangoproject.com\">https://github.com/django/djangoproject.com</a>&gt;`_에서 확인할 수 있습니다.</p>\n</section>\n<section id=\"the-main-branch\">\n<h2>메인 브랜치<a class=\"heading-anchor\" href=\"#the-main-branch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django의 다음 릴리스에 포함될 개발 중인 코드를 사용해 보거나, 버그 수정이나 새로운 기능 개발을 통해 Django에 기여하고 싶다면 메인 브랜치에서 코드를 가져오는 것이 좋습니다.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">참고</p>\n<p>2021년 3월 이전에는 메인 브랜치의 이름이 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>master``였습니다.</p>\n</aside>\n<p>이 작업을 수행하면 Django <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">*</span></a>전체*를 가져올 수 있습니다. Python 코드가 포함된 최상위 <code class=\"docutils literal notranslate\">django</code> 모듈뿐만 아니라 Django의 문서, 테스트 스위트, 패키징 스크립트 및 기타 파일도 함께 포함됩니다. Django의 코드는 복제본 내의 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>django``라는 디렉토리에 위치합니다.</p>\n<p>자신의 애플리케이션에서 개발 중인 코드를 사용해 보려면 복제본이 포함된 디렉토리를 Python의 import 경로에 추가하세요. 그러면 Django를 찾는 <code class=\"docutils literal notranslate\">import</code> 문은 복제본 내의 <code class=\"docutils literal notranslate\">django</code> 모듈을 사용하게 됩니다.</p>\n<p>Django의 코드를 작업하려는 경우(예를 들어 버그를 수정하거나 새로운 기능을 개발하는 경우), 여기까지만 읽고 :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>the documentation for contributing to Django &lt;/internals/contributing/index&gt;`로 넘어가시면 됩니다. 이 문서에서는 선호하는 코딩 스타일과 패치를 생성하고 제출하는 방법 등을 다룹니다.</p>\n</section>\n<section id=\"stable-branches\">\n<h2>안정 브랜치<a class=\"heading-anchor\" href=\"#stable-branches\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django는 릴리스 준비를 위해 브랜치를 사용합니다. 각 주요 릴리스 시리즈에는 각각의 안정 브랜치가 있습니다.</p>\n<p>이러한 브랜치는 저장소에서 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>stable/A.B.x``브랜치로 확인할 수 있으며, 첫 번째 alpha 태그가 지정된 직후 생성됩니다.</p>\n<p>예를 들어 <em>Django 1.5 alpha 1</em> 태그가 지정된 직후 <code class=\"docutils literal notranslate\">stable/1.5.x</code> 브랜치가 생성되었으며, 이후 최종 1.5 릴리스를 위한 코드 준비 작업은 모두 이 브랜치에서 이루어졌습니다.</p>\n<p>이러한 브랜치는 :ref:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>supported-versions-policy`에 설명된 대로 버그 수정 및 보안 지원도 제공합니다.</p>\n<p>예를 들어 Django 1.5 릴리스 이후 <code class=\"docutils literal notranslate\">stable/1.5.x</code> 브랜치에는 보안 및 치명적인 안정성 버그에 대한 수정만 반영되며, 이는 이후 Django 1.5.1 등의 버전으로 릴리스됩니다. 또한 <code class=\"docutils literal notranslate\">stable/1.4.x</code> 브랜치에는 보안 및 데이터 손실 관련 수정만 반영되고, <code class=\"docutils literal notranslate\">stable/1.3.x</code> 브랜치는 더 이상 업데이트되지 않습니다.</p>\n<aside class=\"admonition-historical-information admonition\" role=\"note\">\n<p class=\"admonition-title\">과거 정보</p>\n<p><code class=\"docutils literal notranslate\">stable/A.B.x</code> 브랜치를 처리하는 이 정책은 Django 1.5 릴리스 주기부터 채택되었습니다.</p>\n<p>이전에는 이러한 브랜치가 릴리스 직후에야 생성되었고, 안정화 작업은 주요 저장소 브랜치에서 이루어졌습니다. 따라서 Django의 다음 릴리스를 위한 새로운 기능 개발 작업은 최종 릴리스가 이루어질 때까지 커밋할 수 없었습니다.</p>\n<p>예를 들어 Django 1.3 릴리스 직후 <code class=\"docutils literal notranslate\">stable/1.3.x</code> 브랜치가 생성되었습니다. 해당 릴리스에 대한 공식 지원은 종료되었으므로 더 이상 Django 프로젝트에서 직접 유지보수를 받지 않습니다. 그러나 이 브랜치와 이와 유사한 이름의 다른 브랜치들은 계속 존재하며, 관심 있는 커뮤니티 구성원들이 이전 Django 릴리스를 위한 비공식 지원을 제공하는 데 가끔 활용되고 있습니다.</p>\n</aside>\n</section>\n<section id=\"id1\">\n<h2>태그<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>각 Django 릴리스는 릴리스 담당자가 태그를 지정하고 서명합니다.</p>\n<p>태그는 GitHub의 <a class=\"reference external\" href=\"https://github.com/django/django/tags\">tags</a> 페이지에서 확인할 수 있습니다.</p>\n<section id=\"archived-feature-development-work\">\n<span id=\"id3\"></span><h3>보관된 기능 개발 작업<a class=\"heading-anchor\" href=\"#archived-feature-development-work\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition-historical-information admonition\" role=\"note\">\n<p class=\"admonition-title\">과거 정보</p>\n<p>Django가 2012년에 Git으로 전환된 이후, 누구나 저장소를 복제하고 자신의 브랜치를 만들 수 있게 되었으며, 이에 따라 소스 코드 저장소에서 공식 브랜치의 필요성이 줄어들었습니다.</p>\n<p>다음 섹션은 저장소의 이력을 살펴볼 때, 예를 들어 일부 기능이 어떻게 설계되었는지 이해하려는 경우에 유용합니다.</p>\n</aside>\n<p>기능 개발 브랜치는 그 특성상 일시적으로 유지되는 경우가 많습니다. 일부는 성공적으로 개발되어 Django의 주요 브랜치에 병합되어 공식 릴리스의 일부가 되지만, 그렇지 않은 경우도 있습니다. 어느 쪽이든 시간이 지나면 더 이상 어떤 개발자도 해당 브랜치를 활발히 작업하지 않게 됩니다. 이 시점에서 해당 브랜치는 종료된 것으로 간주됩니다.</p>\n<p>Django는 과거에 Subversion 형상 관리 시스템을 사용해 유지관리되었습니다. 그러나 이 시스템에는 이를 표시하는 표준적인 방법이 없었습니다. 이에 대한 대안으로, 종료되어 더 이상 유지관리되지 않는 Django 브랜치는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>attic``으로 이동되었습니다.</p>\n<p><code class=\"docutils literal notranslate\">archive/</code> 접두어 아래에는 이러한 작업과 과거에 참고할 가치가 있는 다른 작업을 유지하기 위한 여러 태그가 존재합니다.</p>\n<p><code class=\"docutils literal notranslate\">archive/attic/</code> 접두어 아래의 다음 태그는 코드가 결국 Django 자체에 포함된 브랜치의 최신 상태를 가리킵니다.</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">boulder-oracle-sprint</code>: Oracle 데이터베이스 지원을 Django의 객체 관계 매퍼(ORM)에 추가했습니다. 이는 Django 1.0부터 포함되었습니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\">gis</code>: 지리/공간 쿼리 지원을 Django의 객체 관계 매퍼(ORM)에 추가했습니다. 이는 Django 1.0부터 <code class=\"docutils literal notranslate\">django.contrib.gis</code> 번들 애플리케이션으로 제공되었습니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\">i18n</code>: Django에 :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>국제화 지원 &lt;/topics/i18n/index&gt;`을 추가했습니다. 이는 Django 0.90 릴리스부터 포함되었습니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\">magic-removal</code>: Django 객체 관계 매퍼의 내부 구조와 공개 API 전반에 대한 대규모 리팩토링입니다. 이는 Django 0.95 릴리스부터 포함되었습니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\">multi-auth</code>: <span class=\"xref std std-doc\">Django’s bundled authentication framework</span> 지원을 추가했습니다. 이는 Django 0.95 릴리스부터 포함되었습니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\">new-admin</code>: :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Django’s bundled administrative application &lt;/ref/contrib/admin/index&gt;`에 대한 리팩토링입니다. 이는 Django 0.91 릴리스부터 포함되었지만, Django 1.0 릴리스 이전에 다른 리팩토링으로 대체되었습니다(다음 목록 참고).</p></li>\n<li><p><code class=\"docutils literal notranslate\">newforms-admin</code>: DDjango의 번들 관리 애플리케이션에 대한 두 번째 리팩토링입니다. 이는 Django 1.0 릴리스부터 포함되었으며, 현재 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django.contrib.admin``의 기반이 되는 구조입니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\">queryset-refactor</code>: Django 객체 관계 매퍼의 내부 구조에 대한 리팩토링입니다. 이는 Django 1.0 릴리스부터 포함되었습니다.</p></li>\n<li><p><code class=\"docutils literal notranslate\">unicode</code>: Django와 Django 애플리케이션 전반에서 Unicode 기반 문자열을 일관되게 사용하도록 Django 내부 구조를 리팩토링한 것입니다. 이는 Django 1.0 릴리스부터 포함되었습니다.</p></li>\n</ul>\n<p>또한 <code class=\"docutils literal notranslate\">archive/attic/</code> 접두어 아래의 다음 태그는 종료된 브랜치의 최신 상태를 가리킵니다. 이러한 브랜치는 코드가 Django에 병합된 적이 없고, 구현하려던 기능도 완료되지 않았습니다.</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">full-history</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">generic-auth</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">multiple-db-support</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">per-object-permissions</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">schema-evolution</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">schema-evolution-ng</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">search-api</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">sqlalchemy</code></p></li>\n</ul>\n<p>마지막으로 <code class=\"docutils literal notranslate\">archive/</code> 접두어 아래에는 2009년과 2010년 Google Summer of Code 프로그램에 참여한 학생들이 Django에서 작업하며 사용했던 브랜치의 최신 상태를 가리키는 <code class=\"docutils literal notranslate\">soc20XX/&lt;project&gt;</code> 태그가 포함되어 있습니다.</p>\n</section>\n</section>","rootId":"the-django-source-code-repository","toc":[{"title":"전반적인 개요","anchor":"high-level-overview","children":[]},{"title":"메인 브랜치","anchor":"the-main-branch","children":[]},{"title":"안정 브랜치","anchor":"stable-branches","children":[]},{"title":"태그","anchor":"id1","children":[{"title":"보관된 기능 개발 작업","anchor":"archived-feature-development-work","children":[]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Django 내부 구조","url":"/ko/6.1/internals/"}],"prev":{"docname":"internals/deprecation","title":"장고 폐기 일정","url":"/ko/6.1/internals/deprecation/"},"next":{"docname":"internals/howto-release-django","title":"Django 릴리스하는 방법","url":"/ko/6.1/internals/howto-release-django/"},"formats":{"html":"/ko/6.1/internals/git/","markdown":"/ko/6.1/internals/git.md","json":"/ko/6.1/internals/git.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/internals/git.txt","official":"https://docs.djangoproject.com/ko/6.1/internals/git/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}