[ProjectRebuild] SuperFluid 2. User

Alex of the year 2020 & 2021·2020년 8월 21일
0
post-thumbnail

models.py 그리고 RDS dump

2차 때와 같이 이번에도 user app을 먼저 만들어야겠다고 생각했다.
우리는 2차 프로젝트 당시, 애초부터 DB 구축을 RDS에 했었는데 나는 이번에 홀로 다시 2차 프로젝트를 진행하며 DB는 당시 구축된 DB를 사용하고자했다.

하지만 special method도 포함시켜 약간 내용을 달리하여 user models.py를 작성해보고 싶다는 생각이 들었다. 따라서 models.py에 변경사항이 생길 것이고, 이를 makemigrations를 하고 migrate하는 과정에서 팀이 함께 만든 RDS DB에 수정 사항이 생길 것 같았다. (나중에 멘토님 말씀으로는 스페셜 메소드를 적는 것이 디비 자체에 영향을 주지는 않는다고 하셨지만)
팀 프로젝트를 하기 위해 구축한 DB를 내가 임의로 수정하는 것은 바람직하지 않다는 판단에
RDS DB를 dump 떠서 내 local에 새로이 구축하는 작업을 진행했다.

이대로 진행하고자 하였으나, 자꾸만 Unknown table 'COLUMN_STATISTICS' in information_schema (1109) 라는 에러 문구가 출력되었고, 결국

이 방식으로 에러를 해결하는데에 성공하였다.

(Mysql version 8 부터 종종 발생하는 문제라고 한다.)

Dump 뜨는 것까지는 좋았으나

어찌저찌 dump를 뜨긴했는데, 또 다른 문제가 발생했다.
다시 프로젝트 뼈대를 갖춰가는 과정에서 나는 아직 User app밖에 만들지 않은 상황이지만 내가 재사용하는 DB는 이미 모든 앱이 갖추어져 있고, 갖추어진 모든 앱들의 models.py들이 서로 의존적이라는 것이다. 이번 프로젝트에 manytomany 관계가 많았던 것은 아니지만, 프로젝트 내에서 중요한 역할을 하는 테이블들이 manytomany 관계에 엮여 있었다. User 테이블과 Product테이블이 서로 manytomany 관계이므로 (한 사용자가 많은 상품을 살 수 있고, 한 상품은 많은 사용자에 의해 구매될 수 있음) 이 두 테이블을 이어주는 중간 테이블이 필요한데 Order가 그 둘의 중간 테이블로 기능하는 것이다.

따라서, 우선 product와 order의 models.py를 작성하여 DB 사용에 문제가 없게 하는 것이 당장 가장 필요한 일 같았다. 원활한 DB 사용을 위해, 작성했다.


StackOverflow 첫 질문 등록

그리하여 User, Product, Order 세가지 앱에 대해 모두 models.py를 작성하게되었다.
각각의 브랜치 feature/user, feature/product, feature/order로 나누어 작성한 후, 협업할 때와 같이 add, commit, push 혹은 rebase 후 push 하였다. 이후 모든 브랜치 작업을 합쳐 master branch로 merge한 후, 다시 local에서 병합된 master 브랜치 내용을 pull 받았다. 이후 makemigrations와 migrate 과정을 진행하고 그 이후에는 이제 에러가 없을 것이라고 장담하고 있었다. 자신있게 postman으로 signup url을 호출했다.

하지만 내게 계속하여 돌아오는 답은?
too many values to unpack(expected 2)

뭐지? 싶어 구글에 나오는 모든 장고 관련 too many values to unpack 글을 샅샅이 뒤졌다.
그렇게 어제 4시부터 방금 1시반까지 계속해서 이 에러를 고쳐보고자 노력했으나,
.... 실패

비교적 자신있는 signup signin에서 막히니 어떻게든 구글링을 통해 해결한다, 고 생각했으나 쉽지 않았다.
정말 도무지 이해가 안되어 Stackovewrflow에 질문을 올려보기로 하였다.

https://stackoverflow.com/questions/63515934/django-too-many-values-to-unpack-excpected-2-error-objects-filter << 내 질문 링크


대충 이런 내용으로 올렸는데,

질문을 처음 올려보는거라 어디서부터 어떻게 설명해야 할지도 잘 모르겠고, 이렇게 말하면 사람들이 알아듣고 해결책을 줄 수 있을까? 무슨 이런 질문을 하냐며 비아냥대는 것 아닐까? 하며 떨렸다 (이게 뭐라고 떠는지는 모르겠지만 진짜 좀 떨렸다)
그런데 점심을 먹고 왔더니 내 질문에 누가.. -1 ... 즉 이건 좋지 않은 질문이라며 비추를 누르고 간 것이다. 🌚
상당히 의기소침한 채로 달린 코멘트를 읽어봤는데,

코멘트마저 너무 성의가 없는 것이다.
뭐지 이 사람... 하고 있었는데 그 때 발견한 것은.

정말 저 사람 코멘트대로...
User.objects.filter(email=data['email']).exists()라고 적었어야할 것을 User.objects.filter(data['email'].exists()라고 적어둔 것이다. (;;;;;;)
그것도 Signup, Signin API 둘다.... (하도 signup이 안되어서 확인차 signin도 작성해서 포스트맨 요청 보냈었음)

너무 창피해서 얼굴이 홍당무가 되었다.
다른 삽질은 그렇다쳐도 .. 이런걸 못보다니 ㅎㅎ....... 🥕🌚☠️🤡🖐🏻💸

그리하여.... 결국.
Arakkal Abu의 말대로...... email= 을 추가하자마자 잘 작동하는 것을 볼 수 있었다...
problem solved...ㅎㅎ

이렇게 나의 User API가 1차 완성되었다.
위코드 멘토님 말씀대로 500 error라면.. 어느정도 분명히 스스로 디버깅할 수 있는 요소가 있을테니 우선 조금 더 코드를 찬찬히 살피자 라는 말이 정말 와닿는 삽질이었다..ㅎㅎ



references:
https://stackoverflow.com/questions/30217299/how-to-export-database-from-amazon-rds-mysql-instance-to-local-instance (RDS dump)
https://qastack.kr/server/912162/mysqldump-throws-unknown-table-column-statistics-in-information-schema-1109 (RDS dump 시 mysql 8 버전에서의 에러 해결 방법)

profile
Backend 개발 학습 아카이빙 블로그입니다. (현재는 작성하지 않습니다.)

0개의 댓글