Django Models 기초: 데이터베이스 구조를 쉽게 이해하는 완벽 가이드

안녕하세요, 여러분! 오늘은 Django models 기초적 내용에 대해 알아볼 거예요. 처음 Django를 접하셨을 때, models라는 개념이 조금 낯설고 어렵게 느껴지셨나요? 저도 그랬답니다. 하지만 걱정 마세요! 이 포스트를 통해 Django models의 기초와 데이터베이스 구조를 완벽하게 이해하실 수 있을 거예요.

Django models는 데이터베이스 설계의 핵심이에요. 복잡한 SQL 쿼리 없이도 파이썬 코드만으로 데이터베이스를 다룰 수 있게 해주는 마법 같은 도구죠. 이 포스트에서는 Django models의 기본 개념부터 실제 코드 예시까지, 여러분이 꼭 알아야 할 모든 내용을 다룰 거예요. 자, 그럼 시작해볼까요?

Django Models란 무엇인가요?

Django models는 데이터베이스 구조를 파이썬 클래스로 표현한 것이에요. 각 모델은 데이터베이스의 테이블에 대응되며, 모델의 속성은 테이블의 필드가 됩니다. Django는 이 모델을 통해 데이터베이스 작업을 추상화하여 개발자가 더 쉽게 데이터를 다룰 수 있게 해줘요.

테이터베이스 구조(테이블과 필드)


데이터베이스 테이블은 엑셀 파일의 한 시트와 비슷합니다. 엑셀 시트에는 여러 행(row)과 열(column)이 있죠? 테이블도 마찬가지로 데이터가 행(레코드)과 열(필드)로 구성되어 있습니다.
– 행(Row): 한 개의 데이터를 나타냅니다. 예) 고객 테이블에서 한 행은 한 고객의 정보
– 열(Column): 데이터의 속성을 나타냅니다. 예) 고객의 이름, 이메일, 전화번호

필드는 테이블 안에서 데이터를 담는 각각의 열입니다. 즉, 하나의 필드는 특정 데이터의 속성이나 특징을 저장합니다. 예를 들어, 고객 테이블을 만든다면 ID, 이름, 이메일, 전화번호 등의 이런 필드들이 필요하겠죠?

Django Models 기초: 첫 번째 모델 만들기

Django models 기초 참고 이미지
( Django models 기초 참고 이미지 – 클래스와 테이블 )

자, 이제 실제로 Django models를 만들어볼까요? 아래 코드를 한번 봐주세요. 이 코드는 ‘Book’이라는 모델을 생성하여 도서 정보(첵 제목, 저자, 출판일, 도서가격)를 저장하고 관리하기 위한 구조를 만듭니다

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()
    price = models.DecimalField(max_digits=6, decimal_places=2)

    def __str__(self):
        return self.title

코드 해설

  1. from django.db import models: Django의 모델 기능을 사용하기 위해 import 합니다.
  2. class Book(models.Model): ‘Book’이라는 이름의 모델 클래스를 정의합니다. models.Model상속받아요.
  3. title = models.CharField(max_length=200): 책 제목을 저장할 문자열 필드를 정의합니다. 최대 200자까지 저장 가능해요.
  4. author = models.CharField(max_length=100): 저자 이름을 저장할 필드입니다. 최대 100자까지 가능해요.
  5. publication_date = models.DateField(): 출판일을 저장할 날짜 필드입니다.
  6. price = models.DecimalField(max_digits=6, decimal_places=2): 가격을 저장할 소수점 필드입니다. 최대 6자리, 소수점 이하 2자리까지 저장 가능해요.
  7. def __str__(self):: 이 메서드는 모델의 인스턴스를 문자열로 표현할 때 사용됩니다. 여기서는 책 제목을 반환하도록 했어요.

이렇게 하면 기본적인 Django models가 완성됩니다! 복잡해 보이지만 하나씩 따져보니 그렇게 어렵지만은 않죠? 이해가 안되면 어떻게 한다? 일단 이런게 있구나 하고 넘어가시고 그러다 보면 자연스럽게 알게 되는게 이 바닥입니다.

Django Models와 데이터베이스 구조 이해

Django models를 사용하면 데이터베이스 구조를 쉽게 정의할 수 있어요. 위의 Book 모델은 실제로 데이터베이스에 다음과 같은 테이블을 생성합니다.

CREATE TABLE "books_book" (
    "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
    "title" varchar(200) NOT NULL,
    "author" varchar(100) NOT NULL,
    "publication_date" date NOT NULL,
    "price" decimal(6, 2) NOT NULL
);

코드 해설

