모델
모델이란 부가적인 메타데이터를 가진 데이터베이스의 구조(layout)를 말합니다.
철학
모델("model")은 데이터에 관한 단 하나의, 가장 확실한 진리의 원천입니다. 이것은 당신이 저장하는 데이터의 필수적인 필드들과 동작들을 포함하고 있습니다. Django 는 DRY 원칙 을 따릅니다. 이 원칙에 따라 데이터 모델을 한곳에서 정의하고, 이것으로부터 자동으로 뭔가를 유도하는 것이 목표입니다.
이 규칙은 migration 에도 해당됩니다. Ruby On Rails 와는 다르게, Django 의 경우 migration 들은 모두 모델 파일로 부터 유도되며, 이 migration 들은 Django 가 데이터 스키마의 업데이트를 통해 현재의 모델에 도달할 수 있게 해주는, 일종의 역사와 같습니다.
모델의 활성화¶
모델에 대한 이 작은 코드가, Django 에게는 상당한 량의 정보를 전달합니다. 이 정보로 Django 는 다음을 할 수 있습니다.:
- 이 app 에 대하여 데이터베이스 스키마 생성 (
CREATE TABLE
statements) Question
과Choice
객체에 접근하기 위한 Python 데이터베이스 접근 API 를 생성
그러나, 가장 먼저 현재 project 에게 polls
app 이 설치되어 있다는 것을 알려야 합니다.
철학
Django 의 app 들은 착탈 가능("pluggable") 합니다. app 을 다수의 프로젝트에서 사용할 수 있으며, app 을 배포할 수도 있습니다. 특정 Django 에 app 들이 묶여있지 않아도 되기 때문입니다.
app 을 현재의 project 에 포함시키기 위해서는, app 의 구성 클래스에 대한 참조를 INSTALLED_APPS
설정에 추가시켜야 합니다
- makemigrations
을 실행시킴으로서, 당신이 모델을 변경시킨 사실과(이 경우에는 새로운 모델을 만들었습니다) 이 변경사항을 migration 으로 저장시키고 싶다는 것을 Django 에게 알려줍니다.
당신을 위해 migration 들을 실행시켜주고, 자동으로 데이터베이스 스키마를 관리해주는 migrate
라는 명령어가 존재합니다. 이 명령을 알아보기 전에 migration 이 내부적으로 어떤 SQL 문장을 실행하는지 살펴봅시다. sqlmigrate
명령은 migration 이름을 인수로 받아, 실행하는 SQL 문장을 보여줍니다.
이제, migrate
를 실행시켜 데이터베이스에 모델과 관련된 테이블을 생성해봅시다.
migrate
명령은 아직 적용되지 않은 모든 migration 들을 수집하여 이를 실행합니다. (Django 는 migration 의 적용 여부를 기록하는 django_migrations
테이블이 있습니다) 이 과정을 통해 모델에서의 변경 사항들과 데이터베이스의 스키마의 동기화가 이루어집니다.
migration 은 매우 기능이 강력하여, 마치 project 를 개발 할 때처럼 데이터베이스나 테이블에 손대지 않고도 모델의 반복적인 변경을 가능하게 해줍니다. 동작중인 데이터베이스를 자료 손실 없이 업그레이드 하는데에 최적화 되어 있습니다. 튜토리얼의 나머지 부분에서 이 부분을 조금 더 살펴 보겠습니다만, 지금은 모델의 변경을 만드는 세단계의 지침을 기억하세요:
- (
models.py
에서) 모델을 변경합니다. python manage.py makemigrations
을 통해 이 변경사항에 대한 migration 을 만드세요.python manage.py migrate
명령을 통해 변경사항을 데이터베이스에 적용하세요.
migration 을 만드는 명령과, 적용하는 명령이 분리된 이유는 버전 관리 시스템에 migration 을 커밋할 수 있게 하여 app 과 함께 제공하기 위해서입니다. 이것은 단순히 당신의 개발을 쉽게 해주는 것 뿐 아니라, 다른 개발자들과 운영 환경에서도 유용하게 사용될 수 있습니다.
django-admin documentation 문서에 manage.py
유틸리티가 어떤 일들을 할 수 있는지 알 수 있습니다.
출처
https://docs.djangoproject.com/ko/2.0/intro/tutorial02/
'Django' 카테고리의 다른 글
[Django] model, 마이그레이션, 템플릿 (0) | 2018.01.18 |
---|---|
Django로 앱 만드는 초기과정 (0) | 2018.01.18 |
django centos7 mysql 설치 (0) | 2018.01.09 |
django project 생성시 만들어지는 파일 (0) | 2018.01.09 |
django 연습 예제 (0) | 2018.01.09 |