[Django] fixtures: 테스트 데이터 생성하기
로컬환경에서 개발을 하다보면, db를 날려야하는 순간이 찾아온다.
그때마다 db를 만들고, 테스트를 위해서 다시 똑같은 데이터를 계속 만들고 저장해야하는 상황..
이런 번거러움을 모두가 느낀 적이 있을 것이다..!!
만약에 db에 있는 데이터를 한 파일에 저장해서 그대로 새 db에 데이터를 넣을 수 있다면..!
테스트 데이터를 생성해둘 수 있다면 정말 편할 것이다.
실제로 이 방법을 알고 난 후부터 db를 삭제하는 일이 두렵지 않다~ 지금부터 그 방법을 소개하겠다.
⏹️ Django fixture
Django fixture는 애플리케이션에서 사용하는 데이터를 JSON 형식으로 저장해두고, 나중에 사용할 수 있도록 하는 기능이다. 운영 서버에 배포하기 전에 초기 데이터 작업을 수행하거나, 테스트 데이터를 생성하는 등의 목적으로 사용할 수 있다.
현재 DB에 있는 앱, 모델에 해당하는 데이터 ➡️ json 파일로 만들기
⏹️ dumpdata
- Django에서 제공하는 manage.py 명령어를 사용하여 데이터를 JSON 형식으로 출력하는 기능
이 명령어를 사용하면 애플리케이션 내의 모든 데이터를 JSON 파일로 추출할 수 있다.
python manage.py dumpdata <app이름>.<모델이름> --indent 2 --output=<만들파일이름>.json
아래처럼 db에 담긴 데이터가 json파일로 정리가 된다.

자 이제 db를 날려보자~~
그 뒤 초기화된 db를 원래 db로 복구해보자!!!
⏹️ loaddata(JSON 파일에 있는 모든 데이터를 간단하게 로딩하고 저장할 때)
- JSON 파일로부터 데이터를 로딩하는 기능
- python manage.py migrate 이후에 터미널에 다음 명령어를 입력
이를 사용하면 데이터를 애플리케이션으로 가져와 초기 데이터 작업을 수행할 수 있다.
아래 명령어를 입력하면, json 파일대로 db 데이터가 저장된다~
python manage.py loaddata <json 파일 이름>
⏹️ 주의사항
- 사용자 비밀번호
dumpdata 명령어로 사용자 데이터를 추출할 때,
사용자 비밀번호는 해시되지 않은 평문으로 그대로 추출 되므로,
보안을 생각한다면 이 부분은 주의해서 처리해야 한다.
(DB에 해싱된 상태로 저장된 PW는 Json파일에서도 해싱된 상태로 되어있지만,
DB에 해싱되지 않은 PW가 들어있다면 dumpdata에서 해싱을 따로 해주지 않는다는 뜻)
- ManyToManyField
ManyToManyField로 정의된 데이터 모델이 있는 경우,
이를 처리하는 방법에서 오류가 발생할 수 있다.
Django fixture가 직접 ManyToManyField 데이터를 처리하지 않으므로,
이를 처리하기 위해서는 추가적인 작업이 필요하다.
- 참조 무결성
참조 무결성 조건을 만족시키지 않는 데이터를 불러온 경우, 오류가 발생할 수 있다.
따라서 데이터를 로딩하기 전에, 먼저 데이터베이스의 데이터를 초기화하는 것이 좋다.