Django Migration

MoonLight·2021년 8월 3일
0

django

목록 보기
14/20
post-thumbnail

Migration


  • 모델(Model)의 변경 사항 관리 즉 Django 프로젝트의 데이터 구조 변경 사항을 관리하기 위한 Django만의 관리 방법

  • 장고의 데이터 변경사항에 대한 버전 컨트롤 시스템

    • 쉽게 말해 변경사항을 저장해주는 목록
    • 변경될 때마다 히스토리를 하나씩 만들어 두고 마치 블럭을 갈아 끼우듯 생성한 히스토리를 실제 데이터베이스에 반영
  • 예를 들어, 개발자가 모델을 생성하거나 변경했을 때, migration을 하나씩 만든다. 그리고 만든 migration을 실제 데이터베이스에 적용하는 것이 migrate 명령어이다.

  • 그리고 이 모든 과정은 ORM(Object-Relational Mapping)을 통해 진행됨.

I. Details about migration


  • migration은 각 앱의 migration 디렉토리에 저장되어 있는데, python manage.py makemigrations 명령어를 이용해 만들었던 1번 migration 파일이 생성되었음을 볼 수가 있다.

  • 이 파일을 보면 장고에서 제공해주는 migration을 상속받은 class가 있고, 빨간색 박스친 우리가 작성한 부분도 있고, 작성해주지 않았지만 자동으로 생성된 부분도 있다.

    • 특히 id는 장고에서 자동으로 생성해주는 필드중 하나인데, 각각의 menu 데이터를 구분하기 위한 고유값이다. (Primary Key)
  • 이렇게 변경사항을 기록한 migration 파일을 바탕으로 현재 데이터베이스에 적용되지 않은 사항이 있다면 적용해주는 명령어가 migarte 명령어 이다.


II. 자동으로 생성된 SQL문 들여다보기

💡 우리는 지금껏 model의 모든 코드를 Python으로 작성했지만, 사실 데이터베이스와 소통하기 위해서는 SQL 언어를 사용해야 한다. 하지만 그런 SQL없이 파이썬으로 데이터베이스와 소통할 수 있도록 해주는 것이 ORM이다. 실제로 이러한 모델이 어떻게 변환되었는지 보자.

  • python manage.py showmigrations 를 입력하자. 이 명령어는 현재 migration의 적용현황을 알려준다. 그럼 아래와 같이 뜨는데 이 [X]는 이미 장고에 변경사항이 반영되었음을 알려준다.

  • 적용되었음을 확인했으니 이제 진짜로 1번 migration파일(foods앱의 0001_initial)이 ORM을 통해서 어떻게 SQL로 변환되었는지 보자.

    • python manage.py sqlmigrate [app 이름] [보고싶은 migration 번호]
    • ex) python manage.py sqlmigrate foods 0001

III. migration관련 명령어 복습

0x01. makemigrations

python manage.py makemigrations

모델의 변경 사항을 인식해서 새로운 마이그레이션을 만든다. 이때 마이그레이션은 각 앱 디렉토리 내 migrations 디렉토리 안쪽에 생성된다.

0x02. migrate

python manage.py migrate

생성된 최신 버전의 마이그레이션을 데이터베이스에 반영한다. 만약 이전 마이그레이션으로 되돌리고 싶다면 python manage.py migrate {앱 이름} {되돌릴 마이그레이션 번호}를 사용할 수 있다.

0x03. showmigrations

python manage.py showmigrations

현재 django 프로젝트의 모든 마이그레이션과 반영 상태를 나타낸다. 만약 특정 앱에 대한 것만 보고 싶다면 python manage.py showmigrations {앱 이름}을 사용할 수 있다.

0x04. sqlmigrate

python manage.py sqlmigrate {앱 이름} {마이그레이션}

인수로 넘겨준 마이그레이션이 ORM을 통해 변경된 SQL문을 출력한다. sqlmigrate를 통해 모델이 의도한 대로 SQL문으로 변경되어 데이터베이스에 반영되었는지 확인할 수 있다.


Django의 마이그레이션에 대해 더 알고 싶다면 아래의 공식 문서를 참고
https://docs.djangoproject.com/en/2.2/topics/migrations/

profile
hello world :)

0개의 댓글