백엔드는 맛만 봐야지 했는데 아주 쓴맛을 봐 버렸네
진행중인 요가/필라테스 예약앱 프로젝트 요가요
🧘♀️ 의 프론트가 점점 완성이 되어가고 있다.
그래서 "자! 이제 API를 한번 만들어볼까나~!" 하고 Django를 펼쳤다.
.....장고 쉽다매..... 초장에 User모델 생성부터 호되게 쓴맛을 봤다. 그리고 우여곡절 끝에 모델을 어찌저찌 짜냈다. (다른 프레임워크에 비해서 장고가 쉬운 편이란건 알지만 그래도 어려웠다고요ㅠㅠ)
참 길었던 어제의 몸부림을 기억하고자 써보는 포스팅..
ER 다이어그램 그리는 건 사실 저번 주에 해놨다. 생활코딩이랑 데이터베이스 책 보면서 몇 번을 그렸다 지웠다 했는지 모르겠다. 뚝딱뚝딱 그려내고 싶었지만 디비 개념이 없는 상태라 (의도치 않게?)FM대로 요구사항 정의서 작성부터 개념적&논리적 모델링까지 단계별로 작성해나갔다.
하면서 이거 맞나? 이게 맞아? 읭스러운 순간이 한둘이 아니었다만 어찌저찌 ER 다이어그램까지 그리고 강사님 컨펌 받았을 때는 매우매우 감격스러웠다. 짝궁 우리 수고 많았다 그치?
(다이어그램에는 비식별 관계로 되어있지만 실제 장고에는 식별관계로 생성했다)
ER 다이어그램에서 만들어준 쿼리문이 아까워서 django model로 변환해주는 사이트나 서비스가 없을까 찾아봤는데 아니나 다를까 장고에 inspectdb
라는 명령어가 딱 있었다.
$python manage.py inspectdb
inspectdb
는 보통 기존 레거시 DB를 장고로 옮길 때 많이 쓰이는 명령어인데 이번에 유용하게 잘 써먹었다. 장고가 뽑아준 model 모듈에다 제약조건 추가해서 사용하니 models.py 작성하는 시간이 많이 절약됐다. 여기까지는 장고가 도와줘서 좀 신이 났었다
👉 참고한 자료
기존 데이터베이스를 장고 모델로 옮길 수 있나요?
한 가지 큰 난관이 우리를 기다리고 있었으니.. 바로
User 모델
...
장고는 자체적으로 제공하는 User 모델
에 Authentication부터 permission 관리까지 다 내장되어 있어서 요걸 가져다 쓰기만 하면 세상 편하다(~고 한다).
다만! 우리는 디폴트로 username을 인증에 사용하는 User모델
과 달리 email로 인증을 해야 하고, 추가해야 할 필드도 있어서 그 편하다는 User모델을 그대로 사용할 수 없었다. 😇
따라서 User모델을 확장해서 쓸 수 있는 방법을 찾아야 했고, 기존 필드를 상속받아 수정할 수 있고 추가 필드도 붙일 수 있는 AbstractBaseUser
로 유저모델을 확장 생성했다.
말은 쉬운데 이 부분이 진짜 오래 걸렸다. 처음에는 AbstractUser
로 구현했다가 email 인증으로 변경이 안 된다는 것을 나중에 깨닫고~ 싹 밀어버린 뒤 AbstractBaseUser
로 다시 구현했다. 😃
산넘어 산이라고.. yogayo
는 유저 타입이 2가지(요가회원, 요가센터)가 존재하는데 각각 다른 테이블과 관계를 맺고 있으며 가져야 할 권한도 달랐다. 또 폭풍 구글링으로 찾아보니 이런 경우 유저 타입 필드를 추가해서 유저타입별로 관리를 해야 하는데! 구현하는 방법이 여러가지였다. 몇 가지 있었는데 하루만에 까먹..
무튼 여러 방법 중에서 실제 테이블을 생성하지 않는 proxy model
을 선택하여 두 가지 유저 유형을 구분 관리해주기로 했다. 지나고 나서 글로 정리하니까 이렇게 짧은데.. 이 자료 저 자료 찾아보면서 동공지진이 수십번도 더 났던 것 같다 🥺 모델 만들었다 지웠다 flush도 참 많이 했지..
참고한 자료
유저 유형 여러 개일 경우 모델 생성하기
Multiple User Types | Django
유저 유형 여러 개 + 유저모델 확장하기
Multiple User Types With Custom Data Fields | Django
db랑 model이랑 매칭 안 될 때 둘다 밀어버리고 다시 시작하기(flush)
How to Reset Migrations
그 외 stackoverflow의 여러 답변들... 고맙습니다 전세계의 천사들,,,
우여곡절 끝에 유저모델을 생성하긴 했다.
그런데 과연 이게 제대로 된건지 눈으로 보이지가 않아서 답답 🤯 🤯 🤯
그래서 또 이런저런 키워드로 구글링을 하니 스키마를 시각화해주는 확장툴이 존재...!참 세상에 센스있는 사람들 많다.
아래는 완성한 모델의 스키마 구조도!
시각화 툴 중에 schema_graph
라는 확장기능을 사용했다.
요가회원(GenUser)과 요가센터(AdminUser)모델이 각각 다른 테이블과 관계를 잘 맺고 있는 아름다운 모습...🥰
이제 더 이상의 매운맛 떫은맛 쓴맛은 없을 거라는 희망을 가지고 API를 완성해보자!!!!!
대천재