본문 바로가기
Web Backend/Django

[Django] Django 학습 정리 - Model 정의 및 Migration

by 요호유후 2025. 3. 28.
반응형

 

지금까지 Django 학습한 내용을 바탕으로 정리를 해보려 한다.

 

목차
1. Django MTV 패턴
2. Model 정의
3. Migration
[작업 환경]
MacOS, PyCharm
pyenv, poetry
Python, Django

 

 

1. Django MTV 패턴

1. MVC 패턴 및 MTV 패턴

📌 MVC 패턴
디자인 패턴 중 하나로 Model, View, Controller로 구분되는 패턴이다.
  - Model : 데이터를 처리하는 역할을 한다.
  - View : 사용자 인터페이스(UI)를 나타내며 데이터의 시각적 표현을 담당한다.
  - Controller : 사용자 요청을 처리하고 Model과 View를 이어주는 역할을 한다.

📌 MTV 패턴
장고 디자인 패턴이다. Model, Template, View로 구분되는 패턴이다.
  - Model : MVC패턴의 Model과 상응하며, 데이터 처리하는 역할을 한다.
  - Template : MVC패턴의 View와 상응하며, 사용자 인터페이스(UI)를 나타내며 데이터의 시각적 표현을 담당한다.
  - View : MVC패턴의 Controller와 상응하며, 사용자 요청을 처리하고 Model과 Template을 이어주는 역할을 한다.

 

 

2. Model 정의

1. 데이터베이스 모델 정의하기

1-1. 설계단계
   - 프로젝트 전반의 기능을 파악하고 필요한 앱들을 나눈다.
   - 각 앱에서 필요한 데이터를 도출한다.
   - 테이블 간의 관계 및 필드 구성을 정의한다.

1-2. 모델 작성 단계
   - 설계한 내용을 바탕으로 <앱이름>/models.py 에  모델 클래스를 정의한다.
   - 필드의 데이터타입, 옵션, 관계 등을 작성한다.

 

   ⭐️ User/Post 예시 코드

class User(AbstractUser): # Django 기본 User 모델을 확장 함 (커스텀 유저 모델)
    email = models.EmailField(  # 이메일 : 관리자페이지이름(email), 중복불가, 로그인 ID로 사용
        verbose_name='email',
        unique=True
    )
    is_active = models.BooleanField(default=False) # 계정 활성화 여부 : 기본값(비활성화)
    is_admin = models.BooleanField(default=False)  # 관리자 여부 : 기본값(비활성화)
    nickname = models.CharField('nickname', max_length=20, unique=True) # 닉네임 : 20자 제한, 중복 불가
    
class PostImage(TimestampModel):
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='images')
    # 게시글 : 외래키(FK), 연결대상(Post), 부모 삭제 시 자식도 함께 삭제(CASCADE) 역참조 이름('images')
    
    image = models.ImageField('이미지', upload_to='post/%Y/%m/%d')
    # 이미지 : 이미지 필드, 업로드경로('media/post/년/월/일' 형식으로 저장)

 

2. 각 필드별 특징

필드(Field) 설명 주요 옵션
CharField 짧은 문자열
제목 등에 사용 됨
max_length(글자 수 제한, 필수옵션),
blank(폼 입력 생략 가능),
null(DB에서 null 허용), default(기본값 설정)
TextField 긴 텍스트 필드
(길이제한 없음)
blank, null, default
IntegerField 정수값 blank, null, default, validators
FloatField 실수값 blank, null, default
BooleanField True/False default
DateField 날짜 auto_now(수정 시 자동 갱신),
auto_now_add(최초 생성 시 자동 입력),
blank, null
DateTimeField 날짜 + 시간 auto_now, auto_now_add, blank, null
EmailField 이메일 형식 max_length, unique, blank, null
ImageField 이미지 파일 upload_to(저장 경로, 'media/' 하위 경로), blank, null
FileField 일반 파일 upload_to, blank, null
ForeignKey 1:N 관계 to, on_delete(삭제 시 처리 방법),
related_name(역참조 이름), null
OneToOneField 1:1 관계 to(연결할 모델), on_delete, related_name, null
ManyToManyField N:N 관계 to, related_name, blank

 

 

 

3. Migration

1. migration, migrate

📌 migration : 모델(models.py)에서 변경된 내용을 감지해서 마이그레이션파일을 생성
📌 migrate : 생성된 마이그레이션 파일을 실행해서 실제 DB에 반영

 

2. 모델 변경과 마이그레이션

⭐️ model.py 코드 수정 시 꼭 migration, migrate를 해야한다.
    🤔 어떤 수정? 테이블, 필드 추가/변경/삭제 등 모델 정의 변경 시

[작업순서]
- models.py 수정 → migration(마이그레이션파일 생성) → migrate(DB에 반영) 순서로 진행된다.

[터미널 명령어]
 📌 마이그레이션파일 생성 : python manage.py makemigrations
 📌 DB에 반영 : python manage.py migrate

migrations 실행

 

 

반응형

댓글