장고 설정 오류 해결하기: ImproperlyConfigured 오류와 설정 방법
오늘은 장고 프로젝트에서 발생한 오류에 대해 해결 방법을 정리해보려고 한다.
장고에서 django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured라는 오류를 마주쳤다.
이 오류는 장고 프로젝트의 설정이 제대로 로드되지 않았을 때 나타나는 메시지였다. 구체적으로, INSTALLED_APPS 설정이 없다고 하니 장고가 설정을 찾을 수 없다는 것이다.
오류 원인
장고에서 프로젝트의 설정을 불러오기 전에 관련된 설정 파일이나 환경 변수들이 제대로 설정되지 않으면 이와 같은 오류가 발생한다.
예를 들어, DJANGO_SETTINGS_MODULE 환경 변수가 설정되지 않으면 장고는 어디에서 설정을 가져와야 할지 알 수 없기 때문에 오류가 발생한다.
해결 방법
1. 환경 변수 설정
장고 코드가 실행될 때, DJANGO_SETTINGS_MODULE이라는 환경 변수를 명시적으로 설정해야 한다. 이 환경 변수는 장고 프로젝트의 설정 파일 위치를 알려준다.
예를 들어, 내 프로젝트에서는 설정 파일이 myproject.settings에 위치하므로, 이를 설정해줘야 한다.
2. 스크립트 내에서 설정
스크립트를 작성할 때, os.environ.setdefault와 django.setup()을 사용하여 장고 설정을 명시적으로 불러오도록 해야 한다.
예시 코드는 다음과 같다:
import os
import django
# 'myproject.settings'를 실제 프로젝트의 설정 모듈로 바꿔준다.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
django.setup()
from myapp.models import CustomUser # 설정이 로드된 후 모델을 불러와야 한다.
def create_users_from_dump(data):
for user_data in data:
CustomUser.objects.create(
username=user_data['username'],
email=user_data['email'],
password=user_data['password'],
)
이렇게 하면 스크립트 실행 전 장고 설정이 로드되므로, 모델을 제대로 사용할 수 있다.
3. 장고 쉘에서 실행
장고 쉘에서는 설정이 자동으로 로드되므로, os.environ과 django.setup()을 사용할 필요가 없다. python manage.py shell을 실행하면 프로젝트의 설정이 자동으로 설정된다. 아래는 장고 쉘에서 실행하는 예시다:
python manage.py shell
>>> from load_json_data import create_users_from_dump
>>> sample_data = [{'username': 'user1', 'email': 'user1@example.com', 'password': 'hashed_password_here'}]
>>> create_users_from_dump(sample_data)
4. 독립 실행형 스크립트
독립적인 스크립트로 실행하고자 한다면, 반드시 os.environ과 django.setup()을 추가하여 장고 설정을 명시적으로 초기화해야 한다. 이를 통해 장고가 필요한 환경을 설정하고 오류를 방지할 수 있다.
오늘은 이 오류를 해결하면서 장고 설정에 대해 조금 더 깊이 이해할 수 있었다. 장고 프로젝트를 진행하면서 설정을 명확히 해주는 것이 얼마나 중요한지 다시 한 번 느꼈다.