django 튜토리얼 따라하기

첫 번째 장고 앱 작성하기, part 2

vipDeveloper 2024. 3. 29. 13:36
반응형

이 글에서는 데이터베이스와 관련 된 작업을 진행해보려고 합니다.

 

데이터베이스를 설치하고 첫 모델을 생성한 후, Django에서 자동 생성되는 관리자를 알아보도록 하겠습니다!

 

기본적으로 Django에서 데이터베이스는...

SQLite를 사용하도록 구성되어 있습니다. 만약 데이터베이스를 처음 경험해보거나 Django에서 데이터베이스를 한번 경험해보고 싶다면 SQLite를 그대로 사용하는 것이 가장 간단한 방법일 것입니다! 

 

가이드 따라가기도 좋다고 봅니당!!

# Django 프로젝트 설정 파일입니다. 이 파일은 'django-admin startproject' 명령을 통해 자동 생성되며, Django 5.0.3 버전을 사용하여 생성되었습니다.
# 이 파일에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/topics/settings/ 에서 확인할 수 있습니다.
# 설정 가능한 모든 설정 값들과 그에 대한 설명은 https://docs.djangoproject.com/en/5.0/ref/settings/ 에서 확인할 수 있습니다.

from pathlib import Path  # 파일 시스템 경로와 관련된 작업을 위한 모듈을 임포트합니다.

# 프로젝트 내의 경로를 생성하기 위해 이렇게 사용합니다: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent  # 현재 파일이 위치한 디렉토리의 부모 디렉토리를 기준 경로(BASE_DIR)로 설정합니다.


# 개발 초기 단계의 설정입니다. 실제 운영 환경에서는 사용하기에 적합하지 않습니다.
# 실제 운영 환경을 위한 체크리스트는 https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ 에서 확인할 수 있습니다.

# 보안 경고: 운영 환경에서 사용하는 비밀 키는 비공개로 유지하세요!
SECRET_KEY = 'django-insecure--cvob0s++-(e^(z7x@n#767_8s*9iy=%nvu)-s0q8(^ee=2+^v'  # 개발용 비밀 키입니다. 운영 환경에서는 절대 이 값을 그대로 사용하지 마세요.

# 보안 경고: 운영 환경에서는 디버그 모드를 활성화하지 마세요!
DEBUG = True  # 디버그 모드를 활성화합니다. 개발 중에만 True로 설정하고, 운영 환경에서는 False로 설정해야 합니다.

ALLOWED_HOSTS = []  # 이 사이트에 접근할 수 있는 호스트명을 지정합니다. 운영 환경에서는 여기에 서버의 주소를 추가해야 합니다.


# 애플리케이션 정의

INSTALLED_APPS = [  # 프로젝트에 설치된 앱들의 목록입니다.
    'django.contrib.admin',  # 관리자 사이트
    'django.contrib.auth',  # 인증 시스템
    'django.contrib.contenttypes',  # 컨텐츠 타입을 위한 프레임워크
    'django.contrib.sessions',  # 세션 프레임워크
    'django.contrib.messages',  # 메시징 프레임워크
    'django.contrib.staticfiles',  # 정적 파일을 관리하는 프레임워크
]

MIDDLEWARE = [  # 요청과 응답 처리를 위한 미들웨어의 목록입니다.
    'django.middleware.security.SecurityMiddleware',  # 보안 관련 미들웨어
    'django.contrib.sessions.middleware.SessionMiddleware',  # 세션 관리
    'django.middleware.common.CommonMiddleware',  # 여러 가지 일반적인 작업을 수행
    'django.middleware.csrf.CsrfViewMiddleware',  # CSRF 보호
    'django.contrib.auth.middleware.AuthenticationMiddleware',  # 사용자 인증
    'django.contrib.messages.middleware.MessageMiddleware',  # 메시징
    'django.middleware.clickjacking.XFrameOptionsMiddleware',  # 클릭재킹 보호
]

ROOT_URLCONF = 'mysite.urls'  # 프로젝트의 URL 설정을 담당하는 모듈의 이름입니다.

