오늘의 공부일기/장고 공부일기

[Django] fixtures: 테스트 데이터 생성하기

츄98 2023. 7. 4. 01:11

로컬환경에서 개발을 하다보면, 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 데이터를 처리하지 않으므로, 

이를 처리하기 위해서는 추가적인 작업이 필요하다.

 

  • 참조 무결성

참조 무결성 조건을 만족시키지 않는 데이터를 불러온 경우, 오류가 발생할 수 있다.

따라서 데이터를 로딩하기 전에, 먼저 데이터베이스의 데이터를 초기화하는 것이 좋다.