SQL 코드는 앞서 본 Django 모델을 데이터베이스 테이블로 변환한 것입니다. 이 코드는 ‘books_book’이라는 테이블을 생성하는 SQL 명령입니다.

  1. 테이블 이름: “books_book”
    • Django는 기본적으로 앱 이름과 모델 이름을 조합하여 테이블 이름을 만듭니다. 여기서는 ‘books’ 앱의 ‘Book’ 모델을 의미합니다.
  2. 필드 정의
    • “id”: 정수형(integer) 필드로, 주키(PRIMARY KEY)이며 자동 증가(AUTOINCREMENT) 속성을 가집니다.
    • “title”: 최대 200자의 가변 길이 문자열(varchar) 필드입니다.
    • “author”: 최대 100자의 가변 길이 문자열 필드입니다.
    • “publication_date”: 날짜(date) 타입 필드입니다.
    • “price”: 소수점 이하 2자리를 포함한 최대 6자리의 십진수(decimal) 필드입니다.
  3. 제약 조건:
    • 모든 필드에 NOT NULL 제약 조건이 있어 null 값을 허용하지 않습니다.

보시다시피, Django models는 파이썬 코드를 SQL로 자동 변환해줘요. 이게 바로 Django ORM(Object-Relational Mapping)의 마법이랍니다!

Django Models 기초: 관계 설정하기

( Django models 기초 참고 이미지 – 관계설정하기 )

데이터베이스에서 가장 중요한 개념 중 하나가 바로 ‘관계’예요. Django models에서도 이런 관계를 쉽게 표현할 수 있답니다.

class Publisher(models.Model):
    name = models.CharField(max_length=200)
    address = models.CharField(max_length=200)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey('Author', on_delete=models.CASCADE)
    publisher = models.ForeignKey(Publisher, on_delete=models.SET_NULL, null=True)
    genres = models.ManyToManyField('Genre')

코드 해설

  1. author = models.ForeignKey('Author', on_delete=models.CASCADE): 이건 일대다(1:N) 관계를 나타내요. 한 저자가 여러 책을 쓸 수 있죠. on_delete=models.CASCADE는 저자가 삭제되면 그 저자의 모든 책도 삭제된다는 뜻이에요.
  2. publisher = models.ForeignKey(Publisher, on_delete=models.SET_NULL, null=True): 이것도 일대다 관계예요. 하나의 출판사가 여러 책을 출판할 수 있죠. on_delete=models.SET_NULL은 출판사가 삭제되면 해당 책의 출판사 필드를 NULL로 설정한다(True)는 뜻이에요.
  3. genres = models.ManyToManyField('Genre'): 이건 다대다(N:N) 관계를 나타내요. 한 책이 여러 장르에 속할 수 있고, 한 장르에 여러 책이 속할 수 있죠.

이렇게 Django models를 사용하면 복잡한 데이터베이스 관계도 쉽게 표현할 수 있어요.

Django Models 기초: 데이터베이스 마이그레이션

Django models 기초 참고 이미지 - 데이터베이스 마이그레이션
( Django models 기초 참고 이미지 – 데이터베이스 마이그레이션 )

모델을 만들었다고 해서 바로 데이터베이스에 반영되는 건 아니에요. Django에서는 ‘마이그레이션’이라는 과정을 통해 모델의 변경사항을 데이터베이스에 적용합니다.

python manage.py makemigrations
python manage.py migrate

이 두 명령어만으로 여러분의 모델이 실제 데이터베이스 테이블로 만들어집니다. 정말 편리하죠?

마무리

자, 여기까지 Django models 기초와 데이터베이스 구조 이해에 대해 알아봤어요. 어떠셨나요? 처음에는 조금 복잡해 보일 수 있지만, 하나씩 이해하다 보면 정말 강력하고 편리한 도구라는 걸 느끼실 거예요. Django models를 잘 활용하면, 복잡한 데이터베이스 작업도 정말 쉽게 할 수 있답니다.

여러분도 이제 Django models의 기초를 배우셨으니, 직접 모델을 만들어보는 건 어떨까요? 실제로 코드를 작성하고 실행해보면서 더 깊이 이해할 수 있을 거예요. 모두 화이팅! 하시죠~

초보자를 위한 용어 해설

  • ORM: Object-Relational Mapping의 약자로, 객체와 관계형 데이터베이스를 연결해주는 기술이에요.
  • 마이그레이션: 모델의 변경사항을 데이터베이스 스키마에 반영하는 Django의 방식이에요.
  • 필드: 모델의 속성을 나타내며, 데이터베이스의 컬럼에 해당해요.
  • 외래 키(Foreign Key): 다른 테이블의 기본 키를 참조하는 필드예요. 일대다 관계를 표현할 때 사용해요.
  • 다대다 관계(Many-to-Many): 양쪽 모델이 서로 여러 개의 관계를 가질 수 있는 경우를 말해요.

유사한 게시물