[Django] Trouble Shooting
장고로 API서버를 구축하면서
발생한 문제와 해결과정을 기록한 포스팅입니다.
1. Django TimeZone 문제
- 서버 로컬에서 date를 확인 할 경우 현재 한국 시간으로 잘 출력된다.
$ date
- 혹시 아래와 같이 KST 시간이 아닌 서버 시간이 UTC 시간으로 설정이 되어있는 경우는 변경해준다 (필요시)
- 장고에서 datetime.now()를 확인하면 UTC 시간으로 출력(한국 기준 9시간 전)
# Django 내부 코드
from datetime import datetime
datetime.now()
- 장고 로그를 기록해놔야하기 때문에 현재 한국 시간을 잘 출력하는게 중요
- 서버시간(KST)과 장고시간(UTC)가 다르게 출력되는 이유는 장고 기본 setting.py때문
- 한국시간으로 변경하려면 아래와 같이 설정해준다.
$ vi 장고프로젝트이름/setting.py
- 기존 타임 존을 주석처리하고, 'Asia/Seoul'을 입력해준다.
- 기존 LANGUAGE_CODE 와 TIME_ZONE을 제외하고 모두 주석처리를 해줘야 잘 적용이 된다.
2. Django Static 파일 사용 시 발생 에러
- 기본적으로 Django를 테스트 할 때 사용하는 runserver는 개발을 위한 임시 웹서버의 기능을 한다.
- 테스트를 위해 DEBUG = False 로 설정 후 runserver를 하면 static file은 장고에서 제공 할 수 없다
( 다른 추가 설정을 해줘야 임시적으로 확인 가능)
- 배포를 위한 목적으로 이번 프로젝트를 진행 했기 때문에 다음과 같이 구성함 : Django는 앱서버로, Gunicorn은 앱서버와 웹서버의 인터페이스 역할로, Nginx는 웹서버의 역할을 수행하기 위해 3개를 동시에 진행
- 이때 static file은 웹서버가 제공하는 것이 바람직하다.
장고 기본 설정
$ vi 장고프로젝트이름/settings.py
Nginx 추가 설정
$ sudo vi /etc/nginx/sites-enabled/설정파일이름
- 가장 마지막 하단에 실제 /static 폴더가 위치하는 경로를 설정해준다
- 설정이 변경되면 Nginx, Gunicorn 재 실행
$ sudo systemctl restart nginx
$ sudo systemctl restart gunicorn
3. Django + Gunicorn + Nginx 연결 오류
- 웹서버와 앱서버 그리고 이 둘을 연결해주는 인터페이스, 이렇게 3개간의 연결에 문제가 발생한 경우
- 장고와 구니콘은 연결이 되어있으나 Nginx와의 연결 오류 발생
- Nginx의 위와 같은 설정에서 proxy_pass 부분 유의!
- http://가 아닌 https://로 작성하게 되면 TIMEOUT이 뜨면서 연결 에러가 발생한다(유의할 점)