드디어 Django 모델 생성 완료!

bangina·2020년 9월 23일
2

프로젝트

목록 보기
8/8

백엔드는 맛만 봐야지 했는데 아주 쓴맛을 봐 버렸네

진행중인 요가/필라테스 예약앱 프로젝트 요가요 🧘‍♀️ 의 프론트가 점점 완성이 되어가고 있다.

그래서 "자! 이제 API를 한번 만들어볼까나~!" 하고 Django를 펼쳤다.

.....장고 쉽다매..... 초장에 User모델 생성부터 호되게 쓴맛을 봤다. 그리고 우여곡절 끝에 모델을 어찌저찌 짜냈다. (다른 프레임워크에 비해서 장고가 쉬운 편이란건 알지만 그래도 어려웠다고요ㅠㅠ)

참 길었던 어제의 몸부림을 기억하고자 써보는 포스팅..


🤯 데이터모델링부터 장고 모델 생성까지

| 🏋️‍♀️ ER 다이어그램을 그려보자

ER 다이어그램 그리는 건 사실 저번 주에 해놨다. 생활코딩이랑 데이터베이스 책 보면서 몇 번을 그렸다 지웠다 했는지 모르겠다. 뚝딱뚝딱 그려내고 싶었지만 디비 개념이 없는 상태라 (의도치 않게?)FM대로 요구사항 정의서 작성부터 개념적&논리적 모델링까지 단계별로 작성해나갔다.

하면서 이거 맞나? 이게 맞아? 읭스러운 순간이 한둘이 아니었다만 어찌저찌 ER 다이어그램까지 그리고 강사님 컨펌 받았을 때는 매우매우 감격스러웠다. 짝궁 우리 수고 많았다 그치?


(다이어그램에는 비식별 관계로 되어있지만 실제 장고에는 식별관계로 생성했다)


| 🤸‍♀️ Django inspectDb로 모델 뽑아내기

ER 다이어그램에서 만들어준 쿼리문이 아까워서 django model로 변환해주는 사이트나 서비스가 없을까 찾아봤는데 아니나 다를까 장고에 inspectdb라는 명령어가 딱 있었다.

$python manage.py inspectdb

inspectdb보통 기존 레거시 DB를 장고로 옮길 때 많이 쓰이는 명령어인데 이번에 유용하게 잘 써먹었다. 장고가 뽑아준 model 모듈에다 제약조건 추가해서 사용하니 models.py 작성하는 시간이 많이 절약됐다. 여기까지는 장고가 도와줘서 좀 신이 났었다

👉 참고한 자료
기존 데이터베이스를 장고 모델로 옮길 수 있나요?


| 🧗‍♀️ AbstractBaseUser로 User모델 확장하기

한 가지 큰 난관이 우리를 기다리고 있었으니.. 바로 User 모델...

장고는 자체적으로 제공하는 User 모델 에 Authentication부터 permission 관리까지 다 내장되어 있어서 요걸 가져다 쓰기만 하면 세상 편하다(~고 한다).

다만! 우리는 디폴트로 username을 인증에 사용하는 User모델과 달리 email로 인증을 해야 하고, 추가해야 할 필드도 있어서 그 편하다는 User모델을 그대로 사용할 수 없었다. 😇

따라서 User모델을 확장해서 쓸 수 있는 방법을 찾아야 했고, 기존 필드를 상속받아 수정할 수 있고 추가 필드도 붙일 수 있는 AbstractBaseUser로 유저모델을 확장 생성했다.

말은 쉬운데 이 부분이 진짜 오래 걸렸다. 처음에는 AbstractUser로 구현했다가 email 인증으로 변경이 안 된다는 것을 나중에 깨닫고~ 싹 밀어버린 뒤 AbstractBaseUser로 다시 구현했다. 😃


| 🤼‍♀️ 다중 유저 유형 Proxy model로 구현

산넘어 산이라고.. yogayo는 유저 타입이 2가지(요가회원, 요가센터)가 존재하는데 각각 다른 테이블과 관계를 맺고 있으며 가져야 할 권한도 달랐다. 또 폭풍 구글링으로 찾아보니 이런 경우 유저 타입 필드를 추가해서 유저타입별로 관리를 해야 하는데! 구현하는 방법이 여러가지였다. 몇 가지 있었는데 하루만에 까먹..

무튼 여러 방법 중에서 실제 테이블을 생성하지 않는 proxy model을 선택하여 두 가지 유저 유형을 구분 관리해주기로 했다. 지나고 나서 글로 정리하니까 이렇게 짧은데.. 이 자료 저 자료 찾아보면서 동공지진이 수십번도 더 났던 것 같다 🥺 모델 만들었다 지웠다 flush도 참 많이 했지..

참고한 자료


| 🎭 결과물

우여곡절 끝에 유저모델을 생성하긴 했다.

그런데 과연 이게 제대로 된건지 눈으로 보이지가 않아서 답답 🤯 🤯 🤯
그래서 또 이런저런 키워드로 구글링을 하니 스키마를 시각화해주는 확장툴이 존재...!참 세상에 센스있는 사람들 많다.

아래는 완성한 모델의 스키마 구조도!

시각화 툴 중에 schema_graph 라는 확장기능을 사용했다.
요가회원(GenUser)과 요가센터(AdminUser)모델이 각각 다른 테이블과 관계를 잘 맺고 있는 아름다운 모습...🥰

이제 더 이상의 매운맛 떫은맛 쓴맛은 없을 거라는 희망을 가지고 API를 완성해보자!!!!!

profile
🥨 UX, Graphic에 관심이 많은 주니어 프론트엔드 개발자. 이모지 Lover 💘

1개의 댓글

comment-user-thumbnail
2020년 9월 24일

대천재

답글 달기