트러블슈팅 (Troubleshooting)
1. 의존성 설치 오류
문제:
pip install -r requirements.txt 명령어 실행 시 특정 패키지 설치 실패.
원인:
- Python 버전 불일치
- 특정 패키지 버전 충돌
- 네트워크 연결 문제
해결 방법:
- Python 버전 확인: 프로젝트와 호환되는 Python 버전(예: Python 3.8 이상)이 설치되어 있는지 확인합니다.
Python 버전이 다를 경우, 호환되는 버전을 설치한 후 가상환경을 재설정합니다.
python --version
- 의존성 버전 문제 해결:
- 문제 발생 시 오류 메시지에서 문제가 되는 패키지를 확인한 후 requirements.txt에서 해당 패키지의 버전을 조정하거나 최신 버전으로 업데이트합니다.
- 예를 들어, Django 패키지의 설치 문제가 있다면:
pip install Django==4.2 # 특정 버전 설치
- 네트워크 연결 문제:
- 네트워크 연결이 불안정할 경우, 안정적인 인터넷 연결을 확인한 후 재시도합니다.
- 가상 환경 재설정:
- 가상 환경을 삭제하고 새로 만들고 다시 설치합니다.
rm -rf venv # 가상 환경 삭제
python -m venv venv # 가상 환경 생성
# 가상 환경 활성화
source venv\Scripts\activate # Windows
source venv/bin/activate # macOS/Linux
pip install -r requirements.txt # 패키지 재설치
2. 데이터베이스 마이그레이션 오류
문제:
python manage.py migrate 명령어 실행 시 마이그레이션 오류가 발생하거나 테이블이 생성되지 않음.
원인:
- models.py의 변경 사항을 적용하지 않음.
- 마이그레이션 파일 충돌 또는 손상.
- 데이터베이스 파일 손상 또는 누락.
해결 방법:
- 마이그레이션 파일 생성 및 적용:
- makemigrations 명령어를 사용하여 모델 변경 사항을 마이그레이션 파일로 생성한 후, migrate 명령어로 적용합니다.
python manage.py makemigrations
python manage.py migrate
- 마이그레이션 초기화:
- 문제가 계속될 경우 마이그레이션을 초기화하고 데이터베이스를 다시 생성합니다. (주의: 데이터 손실 가능성이 있으므로, 백업을 권장합니다.)
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
python manage.py makemigrations
python manage.py migrate
- 데이터베이스 파일 삭제 및 재생성:
- SQLite와 같은 파일 기반 데이터베이스를 사용하는 경우, db.sqlite3 파일을 삭제하고 다시 마이그레이션을 수행합니다.
rm db.sqlite3
python manage.py migrate
3. JWT 인증 관련 문제
문제:
로그인 후 올바른 토큰이 발급되지 않거나, 로그아웃 후에도 액세스 토큰이 유효한 상태로 남아 있음.
원인:
- JWT 토큰 발급 및 유효성 검사 로직 오류.
- 토큰 블랙리스트 관리 문제.
해결 방법:
- 토큰 만료 시간 설정:
- settings.py에서 SIMPLE_JWT 설정을 확인하고 ACCESS_TOKEN_LIFETIME과 REFRESH_TOKEN_LIFETIME을 적절하게 설정합니다.
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS':True,
'BLACKLIST_AFTER_ROTATION':True,
}
- 로그아웃 시 토큰 블랙리스트 처리:
- 로그아웃 API 구현 시 RefreshToken을 블랙리스트에 추가하여 더 이상 사용하지 못하도록 합니다.
from rest_framework_simplejwt.tokens import RefreshToken
def logout(request):
try:
refresh_token = request.data["refresh"]
token = RefreshToken(refresh_token)
token.blacklist()
return Response({"message": "Successfully logged out."}, status=200)
except Exception as e:
return Response({"error":str(e)}, status=400)
4. 정적 파일 로드 오류
문제:
CSS, JavaScript 등의 정적 파일이 로드되지 않거나 404 오류가 발생함.
원인:
- Django에서 STATIC_ROOT 또는 STATICFILES_DIRS 설정이 올바르지 않거나, 정적 파일 수집이 이루어지지 않음.
해결 방법:
- 정적 파일 설정 확인:
- settings.py에서 STATIC_URL, STATICFILES_DIRS, STATIC_ROOT 설정을 확인합니다.
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
- 정적 파일 수집:
python manage.py collectstatic
위의 트러블슈팅 가이드를 통해 프로젝트 사용 중 발생할 수 있는 문제를 예방하고, 발생한 문제를 해결하는 데 도움을 줄 수 있습니다.