TIL 43. ikea 모델링 (django복습)

rahula·2021년 6월 20일
0

django

목록 보기
3/5

wecode 2주차에 배운 모델링과 django개념을 토대로 ikea를 모델링 및 migration해보고 배운 점들을 기록합니다.

왜?

처음에는 2주차에 배운 내용들을 복습하는 겸해서 간단하게 만들어보려고 했다. 그런데 사이트들을 둘러보니 '기존에 배운 것들로 내가 과연 만들 수 있을까?'라는 의문이 들었고, 제대로 해보기로 했다. 찾은 사이트들 중에서 고른 것은 이케아였다.

이케아는 가구들을 스스로 만들고 파는 브랜드이다보니, 다른 사이트들에 비해서 제품들에 대한 규격이 통일된 편이었다. 그래서 사이즈, 가격, 색상 등 특정 규격에 대한 제품들을 따로 볼 수 있었다. 그리고 제품들에 대한 구분이 명확하게 되어있어서, DB모델링을 하기에 적합하다고 생각했다.

모델링(ERD)

우선, 이케아의 제품들은 처음에 모든 제품에서 시작한다. 제품 안에는 가구, 텍스타일, 장식품, 주방가구(가구랑 주방가구를 왜 나눠놓은지는 모르겠다. 특정 고객층을 노리는 분류방법이지 않을까.)

일대다 종속관계는 쉽게 만든 것 같다. '제품군>제품카테고리>서브카테고리>제품'식으로 분류가 되어있어서, 그대로 모델링을 했다.

문제는 제품의 모델링이었다.

이 부분만 보면 쉬워보인다. 이름, 한글이름, 가격, 이미지url, 설명. 이미지 url은 일대다 관계로 만들면 충분했고, 나머지는 제품의 column으로 만들어주면 된다. 그러나 자세히 보면 생각보다 복잡한 게 많았다.

색상과 재고매장은 다대다관계였다. 다른 제품들에도 해당 색상들이 있으므로, 색상쪽에서도 여러 제품 테이블을 갖기 때문이다. 또한 재고 섹션에서, 제품들을 보관하는 매장들이 다른 제품들도 보관하기 때문이다.

그래서 다대다관계의 테이블 사이에는 중간 테이블을 만들었고, 추가로 재고쪽 중간테이블은 해당 매장에 재고가 있는지 유무를 is_exist라는 column으로 만들었다.

모델

초기 설정

우선 모델에 대한 migration을 만들려면, 당연히 프로젝트의 settings.py에서 해당 앱을 추가하고 데이터베이스 관련 설정을 해야 한다.

DATABASES에 내 데이터베이스의 엔진(mysql), 이름, 사용자, 비밀번호, 호스트, 포트번호를 넣는다.
INSTALLED_APPS에서 내 앱을 추가한다.

models.py

models.py에서, 만들고 싶은 각각의 테이블에 대한 모델을 만든다.

class Meta는 django에게 해당 테이블에 대한 메타데이터를 전달하는 class이다. 나는 테이블의 이름을 여기서 결정했다.
__str__함수는 django shell에서 각 모델의 instance를 볼 때 이름을 볼 수 있도록 해주는 함수.

migration

python manage.py makemigrationMigration폴더를 만든다. 이 폴더의 initial 파일은 migrate를 할 때 테이블을 어떤 짜임새로 만들어야 하는지를 django ORM에게 상세하게 알려주는 역할을 한다.

python manage.py migrate

내가 만든 앱의 모델들뿐만 아니라, INSTALLED_APPS에 있던 모든 항목의 model들에 대해서 모두 migration이 진행된다.

아무튼 모델에 맞게 정상적으로 테이블들이 생성됐다.

django shell과 QuerySet

사이트의 내용 그대로 값 넣으면 끝.

생각과 질문

모델링을 하면서, 생각보다 모델링에 대한 이해가 부족하다는 걸 깨달았다. 특히 테이블들의 관계를 어떻게 짜야할지가 어려웠다. 일대다 관계와 다대다관계가 서로 헷갈리기도 했다.

또한 정확하게 딱 떨어지지 않는 구조가 있었다. 테이블로 따로 분리하기에는 중복이 생기고, 그렇다고 테이블로 분리하기에는 너무 구조가 복잡해졌다.
어떤 사이트(제품)의 데이터베이스 구조를 짤 때 실무에서 정말 어떤 부분을 중요시하는지가 궁금해진다.

미가공 데이터들로부터 우리는 정보를, 그 다음에 의미를 창출해낸다.

모델링도 마찬가지인 듯 하다. 미가공된 데이터들(이케아는 가공되어있지만)을 내 목적에 맞게 가공해서 의미를 만들어내는 것이 ERD와 모델링의 역할이다.

profile
백엔드 지망 대학생

0개의 댓글