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개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN