트러블슈팅 (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

 

 

 

 

 

위의 트러블슈팅 가이드를 통해 프로젝트 사용 중 발생할 수 있는 문제를 예방하고, 발생한 문제를 해결하는 데 도움을 줄 수 있습니다.

'Project' 카테고리의 다른 글

SA문서 피드백  (2) 2024.09.11

+ Recent posts