데이터 Model
- DB에 저장되는 데이터.
- 장고에서 제공하는 ORM(Object-Relational Mapping)기능을 사용하여 각 앱은 DB에 클래스 형식으로 저장한 모델 데이터를 DB의 테이블과 열, 행로 표현해줄 수 있다.
ORM(Object Relational Mapping)
객체 관계 매핑(ORM, Object-Relational Mapping)
은 데이터베이스와 객체 지향 프로그래밍 언어 간의 데이터를 변환하는 프로그래밍 기술이다.
- Mapping : 하나의 값을 다른 값으로 대응시킴
- 객체 생성
- 모델 클래스는 데이터베이스 테이블을 나타낸다.
- 해당 클래스의 속성은 테이블의 열(필드, column)를 나타내고, 인스턴스는 데이터베이스 테이블의 특정 레코드(행, row)를 나타낸다.
- 객체 지향 쿼리
SQL 대신 간결한 python 코드로 쿼리를 작성할 수 있다.
- CRUD작업
ORM은 데이터베이스에서의 기본 작업인 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete) 작업을 추상화하고 이를 객체 메서드로 제공하여 데이터 조작 코드가 더 간단하다.
Django - 데이터 모델 참고
다음은 User 앱 Model 클래스의 예제이다.
from django.db import models # # Django의 models 모듈을 models.py에 가져온다.
class UserModel(models.Model): # 'UserModel' Model 클래스는 models 모듈의 Model 클래스를 상속.
# Django의 models 모듈에서 Model 클래스를 상속 받았으니 Django의 ORM 프로그램을 사용하여 DB와 상호작용할 수 있다.
class Meta:
db_table = "my_user" # 이 Model 클래스의 db에서 테이블 명이 "my_user"이다.
username = models.CharField(max_length=20, null=False) # models 모듈을 이용한 Model 클래스 속성의 필드 타입 정의
password = models.CharField(max_length=256, null=False) # 속성을 나타내는 변수들은 db에서 열(필드, column)에 해당한다.
bio = models.CharField(max_length=256, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True) # 클라이언트가 제공한 각 속성 값들이 들어간 Model 클래스의 인스턴스는 db에서 행(row)에 해당한다.
다음은 Django에서 자주 사용되는 대표적인 Model 클래스 속성의 필드 타입에 대한 정리이다.
- CharField
CharField는 짧은 문자열을 저장하기 위한 필드
max_length 매개변수로 최대 문자열 길이를 지정해야 한다.
예: models.CharField(max_length=100)
- IntegerField:
IntegerField는 정수 값을 저장하는 데 사용된다.
예: models.IntegerField()
- FloatField:
FloatField는 부동 소수점 수를 저장하는 데 사용된다.
예: models.FloatField()
- DateField:
DateField는 날짜를 저장하는 데 사용된다.
예: models.DateField()
- TimeField:
TimeField는 시간을 저장하는 데 사용된다.
예: models.TimeField()
- DateTimeField:
DateTimeField는 날짜와 시간을 저장하는 데 사용된다.
예: models.DateTimeField()
- BooleanField:
BooleanField는 참(True) 또는 거짓(False) 값을 저장하는 필드
예: models.BooleanField(default=False)
- EmailField:
EmailField는 이메일 주소를 저장하는 데 사용된다.
입력 값이 유효한 이메일 형식이어야 한다.
예: models.EmailField(max_length=100)
- ImageField:
ImageField는 이미지 파일을 저장하는 데 사용된다.
파일 업로드 기능과 함께 사용된다.
예: models.ImageField(upload_to='images/')
- ForeignKey:
ForeignKey는 다른 모델과의 관계를 표현하는 필드
다른 모델의 인스턴스와 관련되어 있음을 나타낸다.
예: models.ForeignKey(related_name='posts', to='Author')
- ManyToManyField:
ManyToManyField는 다대다(Many-to-Many) 관계를 표현하는 필드
여러 모델 인스턴스 간의 관계를 나타낸다.
예: models.ManyToManyField(related_name='tags', to='Tag')
- SlugField:
SlugField는 URL에 사용할 수 있는 문자열을 저장하는 필드
주로 블로그 글이나 게시물의 제목을 URL 친화적인 형태로 저장할 때 사용된다.
예: models.SlugField(max_length=50, unique=True)
- AutoField:
AutoField는 자동으로 증가하는 숫자 필드
주로 데이터베이스의 기본 키(primary key)로 사용된다.