TEMPLATES = [  # 템플릿 관련 설정입니다.
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',  # Django의 템플릿 엔진을 사용합니다.
        'DIRS': [],  # 템플릿을 검색할 디렉토리의 목록입니다.
        'APP_DIRS': True,  # 앱 디렉토리 내의 'templates'를 템플릿 검색 경로로 추가합니다.
        'OPTIONS': {  # 템플릿 엔진에 전달할 추가 옵션입니다.
            'context_processors': [  # 컨텍스트 프로세서의 목록입니다. 템플릿에 기본으로 전달되는 변수들을 정의합니다.
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'mysite.wsgi.application'  # WSGI 애플리케이션의 경로입니다. Django 앱을 서비스하기 위한 WSGI 호환 웹 서버의 진입점입니다.


# 데이터베이스 설정
# 데이터베이스 설정에 관한 자세한 정보는 https://docs.djangoproject.com/en/5.0/ref/settings/#databases 에서 확인할 수 있습니다.

DATABASES = {
    'default': {  # 기본 데이터베이스 설정입니다.
        'ENGINE': 'django.db.backends.sqlite3',  # 사용할 데이터베이스 엔진입니다. 여기서는 SQLite를 사용합니다.
        'NAME': BASE_DIR / 'db.sqlite3',  # 데이터베이스 파일의 경로입니다.
    }
}


# 비밀번호 검증
# 비밀번호 검증 설정에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators 에서 확인할 수 있습니다.

AUTH_PASSWORD_VALIDATORS = [  # 비밀번호 유효성 검사기의 목록입니다.
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',  # 사용자 속성과의 유사성 검사
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',  # 최소 길이 검사
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',  # 흔히 사용되는 비밀번호 검사
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',  # 숫자만으로 구성된 비밀번호 검사
    },
]


# 국제화 설정
# 국제화 설정에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/topics/i18n/ 에서 확인할 수 있습니다.

LANGUAGE_CODE = 'en-us'  # 기본 언어 코드입니다.

TIME_ZONE = 'Asia/Seoul'  # 기본 시간대입니다.

USE_I18N = True  # 국제화를 위한 Django의 기능을 활성화합니다.

USE_TZ = True  # 시간대를 활성화합니다.


# 정적 파일 설정 (CSS, JavaScript, 이미지)
# 정적 파일 설정에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/howto/static-files/ 에서 확인할 수 있습니다.

STATIC_URL = 'static/'  # 정적 파일을 서비스하기 위한 URL의 접두사입니다.

# 기본 기본 키 필드 유형
# 기본 기본 키 필드 유형에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field 에서 확인할 수 있습니다.

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'  # 모델의 기본 키 필드에 사용할 필드 유형입니다.

 

일단 타임존을 'Asia/Seoul'로 변경해줬습니다!

 

그 다음 migrate를 수행합니다.

python manage.py migrate

 

Django 튜토리얼 문서를 보면 마이그레이트와 마이그레이션 명령어를 사용하게 되는데 그냥 단순 따라가기 이전에 해당 내용에 대하여 좀 알아보고 가는게 좋을 것 같아 정리해봅니다! 

 

마이그레이트(migrate) 와 마이그레이션(makemigrations)


python manage.py makemigrations

"makemigrations" 명령어는 모델의 변경 사항을 감지하여 마이그레이션 파일을 생성합니다. 이 파일은 데이터베이스 스키마 변경 방법을 정의하며 변경 사항을 데이터베이스에 준비하는 단계입니다!


python manage.py migrate

"migrate" 명령어는 마이그레이션 파일들을 실행하여 데이터베이스 스키마를 최신 상태로 업데이트 합니다. 개발 또는 배포 환경에서 모델 변경사항을 적용할 때 필요한 실질적인 데이터베이스 구조 변경 작업을 수행합니다. 이를 통해 개발자는 데이터베이스를 직접 수정하지 않고도 모델의 변경을 손쉽게 데이터베이스에 반영할 수 있으며, 모델과 데이터베이스 스키마 간의 일관성을 유지할 수 있습니다!

 

Polls app 만들기

앱 생성하기

 

 

위 명령어는 장고의 매니저를 활용하여 앱을 생성하는 첫번째 단계입니다.

python manage.py startapp polls

 

해당 앱에 맞는 모델의 작성해줍니다.!

 

1 - 모델 작성하기

# django.db 패키지에서 models 모듈 임포트. ORM 기능 제공, 데이터베이스 스키마를 Python 코드로 표현 가능.
from django.db import models

# Question 모델 클래스 정의. models.Model 상속, Django ORM 사용 가능.
class Question(models.Model):
    # question_text 필드는 CharField, 문자열 데이터 저장. max_length 옵션으로 최대 길이 지정.
    question_text = models.CharField(max_length=200)
    # pub_date 필드는 DateTimeField, 날짜와 시간 데이터 저장. 'date published'로 사람이 읽기 좋은 필드명 지정.
    pub_date = models.DateTimeField('date published')

# Choice 모델 클래스 정의. models.Model 상속.
class Choice(models.Model):
    # ForeignKey 사용, Choice와 Question 간 다대일(N:1) 관계 정의.
    # on_delete=models.CASCADE로 Question 삭제 시 해당 Choice도 함께 삭제 설정.
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    # choice_text 필드는 선택지 내용 저장하는 문자열 필드.
    choice_text = models.CharField(max_length=200)
    # votes 필드는 IntegerField, 선택지 투표 수 저장. default=0으로 기본값 0 설정.
    votes = models.IntegerField(default=0)

 

2- settings에 APP 추가하기

# 애플리케이션 정의

INSTALLED_APPS = [  # 프로젝트에 설치된 앱들의 목록입니다.
    "polls.apps.PollsConfig",
    "django.contrib.admin",  # 관리자 사이트
    "django.contrib.auth",  # 인증 시스템
    "django.contrib.contenttypes",  # 컨텐츠 타입을 위한 프레임워크
    "django.contrib.sessions",  # 세션 프레임워크
    "django.contrib.messages",  # 메시징 프레임워크
    "django.contrib.staticfiles",  # 정적 파일을 관리하는 프레임워크
]

 

3 - 마이그레이션 생성

정의한 모델의 마이그레이션을 진행합니다. migrations 을 진행하면 앱 하위 migrations 폴더에 해당하는 모델에 대한 마이그레이션 파일이 생성됩니다. 

python manage.py makemigrations polls

 

4 - 마이그레이트 

마이그레이션 파일을 데이터베이스에 적용하여 스키마를 업데이트 합니다.

python manage.py migrate

 

이렇게 하면 polls앱의 모델이 데이터베이스에 반영 완료 된 것입니다.  다음글에서 관리자를 생성하고 polls 앱을 관리자 페이지에서 관리할 수 있도록 해보겠습니다. 

반응형