---
title: "모델에 초기 데이터를 제공하는 방법"
version: 6.1
locale: ko
source: https://docs.djangoproject.com/ko/6.1/howto/initial-data/
canonical: https://djangodocs.dev/ko/6.1/howto/initial-data/
---
# 모델에 초기 데이터를 제공하는 방법

앱을 처음 설정할 때 하드 코딩된 데이터로 데이터베이스를 미리 채우는 것이 때때로 유용합니다. 마이그레이션이나 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에서 “사람” 모델의 고정장치는 다음과 같습니다.

```js
[
  {
    "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 가 있습니다.

```yaml
- 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`](/ko/6.1/ref/settings/#std-setting-FIXTURE_DIRS) 설정에 지정된 디렉토리에서도 fixtures를 찾습니다.

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

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

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