장고 no such table 에러 해결하기
오늘은 장고 프로젝트를 진행하면서 "no such table"이라는 에러를 만났다. 이 에러는 데이터베이스에 필요한 테이블이 생성되지 않았을 때 발생하는 것으로, 처음 이 메시지를 봤을 때 무척 당황스러웠다. 그래서 나는 차근차근 이 문제를 해결하기로 했다.
에러 확인하기
코드를 실행했을 때 다음과 같은 에러 메시지를 보았다:
django.db.utils.OperationalError: no such table: myapp_mymodel
이 메시지는 내가 만든 앱의 모델에 대한 테이블이 데이터베이스에 존재하지 않음을 나타냈다. 이런 상황이 발생한 이유를 생각해보니, 데이터베이스를 생성하지 않았다는 것을 깨달았다.
데이터베이스 설정 확인하기
나는 먼저 settings.py 파일을 열어 데이터베이스 설정을 확인했다. Django 프로젝트에서는 기본적으로 SQLite 데이터베이스를 사용하고, 설정은 다음과 같이 되어 있었다:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
이 설정은 올바르게 되어 있었고, db.sqlite3 파일이 프로젝트 디렉토리에 생성되기를 기다리고 있었다.
마이그레이션 실행하기
이제 본격적으로 데이터베이스와 테이블을 생성해야 했다. 나는 터미널을 열고 아래의 명령어를 순서대로 입력했다:
1. makemigrations: 새로운 마이그레이션 파일을 생성하는 명령어
python manage.py makemigrations
이 명령어를 실행한 후, 내 모델의 변경 사항을 반영한 마이그레이션 파일이 생성되었다는 메시지를 확인할 수 있었다.
2. migrate: 데이터베이스에 실제로 테이블을 생성하는 명령어
python manage.py migrate
이 명령어를 실행하자 데이터베이스에 테이블이 성공적으로 생성되었다는 메시지가 나타났다. 이제 드디어 내가 원하는 테이블이 데이터베이스에 만들어졌다는 확신이 들었다.
에러 재확인
마이그레이션이 완료된 후, 다시 한 번 코드를 실행해보았다. 이제는 "no such table"이라는 에러가 발생하지 않았다! 대신 내가 작성한 코드가 정상적으로 작동하는 것을 확인할 수 있었다. 기분이 좋았다.
오늘의 경험을 통해 장고에서 데이터베이스와 테이블을 관리하는 것이 얼마나 중요한지를 다시 한 번 깨닫게 되었다. 앞으로도 데이터베이스 관련 작업을 할 때는 항상 마이그레이션이 제대로 이루어졌는지 확인해야겠다는 다짐을 하게 되었다.