데이터베이스를 모델링을 통해 table
과 field
를 만들어 원하는 데이터를 관리할 수 있습니다.
모델링은 도대체 무얼 의미하는 것일까요?
Model
DB 작업과 관련 모듈로 프로젝트 디렉토리의 models.py 파일에 클래스를 통해 작성합니다.
ORM
번역 도구라고 생각하면 좋을 것 같습니다. 우리가 만든 파이썬 언어의 코드를 MySQL이 읽을 수 있게 도와줍니다.
models.py
파일 내부에 클래스로 table
을 생성하고 field
, 데이터의 유형을 정해줄 수 있습니다
이해하기 쉽게 말하자면, models.py
는 건물을 짓기 전 설계도면인 것이죠
models.py
에 모델링을 끝냈으면, 이 도면을 전달해주어야 건물을 지을 수 있겠죠?
그 명령어를 터미널에 입력해주면 됩니다.
python manage.py makemigrations
명령어를 실행하면 어떤 사항이 변경되었고, 추가가 되었는지 확인할 수 있습니다.
이제 이 건물을 직접 지어보겠습니다.
다음 명령어를 터미널에 입력해보겠습니다.
python manage.py migrate
이제 models.py
에서 작성한 class가 데이터베이스의 테이블로 작성된 것을 확인할 수 있습니다.
table과 field는 작업 디렉토리의 migrations
라는 디렉토리에 저장이 되니 데이터베이스 터미널을 보지 않고도 확인할 수 있겠습니다.
CRUD는 create
read
update
delete
를 가리킵니다.
각각의 단어들은 데이터베이스의 데이터를 관리하는 메서드와 관련이 있겠는데요
클라이언트 (프론트엔드)가 데이와 관련된 Method
요청을 하게 되면
서버 (백엔드)에서는 그 요청을 처리하여 응답을 해줍니다.
파이썬이라는 언어로 데이터베이스와 소통하기 위해서는 일종의 번역기가 필요합니다.
그것을 ORM (Objective-relational Mapping)
이라고 부릅니다.
Models.py
파일에는 class 형태로 table
의 field
를 작성하는데요
데이터를 객체, 즉 딕셔너리 형태로 저장하게 설정을 해줍니다.
ORM 명칭에서 object가 있는 이유가 여기있었네요
이제 MySQL
이라는 데이터베이스를 활용하여 데이터를 쉽고 효율적으로 관리할 수 있겠습니다.
우선 터미널에 다음 명령어를 입력하고 Django Shell
에 접속하여 줍니다.
python manage.py shell
터미널에서 데이터와 관련된 CRUD
처리를 할 수 있습니다.
create()
데이터를 생성할 때 사용합니다.
post
요청이 들어올 때 데이터를 생성하기 위해 사용합니다.
filter() 또는 get()
데이터를 조회할 때 사용합니다.
사용자가 어떤 링크를 클릭하여 페이지를 이동하였을 때, 도메인 주소와 맞는 페이지의 정보를 응답해줄 때 사용합니다.
update()
데이터를 수정할 때 사용합니다.
post
put
요청 등 데이터를 수정하거나 덮어쓰는 요청에 반응합니다.
만약 사용자가 작성한 게시글의 내용을 바꾸면, 데이터베이스에 저장된 게시글의 내용이 수정되는 것입니다.
delete()
데이터를 삭제할 때 사용합니다.
delete
요청에 의해 데이터를 삭제할 수 있습니다.
만약 사용자가 작성한 게시글을 삭제하는 요청을 받았으면, 데이터베이스에서 그 게시글의 정보를 삭제합니다.
앞서 CRUD와 관련된 많은 메서드 일부를 확인했는데요.
데이터를 더 효율적이고 간편하게 다루기 위한 다양한 메서드가 존재합니다.
자주 사용되는 메서드입니다.
Model Method의 종류 중 일부를 소개해드리겠습니다.
all()
, filter()
, exclude()
, values()
, values_list()
get()
, create()
, count()
, exists()
, update()
, delete()
, first()
, last()
Model Method의 실행결과는 QuerySet
을 반환하는 경우가 있습니다.
QuerySet
은 데이터 타입 중 List
형태를 지닙니다.
<QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>
all()
filter()
exclude()
values()
values_list()
위의 메서드와 다르게 데이터 처리의 결과를 List가 아닌 형태로 반환하는 메서드들이 있는데요
우선 반환되는 데이터의 유형에는 아래의 유형들이 있습니다 :
<Category: Category object (1)> , 9(정수) , True(boolean) ..
create()
get()
update()
delete()
save()
exists()
get_or_create()
bulk_create()
count()
first()
last()
aggregate()
Django 프로젝트를 세팅하고 DB에 연동하는 법도 배웠겠다.
이제 데이터를 처리하고 프론트엔드와 통신에 성공하면 서버 구축이 완료되는 것 같다.
쉽게 설명하려고 작성하는 것도 참 어려운 부분인 것 같다.
Siban company 웹사이트도 다시 게시판 기능을 살려 배포를 실질적으로 해봐야겠다.