5편 — 모델 = AI가 만든 표(테이블)의 실체 - 테크창
프로그래밍

5편 — 모델 = AI가 만든 표(테이블)의 실체

조회 0회
댓글 0개
0
📚 연재 시리즈 AI가 짜준 Django, 이제 알고 씁니다 6 / 6

🎬 지난 이야기

4편에서는 View가 넘겨준 데이터가 템플릿 HTML 안에 {{ }}{% %}를 통해 꽂히는 원리를 살펴봤습니다. URL 안내판 → 담당자(View) → 꾸미기(Template)로 이어지는 흐름이 이제 머릿속에 자리잡혔을 거예요. 그런데 View가 DB에서 데이터를 "꺼낸다"고 했는데, 그 데이터는 애초에 어디서, 어떻게 생겨난 걸까요? 오늘은 바로 그 시작점을 뜯어봅니다.


혹시 이런 경험 있으신가요? AI한테 "질문을 저장하는 기능 만들어줘"라고 했더니, models.py라는 파일에 클래스가 뚝딱 생겼습니다. 그런데 이상한 거예요. 분명히 데이터베이스에 뭔가 저장된다고 했는데, 파이썬 코드에 클래스만 있고 SQL은 한 줄도 안 보이는 겁니다. "이게 진짜 DB에 저장되는 거 맞아?" 싶었던 분, 오늘 이 코드의 정체를 확인해 보시죠.


🤖 AI가 짜준 코드

프롬프트: "Django로 투표 사이트 만들어줘. 질문과 작성 날짜를 저장해야 해."

# polls/models.py

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField("date published")

    def __str__(self):
        return self.question_text

딱 7줄. 근데 이게 데이터베이스 테이블 하나를 통째로 정의합니다. 어떻게요? 지금부터 한 줄씩 뜯어볼게요.


🔍 한 줄씩 통역

class Question(models.Model):

클래스를 선언하는 파이썬 문법인 건 아실 텐데, 괄호 안의 models.Model이 핵심입니다. 이건 "나는 그냥 파이썬 클래스가 아니라, Django가 관리하는 DB 테이블이야"라고 신고하는 행위입니다. 비유하자면, 일반 직원이 아니라 DB팀 소속으로 발령받는 것이죠. models.Model을 상속받는 순간, Django는 이 클래스를 보고 "아, 얘 테이블로 만들어야겠다"고 인식합니다.

question_text = models.CharField(max_length=200)

엑셀로 치면 열(컬럼)을 하나 정의하는 것입니다. CharField는 "글자를 담는 칸", max_length=200은 "최대 200자까지"라는 제한입니다. 한 줄이 곧 테이블의 컬럼 하나예요.

파이썬 코드 DB 테이블로 치면
models.CharField 문자 타입 컬럼
models.DateTimeField 날짜+시간 타입 컬럼
max_length=200 컬럼 글자 수 제한

pub_date = models.DateTimeField("date published")

날짜와 시간을 저장하는 컬럼입니다. 따옴표 안의 "date published"관리자 화면에서 이 칸에 붙는 이름표예요. DB 구조 자체와는 무관하게, 사람이 읽기 좋으라고 붙여두는 라벨입니다.

def __str__(self):

이건 DB와 직접 관계는 없습니다. Python 객체를 문자로 출력할 때 무엇을 보여줄지 정하는 메서드입니다. 이게 없으면 Django 관리자 화면에서 질문 목록이 Question object (1), Question object (2) 이런 식으로 나와 뭐가 뭔지 알 수가 없어요. 있으면 질문 내용 텍스트가 그대로 뜹니다. 일종의 이름표 스티커입니다.


⚠️ 자주 깨지는 지점

에러 ①: 모델 만들고 서버 켰더니 테이블이 없다고 난리

django.db.utils.OperationalError: no such table: polls_question

모델 클래스를 작성했다고 테이블이 자동으로 생기지 않습니다. 설계도를 그렸다고 건물이 지어지는 건 아닌 것처럼요. 아래 두 명령을 순서대로 실행해야 비로소 실제 DB에 테이블이 만들어집니다.

python manage.py makemigrations   # 설계도(변경 내역)를 파일로 저장
python manage.py migrate          # 그 설계도로 실제 DB를 변경

에러 ②: max_length 빠뜨리기

TypeError: __init__() missing 1 required keyword argument: 'max_length'

CharField는 반드시 max_length가 있어야 합니다. AI가 짜줄 때는 잘 넣어주는데, 직접 컬럼을 추가할 때 깜빡하는 경우가 많아요. CharField를 쓸 때는 항상 max_length=숫자를 세트로 기억하세요.


🎮 직접 해보기

Django 공식 튜토리얼의 polls 앱 기준으로 따라해 보세요.

  1. polls/models.py에 위 코드를 입력합니다.
  2. python manage.py makemigrations polls 실행 후, polls/migrations/ 폴더 안에 0001_initial.py 파일이 생겼는지 확인하세요.
  3. 그 파일을 열어보면 SQL 없이 파이썬으로 적힌 테이블 설계도가 보입니다. "Django가 내 클래스를 이렇게 해석했구나!" 하고 눈으로 확인해 보는 게 이번 미션입니다.

파일이 생기지 않거나 내용이 이상하다면, 테크창 Q&A 게시판에 에러 메시지와 함께 질문해 주세요!


⏭️ 다음 편 예고

모델로 테이블을 만들었으니 이제 데이터를 넣고 꺼내야 하는데, Django는 SQL 한 줄 없이 파이썬 코드만으로 그걸 해냅니다. 다음 편에서는 Question.objects.all()이 도대체 어떻게 DB를 건드리는지, ORM의 정체를 통역해 드립니다.


📚 시리즈: AI가 짜준 Django, 이제 알고 씁니다 · 5편 (총 9편 중)
테크창 연구팀 | 인천대학교 창의인재개발학과 전공심화연구모임
본 칼럼은 AI 보조로 작성되었으며, 코드·예시는 학습용입니다.

T
techchang연구팀
시리즈 목차 전체 보기

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

댓글을 작성하려면 로그인해주세요

로그인
모바일 버전