블로그로 돌아가기

Django 모델 생성하기: 튜토리얼

Django 모델 생성하기: 튜토리얼

Django는 안전하고 유지 관리가 용이한 웹사이트 및 웹 앱의 신속한 개발을 위한 잘 알려진 웹 프레임워크입니다. Python을 기반으로 구축된 Django는 웹 개발을 단순화하여 매번 바퀴를 다시 발명할 필요 없이 앱 작성에 더 많은 시간과 집중을 할 수 있도록 해줍니다. Django는 강력한 공식 문서, 훌륭한 커뮤니티 지원, 그리고 다양한 무료 및 유료 지원을 제공하는 무료 오픈 소스 프로젝트입니다.

이 가이드에서는 Django 모델 생성에 대해 자세히 알아보겠습니다. Django에서 모델 은(는) 데이터에 대한 핵심 정보 소스입니다. 모델은 저장할 데이터의 필드와 동작을 설명합니다. Django는 모델을 사용하여 ORM(Object Relational Mapping)을 통해 데이터베이스 테이블을 생성하며, 이를 모델이라고도 합니다.

사전 요구 사항

우리는 Unix 기반 운영 체제에서 작업하고 있으며, 가급적이면 Ubuntu 20.04 클라우드 서버 를 테스트를 진행한 시스템으로 사용합니다. 유사한 환경에서 Django를 설정하려면 저희 튜토리얼인 “Ubuntu 20.04에서 Django를 설치하고 개발 환경을 설정하는 방법.”

1단계. Python 개발 환경

Django는 Python을 기반으로 구축되었습니다. 따라서 Python 앱을 작업하는 데 필요한 모든 도구를 갖춘 강력한 Python 개발 환경이 필요합니다. 이에 대해서는 이미 전용 가이드에서 다루었습니다. 여기서는 간단한 시연을 진행하겠습니다.

먼저 터미널을 열고 다음 명령어를 실행합니다:

다음으로, pip – Python 패키지 관리자:

그런 다음 몇 가지 추가 개발 패키지를 설치합니다:

Django Models 1

가상 환경을 설정하려면 Python venv 모듈도 필요합니다:

2단계. MySQL 서버 설치

MySQL은 대중적인 관계형 데이터베이스 관리 시스템입니다. 오픈 소스이며 안정적이고 기능이 풍부합니다. Django 앱의 데이터베이스 서버로 MySQL을 사용할 것입니다. APT를 사용하여 MySQL을 설치합니다:

다음으로 설치를 확인합니다:

Django Models 2

이것은 기본 옵션으로 구성된 MySQL의 최소한의 설정일 뿐입니다. 다음에서 더 자세한 가이드를 확인해 보세요: MySQL 설치 및 설정.

3단계. Django 앱 설정하기

이제 Django 앱을 생성할 준비가 되었습니다. Django에 대한 더 자세한 설명이 필요하다면 다음 튜토리얼을 참조하세요. “Ubuntu 20.04에 Django 웹 프레임워크 설치하기.”

다음으로 앱을 위한 전용 디렉터리를 생성합니다. 디렉터리 이름은 프로젝트 이름을 반영해야 합니다:

프로젝트 디렉터리 내에서 다음을 사용하여 Python 가상 환경을 생성합니다: venv 모듈:

가상 환경을 활성화합니다:

Django Models 3

다음을 사용하여 Django를 설치합니다: pip:

다음으로, 다음을 사용하여 새로운 Django 프로젝트를 생성합니다: django-admin 명령:

django-admin

Step 4. Django 앱 구성하기

Django 앱에는 모든 기본 설정이 포함되어 있습니다. 우리의 목표를 위해 몇 가지 조정이 필요합니다.

먼저 설정 파일을 편집합니다. settings.py:

그 다음, 시간대를 변경합니다:

TIME_ZONE

Django 앱 서버에 접속이 허용된 머신을 추가합니다:

ALLOWED_HOSTS

그 후, 변경 사항을 적용합니다:

Django Models 4

마지막으로 Django 웹 앱의 관리자(superuser)를 생성합니다:

python manage.py

5단계. Django 앱을 MySQL에 연결하기

