[Django] Model

jaylight·2020년 11월 25일
0

Django App Migrate

App Migrate 요구

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',
    }
}

위의 정보에서

  • Database의 Engine은 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 앱에서 사용하는 테이블들이 생성된다. 위의 앱을 사용하더라도 테이블을 직접 건드릴 상황은 없으므로 어떤 테이블이 생성되는지 알 필요는 없다.

[SQLite를 통한 테이블 확인]

Query문 vs. ORM

  • Query문: 전통적으로 DB를 사용하는 프로그램들은 DB의 데이터를 조회하거나 저장하기 위해 쿼리문을 사용
    • 단점
      개발자마다 다양한 쿼리문이 만들어지고 잘못 작성된 쿼리로 인해 성능 저하가 일어날 수 있음
      DB가 MySQL에서 Oracle 등으로 변경된다면,프로그램의 쿼리문을 해당 DB 규칙에 맞게 수정
  • ORM(Object Relational Mapping): DB의 테이블을 모델화하여 사용
    • SQL방식의 단점이 없어짐
      개발자별로 독특한 쿼리문이 작성되거나 잘못된 쿼리를 작성할 가능성이 줄어들며,
      DB가 변경되더라도 프로그램 수정이 필요가 없어진다.

Model 작성하기

Model 사용하기

0개의 댓글