질문 _ 중간부터 이해안감

HY_1023·2026년 3월 13일

MENTOS

목록 보기
4/19
post-thumbnail

먼저 데이터 구조를 생각해보기
이제 화면을 만들기 전에 먼저 생각해야 하는 것이 있습니다.

우리가 무엇을 저장할 것인가?

Django는 데이터 중심 프레임워크이기 때문에, 페이지보다 먼저 모델 설계를 생각하는 습관이 중요합니다.

이번 공부시간 기록기에서는 아래 정보를 저장해보겠습니다.

왜 모델을 먼저 생각해야 할까?
모델이 정해지면:

DB 구조가 정해지고
admin 화면 구조가 정해지고
Form 구조가 정해지고
나중에 Serializer 구조도 정해집니다.
즉 Django에서는 아래 사고 흐름이 중요합니다.


헷갈린부분 클로드 물어본 정보_ 각각의 구조가 정해진다?

https://velog.io/@hy_1023/%EA%B0%81%EA%B0%81%EC%9D%98-%EB%B6%84%EC%95%BC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B5%AC%EC%A1%B0%EB%93%A4%EC%9D%B4-%EC%83%81%ED%99%A9%EB%A7%88%EB%8B%A4-%EB%8B%AC%EB%9D%BC%EC%A7%80%EB%8B%88


## Django 모델 구조 완전 설명

---

## 1️⃣ 맨 위 - Django로부터 모델 불러오기
```python
from django.db import models

이유

Django가 만들어놓은
모델 기능을 가져오는 것!

models.CharField
models.IntegerField
models.DateField
→ 이것들을 쓰려면
  반드시 import 해야 함!

2️⃣ 클래스 선언

class Study(models.Model):
         ↑         ↑
      내가 만든   Django Model을
      테이블명    상속받음

이유

models.Model 을 상속받아야
Django의 모든 DB 기능을
자동으로 사용 가능!

상속 안하면? ❌
→ save() 없음
→ delete() 없음
→ DB 연결 안됨

3️⃣ 필드 정의

class Study(models.Model):
    title      = models.CharField(max_length=200)
    study_date = models.DateField()
    hours      = models.PositiveIntegerField()

이유

DB 테이블의 컬럼을 정의하는 곳!

title      → DB에 title 컬럼 생성
study_date → DB에 study_date 컬럼 생성
hours      → DB에 hours 컬럼 생성

4️⃣ class Meta - 역할

class Meta:
    ordering            = ['-study_date']
    verbose_name        = '공부 기록'
    verbose_name_plural = '공부 기록들'

한 마디로

"테이블 자체에 대한 설정"
필드가 컬럼 설정이라면
Meta는 테이블 전체 설정!

Meta 세부 역할

class Meta:
    # 1. 정렬 순서
    ordering = ['-study_date']
    # → 조회할때 항상 최신날짜순 자동정렬
    # → 없으면 매번 .order_by() 써야함 ❌

    # 2. Admin 이름 (단수)
    verbose_name = '공부 기록'
    # → Admin에서 "공부 기록 추가" ✅
    # → 없으면 "Study 추가" ❌

    # 3. Admin 이름 (복수)
    verbose_name_plural = '공부 기록들'
    # → Admin에서 "공부 기록들 목록" ✅
    # → 없으면 "Studys 목록" ❌ (영어 복수 오류)

    # 4. DB 테이블명 지정
    db_table = 'my_study'
    # → 없으면 자동으로 앱이름_클래스명

    # 5. 인덱스 (검색 속도)
    indexes = [
        models.Index(fields=['title'])
    ]

5️⃣ str 과 @property - 써도 안써도 되나?

str

def __str__(self):
    return f'{self.title} ({self.study_date})'
✅ 안써도 에러는 안남
❌ 없으면 불편함!

없을때 Admin 목록
→ Study object (1)
→ Study object (2)
→ Study object (3)
# 뭐가 뭔지 모름! ❌

있을때 Admin 목록
→ Django 공부 (2024-03-13)
→ Python 공부 (2024-03-12)
→ 알고리즘 (2024-03-11)
# 한눈에 보임! ✅

@property

@property
def total_minutes(self):
    return self.hours * 60 + self.minutes
✅ 완전히 선택사항!
✅ 없어도 에러 없음
✅ 없어도 동작함

# 대신 없으면 매번 직접 계산해야 함
study.hours * 60 + study.minutes  # ❌ 매번 반복

# 있으면 편하게 사용
study.total_minutes  # ✅ 한번만 정의하고 계속 사용

전체 구조 요약

from django.db import models   → 필수! ✅ (없으면 에러)
         ↓
class Study(models.Model):     → 필수! ✅ (없으면 에러)
         ↓
    필드 정의                   → 필수! ✅ (없으면 테이블 의미없음)
         ↓
    class Meta                 → 선택! (없어도 동작하지만 불편)
         ↓
    def __str__                → 선택! (없어도 동작하지만 불편)
         ↓
    @property                  → 선택! (편의기능)
구성요소필수여부없으면?
from django.db import models✅ 필수에러 발생
class Study(models.Model)✅ 필수에러 발생
필드 정의✅ 필수저장할 데이터 없음
class Meta🔺 권장정렬/이름 수동 설정
__str__🔺 권장Admin에서 불편
@property⚪ 선택매번 직접 계산

💡 __str__ 은 선택이지만
거의 모든 Django 개발자가 필수처럼 작성해요!
Admin에서 데이터 확인할 때
없으면 너무 불편하거든요! 😅

--------


두가지왜? 확인해야하나? 

프로젝트 루트에 db.sqlite3 파일이 생겼는지
study/migrations/ 폴더에 migration 파일이 생겼는지


-----



profile
개발언어를 배우는 과정 기록

0개의 댓글