MySQL에 연결하려면 Django와 호환되는 추가 Python 커넥터 라이브러리가 필요합니다. 우리는 mysqlclient.

먼저 필요한 패키지가 설치되어 있는지 확인합니다:

python3-dev

다음으로, mysqlclient:

  • 전용 데이터베이스 생성

우리 앱을 위해 전용 데이터베이스와 데이터베이스 사용자를 생성해야 합니다. MySQL 셸을 다음으로 실행합니다: root:

sudo mysql -u rootDjango 앱을 위한 전용 데이터베이스를 생성합니다:

그런 다음, Django 앱을 위한 전용 데이터베이스 사용자를 생성합니다:

마지막으로, 전용 사용자에게 전용 데이터베이스에 대한 모든 권한을 부여합니다:

GRANT ALL ON
  • Django 설정을 MySQL을 사용하도록 변경하기

이제 Django가 MySQL을 데이터베이스 서버로 사용할 수 있도록 일부 Django 설정을 수정해야 합니다. 텍스트 편집기에서 settings.py 파일을 엽니다:

스크롤을 내려 DATABASES 섹션으로 이동한 후 다음 코드를 붙여넣습니다:

DATABASES

다음으로, 필요한 데이터베이스 자격 증명이 포함되도록 MySQL 설정 파일을 편집합니다:

파일 끝에 다음 블록을 추가합니다:

Django Models 5

변경 사항을 적용하려면 MySQL을 재시작합니다:

6단계. Django 모델 생성하기

이제 Django 프로젝트 내에 새 모델을 생성할 준비가 되었습니다. 가상 환경을 활성화하세요:

이 위치에서 Django에게 새 앱을 생성하도록 지시합니다:

생성한 후, 파일 트리는 다음과 같이 보일 것입니다. 여기서 models.py 파일에는 사용자 정의 Django 모델을 위한 코드가 포함됩니다:

Django Models 6

파일의 현재 내용을 확인합니다:

cat models.py

데모를 위해, 이름이 Post인 블로그 포스트용 모델을 생성할 것입니다. 이 모델은 다음 필드들을 포함합니다:

  • title: 블로그 포스트 제목.
  • slug: 웹 페이지를 위한 유효한 URL을 저장하고 생성합니다.
  • content: 블로그 포스트 본문.
  • created_on: 포스트가 생성된 날짜.
  • author: 포스트를 작성한 사용자.

텍스트 에디터에서 models.py 파일을 엽니다:

모델에 필요한 몇 가지 API를 가져와 보겠습니다. 기본적으로 models API를 가져옵니다. 또한 다음도 필요합니다: slugify (슬러그 생성을 위한 API), User (인증을 위한 API), 그리고 reverse 더 나은 유연한 URL 생성을 위해:

다음으로, 다음이라 불리는 클래스 메서드를 추가합니다: Post. 여기에는 다음과 같은 필요한 데이터베이스 필드가 포함됩니다: title, slug, content, created_on,author:

URL 생성 및 포스트 저장 기능이 필요합니다. 이는 고유한 포스트에 매칭되는 고유한 링크를 생성하므로 중요합니다:

다음 섹션에서는 모델에 포스트를 정렬하고 웹 페이지에 표시하는 방법을 알려줍니다. 내부 클래스인 Meta를 사용하여 로직을 인코딩할 것입니다. 여기에는 데이터베이스 필드 정의와 관련이 없는 추가적인 모델 로직이 포함됩니다:

마지막으로, 이 파일에 Comment 모델의 기능이 추가됩니다. 이를 위해 Comment 클래스를 추가해야 하며, 사용되는 것은 models.Model 을 시그니처로 사용합니다. 여기에는 다음과 같은 데이터베이스 필드가 포함됩니다:

  • name: 댓글 작성자의 이름.
  • email: 댓글 작성자의 이메일 주소.
  • text: 댓글 내용 자체.
  • post: 댓글이 작성된 게시물.
  • created_on: 댓글이 작성된 시간.

코드는 다음과 같을 것입니다:

이 시점에서 우리의 models.py 파일은 다음과 같은 모습일 것입니다:

