python manage.py runserver
를 통해 프로젝트 실행 시 나오는 문구 중
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
위 구문은 적용되지 않은 migration이 있고, admin
, auth
, contenttypes
, sessions
앱에 관련된 내용을 적용하기 위해서는 python manage.py migrate
를 통해 적용하도록 되어있다.
INSTALLED_APPS
위의 앱들은 장고 프로젝트 생성에서 기본적으로 설치되는 앱들로, config/settings.py
파일에서 INSTALLED_APPS
를 통해 확인할 수 있다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
위의 INSTALLED_APPS
목록에는 상단에서 migration이 필요하다고 나왔던 App 외에도 messages
, staticfiles
이 있지만 이는 Database와 관련된 App이 아니기 때문에 migration이 필요하다고 나오지 않는다.
DATABASES
config/settings.py
에서 Database에 관한 정보를 확인할 수 있다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
위의 정보에서
django.db.backends.sqlite3
BASE_DIR / 'db.sqlite3'
로 정의되어 있다.
- SQLite: 파일 기반의 작은 데이터베이스로, 주로 개발용이나 소규모 프로젝트에서 활용
개발시에는 SQLite로 빠르게 개발하고 실제 운영시스템에서 규모있는 DB를 사용하는 것이 일반적- BASE_DIR: 프로젝트 디렉터리
Django는 무조건 DB가 필요하므로, SQLite가 기본적으로 생성됨
migrate
첫 안내문구에서 나온 명령어와 같이 python manage.py migrate
를 통해 migrate
를 수행하면, 해당 앱들이 필요로 하는 테이블들이 생성된다.
Table: Database에서 데이터를 저장하기 위한 데이터 집합의 모임
(mysite) MacBookPro ~/projects/mysite python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
기존 migration이 필요하다고 표시되었던 admin
, auth
, contenttypes
, sessions
앱에서 사용하는 테이블들이 생성된다. 위의 앱을 사용하더라도 테이블을 직접 건드릴 상황은 없으므로 어떤 테이블이 생성되는지 알 필요는 없다.
Query문 vs. ORM
- Query문: 전통적으로 DB를 사용하는 프로그램들은 DB의 데이터를 조회하거나 저장하기 위해 쿼리문을 사용
- 단점
개발자마다 다양한 쿼리문이 만들어지고 잘못 작성된 쿼리로 인해 성능 저하가 일어날 수 있음
DB가 MySQL에서 Oracle 등으로 변경된다면,프로그램의 쿼리문을 해당 DB 규칙에 맞게 수정- ORM(Object Relational Mapping): DB의 테이블을 모델화하여 사용
- SQL방식의 단점이 없어짐
개발자별로 독특한 쿼리문이 작성되거나 잘못된 쿼리를 작성할 가능성이 줄어들며,
DB가 변경되더라도 프로그램 수정이 필요가 없어진다.