Django에서 프로덕션 서버로 데이터베이스를 마이그레이션하는 방법

Django 모델과 전체 데이터를 개발 데이터베이스에서 프로덕션으로 마이그레이션하는 방법에 대해 많이 검색했으며 이에 대한 많은 설명을 찾았지만 (좋은 설명 중 하나는 here ) 쉬운 솔루션을 찾지 못했습니다. 이 문제에 대해 저는 해결책을 제시하고 이 블로그에서 그 방법을 설명하고 있습니다. 이 블로그의 핵심으로 이동하기 전에 한 가지 질문과 이에 대한 내 생각을 제기하고 싶습니다.


마이그레이션 파일을 GitHub에 푸시해야 하나요?

모든 개인은 자신만의 관점을 가지고 있습니다. 장고 여행을 시작할 때 가장 좋은 방법이 무엇인지도 혼란스러웠습니다. this answer from을 읽은 후 내 마이그레이션도 푸시하려고 했습니다. 하지만 좋은 방법이 아닌 것 같아서 GitHub에서 마이그레이션을 제거했습니다.

자, 이제 핵심을 단계별로 시작하겠습니다.

1. 데이터베이스 백업 생성



첫 번째 단계는 데이터베이스 백업을 만드는 것입니다. 제 경우에는 PostgreSQL 데이터베이스를 사용하고 있습니다. 백업 파일을 생성하려면 터미널에서 다음 명령을 실행하기만 하면 됩니다.

pg_dump -U postgres -h localhost -d database > db_backup_2022_05_20.sql


where, postgres is the database user, localhost is the database host, database is the database name and db_backup_2022_05_20.sql is the backup file name.



2. Django 모델을 서버로 마이그레이션



이 블로그는 데이터베이스를 마이그레이션하는 방법에 대해서만 다루기 때문에(Django 사이트를 프로덕션으로 게시하는 전체 절차는 아님) 데이터베이스 마이그레이션에만 집중하고 있습니다. 코드를 서버로 가져온 후 첫 번째 단계는 Django 명령을 사용하여 데이터베이스 테이블과 스키마만 마이그레이션하는 것입니다.

# make migrations
python manage.py makemigrations

# migrate models
python manage.py migrate


3. 데이터 마이그레이션



깨끗한 데이터베이스를 사용하여 프로덕션 환경을 초기화하려는 경우 추가 작업이 필요하지 않으므로 좋은 방법입니다. 그러나 개발자 환경에서 프로덕션 환경으로 모든 데이터를 이동하려면 개발 데이터베이스를 복원해야 합니다. 이렇게 하려면 일반적인 방법을 사용하면 외래 키로 인해 오류가 발생하고 데이터 중복 문제도 발생할 수 있습니다. 그러나 이 작업을 방지하고 데이터만 복원하기 위해 psql는 멋진 명령줄을 제공합니다. 다음을 수행하기만 하면 됩니다.

pg_restore -U postgres -h IP -d database --disable-triggers --data-only db_backup_2022_05_12.sql     


Where, postgres is the database user, ip is the server IP address, database is the database name and db_backup_2022_05_12.sql is the backup file location. If you want to know more about the pg_restore command, please check this official documentation.



이 단계에서 일부 오류 메시지나 경고가 표시될 수도 있지만 무시해도 됩니다.

4. 다음은?



Django 모델을 업데이트하려면 먼저 개발 환경에서 모델을 테스트할 수 있습니다. 프로덕션에서 이러한 변경 사항을 업데이트하려면 서버에서 아래와 같이 모델을 마이그레이션하기만 하면 됩니다.

# make migrations
python manage.py makemigrations

# migrate models
python manage.py migrate


The migration file from the development and production environment will be different. If you check both databases from development and production, you will find the different data in the django_migration table.



축하합니다! 마침내 개발 환경에서 생산 환경으로 모든 데이터와 함께 데이터베이스를 마이그레이션했습니다.

이 블로그가 마음에 드시면 제 YouTube 채널을 구독하여 지원해 주세요.

좋은 웹페이지 즐겨찾기