models.py

마지막으로 파일을 저장하고 편집기를 닫습니다.

7단계. Django 설정 업데이트

모델이 생성되었습니다. 하지만 모델을 작동시키려면 몇 가지 설정 파일을 수정해야 합니다. settings.py 내부에서, 우리는 다음 항목 아래에 모델을 추가해야 합니다: INSTALLED_APPS.

텍스트 편집기에서 settings.py를 엽니다:

다음 섹션 아래에 새 모듈을 등록합니다: INSTALLED_APPS:

INSTALLED_APPS

파일을 저장하고 편집기를 닫습니다.

8단계. 변경 사항 마이그레이션

이제 원하는 모델을 모두 추가했으므로, 다음 단계는 이러한 변경 사항을 적용하는 것입니다. Django가 이 스키마들을 MySQL 데이터베이스에 적용할 것입니다.

다음 명령은 필요한 모든 마이그레이션 파일을 생성합니다. 출력 결과에는 프로젝트 디렉터리 내의 모든 파일 위치가 표시됩니다.

makemigrations

다음 명령은 기존의 모든 마이그레이션을 나열합니다.

Django Models 6

다음을 제외하고 모든 마이그레이션이 표시되어 있습니다: 0001_initial (이 마이그레이션은 다음 모델의 일부로 생성되었습니다: Post댓글.

다음 명령은 Django가 마이그레이션을 수행하기 위해 어떤 SQL 쿼리를 실행할지 보여줍니다:

sample_app

이제 마이그레이션을 적용하기만 하면 됩니다. 이 마이그레이션은 변경 사항을 데이터베이스에 기록합니다:

migrate

9단계. 변경 사항 확인

변경 사항을 확인하기 위해 MySQL 데이터베이스를 살펴보겠습니다. Django 사용자로 MySQL 셸을 시작합니다:

다음으로, 현재 활성화된 데이터베이스를 Django 앱 데이터베이스로 변경합니다:

데이터베이스의 모든 테이블을 나열합니다:

마지막으로, 테이블의 내용을 확인하려면 DESCRIBE 쿼리를 사용하세요:

Django Models 7

MySQL 사용 시 Django의 제한 사항

Django 앱의 데이터베이스 서버로 MySQL을 사용할 때 몇 가지 주의해야 할 사항이 있습니다:

  • 스키마를 변경하는 프로세스 관련 트랜잭션에 대한 지원은 거의 없습니다. 즉, 마이그레이션이 실패할 경우 다른 마이그레이션을 시도하기 전에 모든 변경 사항을 수동으로 직접 되돌려야 합니다. 실패한 마이그레이션이 수행되기 전의 이전 시점으로 롤백할 수 있는 방법이 없습니다.
  • 대부분의 스키마 변경 프로세스에서 MySQL은 테이블을 완전히 다시 작성합니다. 특정 상황에서는 시간이 매우 오래 걸릴 수 있습니다. 최악의 경우, 시간 복잡도는 추가할 행의 수 또는 제거할 열의 수에 비례하게 됩니다. Django 공식 문서에 따르면, 백만 행당 1분이 소요될 수 있습니다.
  • MySQL은 열, 테이블 및 인덱스의 이름 길이에 대한 문자 수 제한을 적용합니다. 또한 모든 열과 인덱스 커버의 총 크기에도 제한이 있습니다. Django는 이 제한보다 더 높게 설정할 수 있습니다. MySQL 이외의 일부 백엔드는 Django의 더 높은 제한을 처리할 수 있습니다.

그렇기 때문에 옵션을 신중하게 따져보고 적절한 것을 선택하는 것이 강력히 권장됩니다.

마치며

이 가이드는 기존 Django 앱에 모듈을 추가하는 방법을 성공적으로 보여줍니다. 우리는 앱의 백엔드로 MySQL을 사용했습니다. 또한 모델, 마이그레이션 작동 방식, Django가 모델을 MySQL 데이터베이스 테이블로 변환하는 방법과 같은 몇 가지 핵심 Django 개념도 보여줍니다.

즐거운 컴퓨팅 되세요!

author

Hark Labs

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.