{"title":"애플리케이션","version":"5.0","locale":"ko","docname":"ref/applications","url":"/ko/5.0/ref/applications/","canonical":"https://djangodocs.dev/ko/5.0/ref/applications/","summary":"Django는 설치된 어플리케이션에 대한 설정과 인트로스펙션을 저장하는 레지스트리를 가지고 있습니다. 이는 또한 사용 가능한 :doc: ` 모델</topics/db/models>`의 리스트를 관리합니다. 이 레지스트리는 apps ::로 접근 가능합니다. Python console Copy…","html":"<span id=\"applications\"></span><h1>애플리케이션<a class=\"heading-anchor\" href=\"#module-django.apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django는 설치된 어플리케이션에 대한 설정과 인트로스펙션을 저장하는 레지스트리를 가지고 있습니다. 이는 또한 사용 가능한 :doc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>모델&lt;/topics/db/models&gt;`의 리스트를 관리합니다.</p>\n<p>이 레지스트리는 <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code>::로 접근 가능합니다.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_app_config</span><span class=\"p\">(</span><span class=\"s2\">&quot;admin&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">verbose_name</span>\n<span class=\"go\">&#39;Administration&#39;</span>\n</code></pre></div>\n<section id=\"projects-and-applications\">\n<h2>프로젝트와 어플리케이션<a class=\"heading-anchor\" href=\"#projects-and-applications\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>프로젝트는 장고 웹 애플리케이션을 지칭합니다. 파이썬 표준 모듈은 settings에 대부분 정의되어 있지만, 비표준 모듈들도 포함되어 있습니다. 예를 들어 “django-admin startproject mysite”를 실행한다면 “mysite” 디렉터리가 생성될 것이며 “mysite” 디렉터리 안에는 “settings.py”, “urls.py”, “asgi.py”, “wsgi.py”가 파이썬 패키지와 함께 설치되어 있을 것입니다. 때로는 프로젝트 패키지가 CSS, 템플릿이 특정 애플리케이션에 종속되지 않도록 확장되기도 합니다.</p>\n<p><strong>프로젝트의 최상위 디렉토리</strong> (<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>manage.py``를 포함하고 있는 디렉토리)는 보통 따로 설치되지 않은 프로젝트의 어플리케이션을 포함하는 컨테이너 역할을 합니다.</p>\n<p>애플리케이션이라는 용어는 몇 가지 파이썬 패키지의 모음이라고 설명할 수 있습니다. :doc:애플리케이션은&lt;/intro/reusable-apps/&gt; 다양한 프로젝트에서 재사용 될 수 있습니다.</p>\n<p>애플리케이션은 모델, 뷰, 템플릿, 템플릿 태그, 정적 파일, URLs, 미들웨어 등의 조합을 포함합니다. 일반적으로 <a class=\"reference internal\" href=\"/ko/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 설정으로 프로젝트에 묶여있고 선택적으로 URLconfs,  <a class=\"reference internal\" href=\"/ko/5.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> 설정, 또는 템플릿 상속과 같은 메커니즘으로 묶입니다.</p>\n<p>Django 애플리케이션은 프레임워크의 다양한 부분과 상호 작용하는 코드 집합이라는 점을 이해하는 것이 중요합니다. <code class=\"docutils literal notranslate\"><span class=\"pre\">Application</span></code> 객체와 같은 것은 없습니다. 그러나 Django가 주로 구성 및 검사를 위해 설치된 응용 프로그램과 상호 작용해야 하는 곳이 몇 군데 있습니다. 이것이 애플리케이션 레지스트리가 설치된 각 애플리케이션에 대한 메타데이터를 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 인스턴스에 유지하는 이유입니다.</p>\n<p>프로젝트 패키지가 애플리케이션으로 고려되거나 모델을 가질 수 없다는 제한이 없습니다. (물론 설정에있는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>INSTALLED_APPS`에 값을 추가해야 합니다).</p>\n</section>\n<section id=\"configuring-applications\">\n<span id=\"configuring-applications-ref\"></span><h2>애플리케이션 설정하기<a class=\"heading-anchor\" href=\"#configuring-applications\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>애플리케이션을 생성하려면, 애플리케이션 안에 “apps,py”모듈을 생성하고,\n그곳에서 :class:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>AppConfig`의 서브클래스를 정의하십시오.</p>\n<p><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS`에</span> <span class=\"pre\">애플리케이션</span> <span class=\"pre\">모듈에</span> <span class=\"pre\">대한</span> <span class=\"pre\">점선</span> <span class=\"pre\">경로가</span> <span class=\"pre\">포함되어</span> <span class=\"pre\">있을</span> <span class=\"pre\">때,</span> <span class=\"pre\">기본적으로</span> <span class=\"pre\">Django가</span> <span class=\"pre\">``apps.py`</span></code> 하위 모듈에서 정확히 하나의 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스를 찾으면, 해당 구성을 애플리케이션에 사용합니다. 이 동작은 attr:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>AppConfig.default`를 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>False``로 설정하여 비활성화할 수 있습니다.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> 모듈이 하나 이상의 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스를 포함하는 경우 Django는 :attr:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>AppConfig.default`가 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>True``인 단일 하위 클래스를 찾습니다.</p>\n<p><a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스가 없으면 기본 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 클래스가 사용됩니다.</p>\n<p>또는, :setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>INSTALLED_APPS`에 구성 클래스에 대한 점선 경로를 포함하여 명시적으로 지정할 수 있습니다.</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;polls.apps.PollsAppConfig&quot;</span><span class=\"p\">,</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<section id=\"for-application-authors\">\n<h3>애플리케이션 제작자의 경우<a class=\"heading-anchor\" href=\"#for-application-authors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>“Rock ‘n’ roll”이라는 플러그형 앱을 만드는 경우, 관리자에게 적절한 이름을 제공하는 방법은 다음과 같습니다:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># rock_n_roll/apps.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AppConfig</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RockNRollConfig</span><span class=\"p\">(</span><span class=\"n\">AppConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;rock_n_roll&quot;</span>\n    <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Rock ’n’ roll&quot;</span>\n</code></pre></div>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>RockNRollConfig``는 <code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS`에</span> <span class=\"pre\">`</span></code>’rock_n_roll’<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>이 포함되어 있을 때 자동으로 로드됩니다. 이를 방지하려면, 클래스 정의에서 :attr:<a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>~AppConfig.default`를 <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>False``로 설정하십시오.</p>\n<p>동작이 다른 여러 가지 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스를 사용할 수 있습니다. 기본값으로 사용할 것이 어떤 것인지를 Django에 알리려면, <code class=\"xref py py-attr docutils literal notranslate\"> <span class=\"pre\">사용자가</span> <span class=\"pre\">기본이</span> <span class=\"pre\">아닌</span> <span class=\"pre\">구성을</span> <span class=\"pre\">선택하려는</span> <span class=\"pre\">경우,</span> <span class=\"pre\">:setting:`INSTALLED_APPS</span></code> 설정에서 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>’rock_n_roll’<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>을 해당 특정 클래스에 대한 점선 경로로 바꿔야 합니다.</p>\n<p><a class=\"reference internal\" href=\"#django.apps.AppConfig.name\" title=\"django.apps.AppConfig.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">AppConfig.name</span></code></a> 속성은 이 구성이 적용되는 애플리케이션을 Django에 알려줍니다. <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> API 참조에 문서화된 다른 속성을 정의할 수 있습니다.</p>\n<p><a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스는 어디에서나 정의할 수 있습니다. <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> 규칙은 설정 클래스에 대한 경로가 아닌 애플리케이션 모듈에 대한 경로를 포함할 때 Django가 자동으로 로드하도록 허용할 뿐입니다.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">참고</p>\n<p>코드가 애플리케이션의 <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py``에서</span> <span class=\"pre\">애플리케이션</span> <span class=\"pre\">레지스트리를</span> <span class=\"pre\">가져오면,</span> <span class=\"pre\">``apps``라는</span> <span class=\"pre\">이름이</span> <span class=\"pre\">``apps</span></code> 하위 모듈과 충돌합니다. 가장 좋은 방법은 해당 코드를 하위 모듈로 이동하고 가져오는 것입니다. 다른 해결 방법은 다른 이름으로 레지스트리를 가져오는 것입니다:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span> <span class=\"k\">as</span> <span class=\"n\">django_apps</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"for-application-users\">\n<h3>애플리케이션 사용자의 경우<a class=\"heading-anchor\" href=\"#for-application-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>anthology``라는 프로젝트에서 “Rock ‘n’ roll”을 사용하고 있지만 대신 “Jazz Manouche”로 표시하고 싶다면, 다음과 같이 고유한 구성을 제공할 수 있습니다:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># anthology/apps.py</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">rock_n_roll.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RockNRollConfig</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">JazzManoucheConfig</span><span class=\"p\">(</span><span class=\"n\">RockNRollConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Jazz Manouche&quot;</span>\n\n\n<span class=\"c1\"># anthology/settings.py</span>\n\n<span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;anthology.apps.JazzManoucheConfig&quot;</span><span class=\"p\">,</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>이 예제는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>apps.py``라는 하위 모듈에 있는 프로젝트별 구성 클래스를 보여줍니다. 이것은 규칙이지 요구 사항이 아닙니다. <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스는 어디에서나 정의할 수 있습니다.</p>\n<p>이 상황에서, :setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>INSTALLED_APPS`는 구성 클래스에 점선 경로를 포함해야 합니다. 왜냐하면 애플리케이션 외부에 있으므로 자동으로 감지할 수 없기 때문입니다.</p>\n</section>\n</section>\n<section id=\"application-configuration\">\n<h2>애플리케이션 설정<a class=\"heading-anchor\" href=\"#application-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AppConfig</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>애플리케이션 구성 개체는 애플리케이션에 대한 메타데이터를 저장합니다. 일부 속성은 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스에서 구성할 수 있습니다. 다른 것들은 Django에 의해 설정되고 읽기 전용입니다.</p>\n</dd></dl>\n\n<section id=\"configurable-attributes\">\n<h3>구성 가능한 속성들<a class=\"heading-anchor\" href=\"#configurable-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">name</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>애플리케이션에 대한 전체 Python 경로, 예: <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code>.</p>\n<p>이 속성은 구성이 적용되는 애플리케이션을 정의합니다. 모든 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스에서 설정해야 합니다.</p>\n<p>Django 프로젝트 전체에서 고유한 값이어야 합니다.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.label\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">label</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.label\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>애플리케이션을 위한 짧은 이름, 예를 들어 “admin”</p>\n<p>이 속성을 사용하면, 두 애플리케이션의 레이블이 충돌하는 경우 애플리케이션의 레이블을 다시 지정할 수 있습니다. 기본값은 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>name``의 마지막 구성 요소이며, 이는 유효한 파이썬 식별자여야 합니다.</p>\n<p>Django 프로젝트 전체에서 고유한 값이어야 합니다.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">경고</p>\n<p>Changing this attribute after migrations have been applied for an\napplication will result in breaking changes to a project or, in the\ncase of a reusable app, any existing installs of that app. This is\nbecause <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig.label</span></code> is used in database tables and migration\nfiles when referencing an app in the dependencies list.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.verbose_name\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">verbose_name</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.verbose_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>사람이 읽을 수 있는 애플리케이션의 이름, 예를 들어 “Administration”</p>\n<p>이 속성의 디폴트 값은  <code class=\"docutils literal notranslate\"><span class=\"pre\">label.title()</span></code> 입니다.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.path\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">path</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.path\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>애플리케이션 디렉토리에 대한 파일 시스템 경로, 예: <code class=\"docutils literal notranslate\"><span class=\"pre\">'/usr/lib/pythonX.Y/dist-packages/django/contrib/admin'</span></code>.</p>\n<p>대부분의 경우, Django는 이를 자동으로 감지하고 설정할 수 있지만, ~django.apps.AppConfig` 하위 클래스의 클래스 속성으로 명시적 재정의를 제공할 수도 있습니다. 몇 가지 상황에서 이것이 필요합니다. 예를 들어 앱 패키지가 여러 경로를 포함하는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>네임스페이스 패키지`_인 경우입니다.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.default\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">default</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.default\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>이 속성을 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>False``로 설정하여 Django가 구성 클래스를 자동으로 선택하지 않도록 합니다. 이는 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>apps.py``가 하나의 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스만 정의하지만, Django 기본값을 원하지 않을 때 유용합니다.</p>\n<p>이 속성을 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>True``로 설정하여 Django가 구성 클래스를 자동으로 선택하도록 합니다. 이는 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>apps.py``가 하나 이상의 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 하위 클래스를 정의하고 Django가 기본값으로 그 중 하나를 사용하기를 원할 때 유용합니다.</p>\n<p>기본적으로, 이 속성은 설정되지 않습니다.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.default_auto_field\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">default_auto_field</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.default_auto_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>이 앱 내의 모델에 추가할 암시적 기본 키 유형입니다. 이를 사용하여 :class:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.db.models.AutoField`를 써드 파티 애플리케이션의 기본 키 유형으로 유지할 수 있습니다.</p>\n<p>기본적으로 이는 :setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>DEFAULT_AUTO_FIELD`의 값입니다.</p>\n</dd></dl>\n\n</section>\n<section id=\"read-only-attributes\">\n<h3>읽기 전용 속성<a class=\"heading-anchor\" href=\"#read-only-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.module\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">module</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.module\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>응용 프로그램의 루트 모듈, 예: <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;module</span> <span class=\"pre\">'django.contrib.admin'</span> <span class=\"pre\">from</span> <span class=\"pre\">'django/contrib/admin/__init__.py'&gt;</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.models_module\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">models_module</span></span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.models_module\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>모델을 포함하는 모듈, 예. <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;module</span> <span class=\"pre\">'django.contrib.admin.models'</span> <span class=\"pre\">from</span> <span class=\"pre\">'django/contrib/admin/models.py'&gt;</span></code>.</p>\n<p>애플리케이션에 <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> 모듈이 포함되어 있지 않으면 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> 일 수 있습니다. <a class=\"reference internal\" href=\"/ko/5.0/ref/signals/#django.db.models.signals.pre_migrate\" title=\"django.db.models.signals.pre_migrate\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_migrate</span></code></a> 및 <code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_migrate`와</span> <span class=\"pre\">같은</span> <span class=\"pre\">데이터베이스</span> <span class=\"pre\">관련</span> <span class=\"pre\">신호는</span> <span class=\"pre\">``models`</span></code> 모듈이 있는 응용 프로그램에 대해서만 방출됩니다.</p>\n</dd></dl>\n\n</section>\n<section id=\"methods\">\n<h3>메소드<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.get_models\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_models</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include_auto_created</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">include_swapped</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.get_models\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>이 애플리케이션에 대한 클래스:~django.db.models.Model 클래스의 이터러블을 반환합니다.</p>\n<p>앱 레지스트리가 완전히 채워져야 합니다.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.get_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">require_ready</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.get_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>주어진 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>model_name``과 함께 :class:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>~django.db.models.Model`을 반환합니다. <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>model_name``은 대소문자를 구분하지 않습니다.</p>\n<p>이 애플리케이션에 해당 모델이 없으면 :exc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>LookupError`가 발생합니다.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> 인자가 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>False``로 설정되지 않은 한, 앱 레지스트리가 완전히 채워져야 합니다. <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>require_ready``는 apps.get_model()`에서와 똑같이 동작합니다.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.AppConfig.ready\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">AppConfig.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ready</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.AppConfig.ready\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>서브클래스는 시그널 등록과 같은 초기화 작업을 수행하기 위해 이 메서드를 재정의할 수 있습니다. 이 메서드는 레지스트리가 완전히 채워지는 즉시 호출됩니다.</p>\n<p><a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 클래스가 정의된 모듈 수준의 모델을 import 할 수는 없지만, <code class=\"docutils literal notranslate\"><span class=\"pre\">ready()``에서</span> <span class=\"pre\">``import</span></code> 문 또는 :meth:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~AppConfig.get_model`을 사용해 import 할 수 있습니다.</p>\n<p>:mod:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>모델 신호 &lt;django.db.models.signals&gt;`를 등록하는 경우, 모델 클래스 자체를 사용하는 대신 문자열 레이블로 발신자를 참조할 수 있습니다.</p>\n<p>예제:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AppConfig</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">pre_save</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RockNRollConfig</span><span class=\"p\">(</span><span class=\"n\">AppConfig</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">ready</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># importing model classes</span>\n        <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyModel</span>  <span class=\"c1\"># or...</span>\n\n        <span class=\"n\">MyModel</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s2\">&quot;MyModel&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># registering signals with the model&#39;s string label</span>\n        <span class=\"n\">pre_save</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">receiver</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"s2\">&quot;app_label.MyModel&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">경고</p>\n<p>위에서 설명한 대로 모델 클래스에 액세스할 수 있지만, <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a> 구현에서 데이터베이스와 상호 작용하지 마십시오. 여기에는 (<a class=\"reference internal\" href=\"/ko/5.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>, <a class=\"reference internal\" href=\"/ko/5.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>, 매니저 메소드 등의 쿼리 및) django.db.connection``을 통한 원시 SQL 쿼리를 실행하는 모델 메서드를 포함합니다. 모든 관리 명령을 시작하는 동안 :meth:`ready() 메서드가 실행됩니다. 예를 들어, 테스트 데이터베이스 구성이 프로덕션 설정과 분리되어 있더라도 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>manage.py test``는 여전히 <strong>프로덕션</strong> 데이터베이스에 대해 일부 쿼리를 실행합니다!</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">참고</p>\n<p>일반적인 초기화 과정에서, <code class=\"docutils literal notranslate\"><span class=\"pre\">ready</span></code> 메서드는 Django에 의해 한 번만 호출됩니다. 그러나 일부 특수한 경우, 특히 설치된 응용 프로그램을 만지작거리는 테스트에서는 <code class=\"docutils literal notranslate\"><span class=\"pre\">ready``가</span> <span class=\"pre\">두</span> <span class=\"pre\">번</span> <span class=\"pre\">이상</span> <span class=\"pre\">호출될</span> <span class=\"pre\">수</span> <span class=\"pre\">있습니다.</span> <span class=\"pre\">이</span> <span class=\"pre\">경우</span> <span class=\"pre\">idempotent</span> <span class=\"pre\">메서드를</span> <span class=\"pre\">작성하거나</span> <span class=\"pre\">``AppConfig</span></code> 클래스에 플래그를 지정하여 정확히 한 번만 실행되어야 하는 코드를 다시 실행하지 않도록 합니다.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"namespace-packages-as-apps\">\n<span id=\"namespace-package\"></span><h3>앱으로서의 네임스페이스 패키지<a class=\"heading-anchor\" href=\"#namespace-packages-as-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py</span></code> 파일이 없는 파이썬 패키지는 “네임스페이스 패키지”로 알려져 있으며 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>sys.path``의 여러 위치에 있는 여러 디렉토리에 분산될 수 있습니다(<span class=\"target\" id=\"index-2\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0420/\"><strong>PEP 420</strong></a> 참조).</p>\n<p>Django 애플리케이션에는 Django(구성에 따라 다름)가 템플릿, 정적 자산 등을 검색하는 단일 기본 파일 시스템 경로가 필요합니다. 따라서 네임스페이스 패키지는 다음 중 하나가 참인 경우에만 Django 애플리케이션일 수 있습니다.</p>\n<ol class=\"arabic simple\">\n<li><p>네임스페이스 패키지는 실제로 단일 위치만 갖습니다(즉, 둘 이상의 디렉토리에 분산되지 않음).</p></li>\n<li><p>애플리케이션을 구성하는 데 사용되는 <a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 클래스에는 Django가 어플리케이션을 위한 단일 기본 경로로 사용할 절대 디렉토리 경로인 <a class=\"reference internal\" href=\"#django.apps.AppConfig.path\" title=\"django.apps.AppConfig.path\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">path</span></code></a> 클래스 속성이 있습니다.</p></li>\n</ol>\n<p>이러한 조건 중 어느 것도 충족되지 않으면, Django는 :exc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.core.exceptions.ImproperlyConfigured`를 발생시킵니다.</p>\n</section>\n</section>\n<section id=\"application-registry\">\n<h2>애플리케이션 레지스트리<a class=\"heading-anchor\" href=\"#application-registry\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps\">\n<span class=\"sig-name descname\"><span class=\"pre\">apps</span></span><a class=\"heading-anchor\" href=\"#django.apps.apps\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>애플리케이션 레지스트리는 다음 공용 API를 제공합니다. 아래에 나열되지 않은 메서드는 비공개로 간주되며 예고 없이 변경될 수 있습니다.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.ready\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ready</span></span><a class=\"heading-anchor\" href=\"#django.apps.apps.ready\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>레지스트리가 완전히 채워지고 모든 AppConfig.ready 메서드가 호출된 후 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>True``로 설정되는 Boolean 속성입니다.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_app_configs\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_app_configs</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_app_configs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 인스턴스의 이터러블을 반환합니다.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_app_config\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_app_config</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_label</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_app_config\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>주어진 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>app_label``이 있는 애플리케이션에 대해 :class:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>~django.apps.AppConfig`를 반환합니다. 그러한 애플리케이션이 존재하지 않으면 :exc:<a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>LookupError`를 발생시킵니다.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.is_installed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">is_installed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.is_installed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>지정된 이름의 애플리케이션이 레지스트리에 있는지 확인합니다. <code class=\"docutils literal notranslate\"><span class=\"pre\">app_name``은</span> <span class=\"pre\">앱의</span> <span class=\"pre\">전체</span> <span class=\"pre\">이름입니다,</span> <span class=\"pre\">예를</span> <span class=\"pre\">들어</span></code>’django.contrib.admin’<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.apps.apps.get_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">app_label</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">require_ready</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.apps.apps.get_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>주어진 <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code> 및 <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name``으로</span> <span class=\"pre\">:class:`~django.db.models.Model`을</span> <span class=\"pre\">반환합니다.</span> <span class=\"pre\">바로</span> <span class=\"pre\">가기로</span> <span class=\"pre\">이</span> <span class=\"pre\">메서드는</span> <span class=\"pre\">``app_label.model_name</span></code> 형식의 단일 인수도 허용합니다. <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>model_name``은 대소문자를 구분하지 않습니다.</p>\n<p>그러한 애플리케이션이나 모델이 존재하지 않으면 :exc:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>LookupError`를 발생시킵니다. 정확히 하나의 점을 포함하지 않는 단일 인수로 호출하면 :exc:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>ValueError`가 발생합니다.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">require_ready</span></code> 인수가 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>False``로 설정되지 않은 한 앱 레지스트리가 완전히 채워져야 합니다.</p>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>require_ready``를 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>False``로 설정하면 <a class=\"reference internal\" href=\"#app-loading-process\"><span class=\"std std-ref\">앱 레지스트리가 채워지는 동안</span></a>, 특히 모델을 가져오는 두 번째 단계에서 모델을 조회할 수 있습니다. 그러면 <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>get_model()``은 모델을 가져오는 것과 같은 효과가 있습니다. 주요 사용 사례는 :setting:<a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>AUTH_USER_MODEL`과 같은 설정으로 모델 클래스를 구성하는 것입니다.</p>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>require_ready``가 <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>False``인 경우, <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>get_model()``은 앱 레지스트리가 완전히 채워질 때까지 부분적으로만 작동할 수 있는(예: 역 접근자가 누락될 수 있음) 모델 클래스를 반환합니다. 이러한 이유로, 가능하면 <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>require_ready``를 기본값인 <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">``</span></a>True``로 두는 것이 가장 좋습니다.</p>\n</dd></dl>\n\n</section>\n<section id=\"initialization-process\">\n<span id=\"app-loading-process\"></span><h2>초기화 프로세스<a class=\"heading-anchor\" href=\"#initialization-process\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"how-applications-are-loaded\">\n<h3>애플리케이션이 로드되는 방식<a class=\"heading-anchor\" href=\"#how-applications-are-loaded\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django가 시작되면, :func:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>django.setup()`이 애플리케이션 레지스트리를 채우는 역할을 합니다.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.setup\">\n<span class=\"sig-name descname\"><span class=\"pre\">setup</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">set_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.setup\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>다음을 통해 Django를 구성합니다:</p>\n<ul class=\"simple\">\n<li><p>설정들을 로딩중</p></li>\n<li><p>로깅 설정.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>set_prefix``가 True인 경우, URL 해석기 스크립트 접두어를 <code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORCE_SCRIPT_NAME`(정의된</span> <span class=\"pre\">경우)</span> <span class=\"pre\">또는</span> <span class=\"pre\">`</span></code>/<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>로 설정합니다.</p></li>\n<li><p>애플리케이션 레지스트리 초기화 중</p></li>\n</ul>\n<p>이 함수는 자동으로 호출 됩니다:</p>\n<ul class=\"simple\">\n<li><p>Django의 ASGI 또는 WSGI 지원을 통해 서버를 실행하는 경우.</p></li>\n<li><p>관리 명령어를 실행할 때</p></li>\n</ul>\n<p>다른 경우(예를 들어 일반 Python 스크립트)에는, 명시적으로 호출해야 합니다.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.0\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>Raises a <code class=\"docutils literal notranslate\"><span class=\"pre\">RuntimeWarning</span></code> when apps interact with the database before\nthe app registry has been fully populated.</p>\n</aside>\n</dd></dl>\n\n<p>애플리케이션 레지스트리는 3단계로 초기화됩니다. 각 단계에서 Django는 설정:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>INSTALLED_APPS`의 순서로 모든 애플리케이션을 처리합니다.</p>\n<ol class=\"arabic\">\n<li><p>먼저 Django는 :setting:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>INSTALLED_APPS`에서 각 항목을 가져옵니다.</p>\n<p>애플리케이션 구성 클래스인 경우, Django는 <a class=\"reference internal\" href=\"#django.apps.AppConfig.name\" title=\"django.apps.AppConfig.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">name</span></code></a> 속성으로 정의된 애플리케이션의 루트 패키지를 가져옵니다. Python 패키지인 경우 Django는 <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.py</span></code> 하위 모듈에서 애플리케이션 구성을 찾거나 기본값 애플리케이션 구성을 만듭니다.</p>\n<p><em>이 단계에서, 코드는 어떤 모델도 가져오지 않아야 합니다!</em></p>\n<p>즉, 애플리케이션의 루트 패키지와 애플리케이션 구성 클래스를 정의하는 모듈은 모델을 간접적으로라도 가져오면 안 됩니다.</p>\n<p>엄밀히 말하면, Django는 애플리케이션 구성이 로드되면 모델을 가져올 수 있습니다. 그러나 :setting:’INSTALLED_APPS’ 순서에 대한 불필요한 제약을 피하기 위해 이 단계에서 모델을 가져오지 않는 것이 좋습니다.</p>\n<p>이 단계가 완료되면 :meth:~apps.get_app_config()’와 같은 애플리케이션 구성에서 작동하는 API를 사용할 수 있게 됩니다.</p>\n</li>\n<li><p>그런 다음 Django는 각 애플리케이션의 <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> 하위 모듈(있는 경우)을 가져오려고 시도합니다.</p>\n<p>애플리케이션의 <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code> 또는 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>models/__init__.py``에서 모든 모델을 정의하거나 가져와야 합니다. 그렇지 않으면 이 시점에서 응용 프로그램 레지스트리가 완전히 채워지지 않아 ORM이 오작동할 수 있습니다.</p>\n<p>이 단계가 완료되면, :meth:~apps.get_model()`과 같은 모델에서 작동하는 API를 사용할 수 있게 됩니다.</p>\n</li>\n<li><p>마지막으로 Django는 각 애플리케이션 구성의 <a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">ready()</span></code></a> 메서드를 실행합니다.</p></li>\n</ol>\n</section>\n<section id=\"troubleshooting\">\n<span id=\"applications-troubleshooting\"></span><h3>문제해결<a class=\"heading-anchor\" href=\"#troubleshooting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>다음은 초기화 중에 발생할 수 있는 몇 가지 일반적인 문제입니다:</p>\n<ul>\n<li><p><a class=\"reference internal\" href=\"/ko/5.0/ref/exceptions/#django.core.exceptions.AppRegistryNotReady\" title=\"django.core.exceptions.AppRegistryNotReady\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppRegistryNotReady</span></code></a>: 애플리케이션 구성을 가져오거나 모델 모듈이 앱 레지스트리에 의존하는 코드를 트리거할 때 발생합니다.</p>\n<p>예를 들어 :func:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.utils.translation.gettext()`는 앱 레지스트리를 사용하여 애플리케이션에서 번역 카탈로그를 조회합니다. 가져올 때 번역하려면 대신 :func:<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>~django.utils.translation.gettext_lazy()`가 필요합니다. (:func:<a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>~django.utils.translation.gettext()`를 사용하면 버그가 될 수 있습니다. 활성화된 언어에 따라 각 요청 때가 아닌 가져오기 시간에 번역이 발생하기 때문입니다.)</p>\n<p>모델 모듈에서 가져올 때 ORM으로 데이터베이스 쿼리를 실행하면 이 예외가 트리거됩니다. ORM은 모든 모델을 사용할 수 있을 때까지 제대로 작동하지 않습니다.</p>\n<p>이 예외는 독립 실행형 Python 스크립트에서 <a class=\"reference internal\" href=\"#django.setup\" title=\"django.setup\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code></a> 호출을 잊은 경우에도 발생합니다.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ImportError:</span> <span class=\"pre\">can</span> <span class=\"pre\">import</span> <span class=\"pre\">name</span> <span class=\"pre\">...</span></code> 가져오기 시퀀스가 루프에서 끝나는 경우에 발생합니다.</p>\n<p>이러한 문제를 제거하려면, 모델 모듈 간의 종속성을 최소화하고 가져올 때 가능한 한 적은 작업을 수행해야 합니다. 가져올 때 코드를 실행하지 않으려면, 코드를 함수로 이동하고 결과를 캐시할 수 있습니다. 결과가 처음 필요할 때 코드가 실행됩니다. 이 개념을 “게으른 평가”라고 합니다.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin``은</span> <span class=\"pre\">설치된</span> <span class=\"pre\">애플리케이션에서</span> <span class=\"pre\">``admin</span></code> 모듈의 자동 검색을 자동으로 수행합니다. 이를 방지하려면 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code> 대신 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>’django.contrib.admin.apps.SimpleAdminConfig’<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>를 포함하도록 :setting:<a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>INSTALLED_APPS`를 변경하십시오.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">RuntimeWarning:</span> <span class=\"pre\">Accessing</span> <span class=\"pre\">the</span> <span class=\"pre\">database</span> <span class=\"pre\">during</span> <span class=\"pre\">app</span> <span class=\"pre\">initialization</span> <span class=\"pre\">is</span>\n<span class=\"pre\">discouraged.</span></code> This warning is triggered for database queries executed before\napps are ready, such as during module imports or in the\n<a class=\"reference internal\" href=\"#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AppConfig.ready()</span></code></a> method. Such premature database queries are\ndiscouraged because they will run during the startup of every management\ncommand, which will slow down your project startup, potentially cache stale\ndata, and can even fail if migrations are pending.</p>\n<p>For example, a common mistake is making a database query to populate form\nfield choices:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LocationForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">country</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ChoiceField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">Country</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()])</span>\n</code></pre></div>\n<p>In the example above, the query from <code class=\"docutils literal notranslate\"><span class=\"pre\">Country.objects.all()</span></code> is executed\nduring module import, because the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> is iterated over. To avoid the\nwarning, the form could use a <a class=\"reference internal\" href=\"/ko/5.0/ref/forms/fields/#django.forms.ModelChoiceField\" title=\"django.forms.ModelChoiceField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelChoiceField</span></code></a>\ninstead:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LocationForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">country</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelChoiceField</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Country</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>To make it easier to find the code that triggered this warning, you can make\nPython <a class=\"reference external\" href=\"https://docs.python.org/3/library/warnings.html#warning-filter\" title=\"(Python v3.14에서)\"><span class=\"xref std std-ref\">treat warnings as errors</span></a> to reveal the\nstack trace, for example with <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">-Werror</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">shell</span></code>.</p>\n</li>\n</ul>\n</section>\n</section>","rootId":"module-django.apps","toc":[{"title":"프로젝트와 어플리케이션","anchor":"projects-and-applications","children":[]},{"title":"애플리케이션 설정하기","anchor":"configuring-applications","children":[{"title":"애플리케이션 제작자의 경우","anchor":"for-application-authors","children":[]},{"title":"애플리케이션 사용자의 경우","anchor":"for-application-users","children":[]}]},{"title":"애플리케이션 설정","anchor":"application-configuration","children":[{"title":"구성 가능한 속성들","anchor":"configurable-attributes","children":[]},{"title":"읽기 전용 속성","anchor":"read-only-attributes","children":[]},{"title":"메소드","anchor":"methods","children":[]},{"title":"앱으로서의 네임스페이스 패키지","anchor":"namespace-packages-as-apps","children":[]}]},{"title":"애플리케이션 레지스트리","anchor":"application-registry","children":[]},{"title":"초기화 프로세스","anchor":"initialization-process","children":[{"title":"애플리케이션이 로드되는 방식","anchor":"how-applications-are-loaded","children":[]},{"title":"문제해결","anchor":"troubleshooting","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 레퍼런스","url":"/ko/5.0/ref/"}],"prev":{"docname":"ref/index","title":"API 레퍼런스","url":"/ko/5.0/ref/"},"next":{"docname":"ref/checks","title":"시스템 점검 프레임워크","url":"/ko/5.0/ref/checks/"},"formats":{"html":"/ko/5.0/ref/applications/","markdown":"/ko/5.0/ref/applications.md","json":"/ko/5.0/ref/applications.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/applications.txt","official":"https://docs.djangoproject.com/ko/5.0/ref/applications/","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","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}