# Django 6.0.7 문서

# 모델에 초기 데이터를 제공하는 방법

앱을 처음 설정할 때 하드 코딩된 데이터로 데이터베이스를 미리 채우는 것이 때때로 유용합니다. 마이그레이션이나 fixtures를 사용하여 초기 데이터를 제공할 수 있습니다.

## 마이그레이션을 사용해 초기 데이터 제공하기

앱의 초기 데이터를 자동으로 로드하려면 :ref:`데이터 마이그레이션<data-migrations>`을 생성하세요. 마이그레이션은 테스트 데이터베이스를 설정할 때 실행되므로 데이터도 해당 데이터베이스에서 사용할 수 있습니다. 다만 :ref:`몇 가지 제한 사항<test-case-serialized-rollback>`이 있습니다.

## fixtures를 사용해 데이터 제공하기

fixtures<fixtures-explanation>`를 사용하여 데이터를 제공할 수도 있습니다. 다만 이 데이터는 :attr:.TransactionTestCase.fixtures`를 사용하지 않는 한 자동으로 로드되지 않습니다.

고정 장치는 Django가 데이터베이스로 가져오는 방법을 알고 있는 데이터의 모음입니다. 데이터가 이미 있는 경우 고정장치를 만드는 가장 간단한 방법은 :tembadmin:’manage.py dumpdata’ 명령을 사용하는 것입니다. 또는 수동으로 고정장치를 작성할 수 있으며 고정장치는 JSON, XML 또는 YAML(PyYAML_installed) 문서로 작성할 수 있습니다. :doc:’직렬화 설명서’는 지원되는 각:ref:’직렬화 형식’에 대한 자세한 정보를 제공합니다.

그러나 한 예로 JSON에서 “사람” 모델의 고정장치는 다음과 같습니다.

    [
      {
        "model": "myapp.person",
        "pk": 1,
        "fields": {
          "first_name": "John",
          "last_name": "Lennon"
        }
      },
      {
        "model": "myapp.person",
        "pk": 2,
        "fields": {
          "first_name": "Paul",
          "last_name": "McCartney"
        }
      }
    ]

그리고 YAML로 된 동일한 fixture 가 있습니다.

    - model: myapp.person
      pk: 1
      fields:
        first_name: John
        last_name: Lennon
    - model: myapp.person
      pk: 2
      fields:
        first_name: Paul
        last_name: McCartney

이 데이터는 앱 안에 있는 “고정장치” 디렉토리에 저장됩니다.

:djadmin:’manage.py loaddata <loaddata>` ``<fixturename>``를 호출하여 데이터를 로드할 수 있습니다. ``<fixturename>``는 당신이 만든 fixture 파일의 이름입니다. :djadmin:`loaddata`를 실행할 때마다 데이터는 고정장치에서 읽혀져 데이터베이스에 다시 로드됩니다. 이는 고정 장치에 의해 생성된 행 중 하나를 변경한 후 :djadmin:`loaddata`를 다시 실행하는 경우, 변경 내용이 모두 지워진다는 의미입니다.

### Django가 fixture 파일을 찾을 위치 지정하기

기본적으로 Django는 각 앱 내부의 `fixtures` 디렉토리에서 fixtures를 찾습니다. 따라서 `loaddata sample` 명령을 실행하면 `my_app/fixtures/sample.json``파일을 찾습니다. 이는 상대 경로에서도 동일하게 동작하므로 ``loaddata my_app/sample` 명령을 실행하면 `my_app/fixtures/my_app/sample.json` 파일을 찾습니다.

또한 Django는 `FIXTURE_DIRS` 설정에 지정된 디렉토리에서도 fixtures를 찾습니다.

기본 검색이 수행되지 않도록 하려면 fixture 파일의 위치를 절대 경로로 지정하세요. 예: `loaddata /path/to/sample`

fixture 파일에 네임스페이스 적용하기

Django는 이름이 일치하는 첫 번째 fixture 파일을 찾아 사용하므로, 서로 다른 애플리케이션에 동일한 이름의 fixture 파일이 있는 경우 `loaddata` 명령에서 이를 구분할 수 없습니다. 이 문제를 방지하는 가장 쉬운 방법은 fixture 파일에 *네임스페이스를 적용하는 것*입니다. 즉, 위의 상대 경로 예시처럼 애플리케이션 이름으로 된 디렉토리 안에 fixture 파일을 넣는 것입니다.

더 보기

또한 :ref:’testing framework’에서는 고정장치를 사용하여 일관된 테스트 환경을 설정할 수 있습니다.