[Django] no such table error 해결

David Im·2023년 1월 15일
0

side-project

목록 보기
1/1

요즘 혼자서 풀스택으로 한번 사이드프로젝트를 슬슬 굴리고있다.

이쪽 분야에서 시작한것도 어언 3년차로 접어들었는데, 그에 비해 내 실력은 아직도 한참 모자르다고 느꼈고, 이직준비를 하면서 느꼈던 수많은 벽에

올해 목표로 현재 쓰고있는 장고에 플러터로 하나 만들어보고
하반기에는 지금 따로 공부중인 SpringBoot로 위의 사이드프로젝트에 대한 백엔드해서 백오피스 만들어보는 것

어쨌든 그런고로 프로젝트 세팅부터 시작하면서 회원로그인 기능 구현을 진행하고있었다.


1. 에러사항

auth구현을 위해서 토큰 발급하는 함수를 만들고있었는데 자꾸 기존의 user model을 찾을 수 없다고 하는 아래와 같은 에러를 냈다. (앱 네임은 내가 만들고 있는 앱 네임이다.)

no such table : main.{app_name}_user

작년부터 했던 회사일들은 전부 기존의 프로젝트 위에서 API랑 비즈니스 로직만 짜다보니 이번처럼 혼자서 깡통세팅부터 해보는 것은 처음인지라 무엇이 문제일까 구글링에 들어갔다.

오류 내용부터 table 관련이었고, 답은 당연히 아래처럼 마이그레이션 관련 문제였다.


2. Database Migration 문제

구글링에서는 migration 문제일 가능성이 크다고 해서 마이그레이션을 확인했다.

python3 manage.py makemigrations
python3 manage.py migrate

마이그레이션 정보 파일을 지우고 시도했는데도 동일했다.

하지만 테이블 관련 오류였으니 이쪽이 맞을 거라고 생각하고 조금 더 찾아보았다.

2-1. migration run-syncdb 실행

마이그레이션 초기 생성 당시에 마이그레이션이 맞지 않아서 생기는 문제점에 대해서
아래 명령어로 마이그레이션 시도할 경우 데이터베이스와 Sync를 맞춰주면 해결된다는 글을 보고 시도해보았다.

python3 manage.py makemigrations
python3 manage.py migrate --run-syncdb

정상적으로 마이그레이션 로그가 뜨면서 맞춰졌나보다 하고 다시 API 콜 시도를 했는데 여전히 동일한 오류가 났다.

아마 어지간한분들 여기서 해결이 될 것이다.

그럼에도 해결되지 않는다면 아래 과정으로 넘어간다.


2-2. 마이그레이션 시 app_name 지정하여 마이그레이션 하기

위의 과정으로 해결되지 않았다면 시도한 마이그레이션 파일을 전부 지운상태에서
마이그레이션 app_name을 지정해서 정확한 타켓 앱을 지정해서 마이그레이션을 시도해보자.

python3 manage.py makemigrations {app_name}
python3 manage.py migrate

app 이름과 관련되서 타겟 앱을 정확하게 지정해주는 방식이다.

2-3. 마이그레이션 파일(00X_{migrations_name} 파일) 확인하기

이 방식으로도 나는 해결되지 않아서 도대체 뭐가 원인일까 오류메세지를 다시 파악했다.
내가 현재 지정한 db_name은 user, 오류메세지에는 main.{app_name}_user로 표기되어있다.

아, 여기서 깨달았다.

혹시나해서 마이그레이션 파일안에 있는 User 테이블의 db_meta_name을 확인했다.

옵션이 False로 되어있었다.

처음에 유저 모델을 만들때 나는 Django에서 기본으로 제공하는 유저모델 말고 커스텀유저모델을 사용했다.

이때 처음에 db_meta_name을 지정을 안했다가, query문에 사용될 이름때문에 이후에 db_meta_name을 다시 지정하고 마이그레이션을 지정했었다. 이후에 마이그레이션도 진행했다.

그런데 initial 파일에는 User 테이블의 이름이 여전히 다시 마이그레이션을 해도 해당 옵션이 False로 남아있었다.

db.sqlite3 파일까지 날려버리고 다시 마이그레이션을 진행했다.

그제서야 initial 파일안에 제대로 db_meta_name이 내가 지정한 이름으로 적용되었다.

이후에 정상적으로 작동하였다.



3. 후기

왜인지는 조금 더 찾아봐야겠지만, 아마 기존의 DB파일내에 남아있는것과 내가 마이그레이션 파일을 지웠다 썼다하면서 생겼던 일련의 버그이지않을까 싶다.

한가지 다시 생각이 드는건... DB Model 생성할 때 meta_name은 미리미리 만들 때 같이 붙여놓는게 확실히 낫구나 싶었다.

지금이야 초기 설정단계였으니까 망정이지 데이터가 어느정도 생긴뒤에 이런일이 생겼다고 생각해보면 끔찍하다 ㅋㅋ..

확실히 기존설정위에서만 놀다가 내 스스로 새롭게 뭔가를 혼자서 해보려고 하니 부족한게 많이보인다.
앞으로도 이런 문제점 생기는것들은 꼬박꼬박 기록할 예정..!

profile
코더보다 개발자로, 결과와 과정의 시너지를 만들어 가고 싶은 주니어 개발자

0개의 댓글