작성자 | 성창민 |
일 시 | 2024. 3.21 (목) 18:00 ~ 21:00 |
장 소 | 복지관 b128-1호 |
참가자 명단 | 임혜진, 이재영, 성창민, 김명원, 장원준 |
사 진 |
이전시간까지 앱을 생성하고 간단하게 문자열을 출력해보며 기본적인 작동방식을 익혀보았습니다.
이번 시간에는 모델에 대해서 알아보고 몇가지 기능을 구현하며 Django의 기본 요소를 추가적으로 학습해 보겠습니다.
첫 시간에 Django의 특징을 살펴보며 (1)MTV모델을 사용하고, (2)강력한 ORM기능을 제공한다는 것을 알게 되었습니다.
Django는 MTV모델에서 M(Model)인 '모델'을 이용하여 데이터베이스를 처리합니다. 보통의 경우에는 데이터베이스에서 데이터를 저장, 조회하기 위해 데이터베이스 시간에 배우는 SQL 쿼리문을 이용하기 때문에 SQL에 대해 알아야 합니다. 그러나 Django의 모델을 사용하면 이러한 SQL 쿼리문을 사용하지 않아도 데이터를 처리할 수 있습니다. 이 모델에서 장고의 특징이 잘 드러나는 것 같습니다.
ORM이란? (Object Relational Mapping)
우리가 데이터베이스 시간에 배운 것들을 떠올려 봅시다. 교수님께서는 이 쿼리문이라는 것이 개발자가 어떻게 사용하냐에 따라 성능의 차이가 어마어마하게 발생하고, 잘 알지 못하면 성능에 심각한 영향을 끼치는 경우도 있다고 말씀하셨습니다. 그러나, ORM을 사용하면 데이터베이스의 테이블을 모델화하여 사용하기 때문에 이러한 SQL의 단점이 해결됩니다.
ORM을 사용하면 개발자별로 독특한 쿼리문이 만들어질 수가 없고 또 쿼리를 잘못 작성할 가능성도 낮아지게 됩니다.
1. 모델 작성하기
파이보라는 사이트에서 사용할 모델을 만들어보겠습니다.
파이보는 질문과 답변을 할 수 있는 파이썬 게시판 서비스이므로 질문과 답변에 해당하는 데이터 모델이 있어야 합니다.
질문 모델의 속성에는
질문의 제목
질문의 내용
질문을 작선한 일시
를 넣고,
답변 모델의 속성에는
질문
답변 내용
답변을 작성한 일시
를 넣어보겠습니다.
이렇게 생각한 속성을 바탕으로 질문(Question)과 답변(Answer)에 해당되는 모델을 pybo/models.py 파일에서 정의해보겠습니다.
from django.db import models
class Question(models.Model):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
content = models.TextField()
create_date = models.DateTimeField()
Question 모델의 코드에 대해 간단히 알아보겠습니다.
제목(subject) = ( CharField - 길이제한 텍스트, max_length = 200 - 길이제한 200 )
내용(content) = ( TextField - 길이제한 없는 텍스트 )
날짜(create_date) = ( DateTimeField - 날짜, 시간)
Answer 모델은 질문이 있어야 존재할 수 있으므로, Question모델의 속성을 지니고 있어야 합니다.
따라서 ForeignKey로서 연결되어야 합니다.
질문(question) = ( ForeignKey는 Question, Question 삭제 시 같이 삭제 on_delete=models.CASCADE)
아래는 동일합니다.
이렇게 모델, 즉 데이터를 생성하고 각 데이터에 들어가야 할 속성들을 내용에 알맞게 정의해주는 파일이 model.py입니다.
앞으로 저희 프로젝트에서는 불값, 이미지 데이터 등을 받아서 데이터를 구성할 것이므로 필요한 내용에 맞게 관련 데이터를 구성할 수 있도록 관련 속성에 대해 알아보았습니다.
https://docs.djangoproject.com/en/4.0/ref/models/fields/#field-types
이렇게 모델을 생성하고 난 뒤에는 데이터베이스를 사용하는 앱들을 migrate 해주어야 합니다.
테이블을 생성하는 작업을 migrate라고 하는데, 그 전에 모델을 생성하거나 모델에 변화가 있을 경우에는
makemigrations 명령을 먼저 수행해주어야 합니다.
위 명령을 수행하면 pybo\migrations\0001_initial.py 라는 파이썬 파일이 자동으로 생성되게 됩니다.
따라서
python manage.py makemigrations
python manage.py migrate
두 명령을 차례로 실행해주어 migrate를 해주었습니다.
2. 모델 사용하기
셸을 통해 모델을 사용해보겠습니다.
질문 답변을 생성하고, 각각의 쿼리를 조회해 보는 과정을 해보았습니다.
이 부분에서 중요하다고 생각되는 부분은 필터링이었습니다.
앞으로 저희 프로젝트에 있어서도 다양한 모델을 만들고 쿼리를 사용하는 과정에서 필요한 값들만 골라 받아오기 위해서는 필터를 잘 사용해야겠다는 생각이 들었습니다.
https://docs.djangoproject.com/en/4.0/topics/db/queries/
3. Django 관리자
Django는 관리자 페이지를 제공합니다.
관리자 페이지에서 게시판을 보듯이 쿼리를 보거나 검색할 수 있어서 편리한 기능인 것 같습니다.
1) 먼저 관리자 페이지를 아무나 사용하면 안되므로, 관리자 계정을 생성합니다.
이후 url에 /admin을 붙이면 관리자 페이지로 접속할 수 있습니다.
이 페이지에 모델을 등록, 검색 기능을 추가해보겠습니다.
관리자 페이지에서 모델을 확인하고 검색이 가능해졌습니다.
Django의 기본기능을 학습하면서, 정말 다양한 상황에 쓸 수 있도록 다양한 기능을 제공하는 프레임워크라는 것을 알게 되었습니다. 앞으로 프로젝트를 진행하는 과정에서 다양한 기능들을 적재적소에 잘 사용할 수 있도록다양한 유형들에 익숙해져야겠다는 생각이 들었습니다.