Covenant



 127.0.0.1로 테스트를 했다고 하면 이제 다른 사람이 내 웹 사이트에 접속할 수 있도록 하는 것을 배포한다고 합니다. 그런데 그러기 전에 장고에서 설정을 해 주어야 합니다.


1. 배포

[1] 개발환경 : 프로그램 성능은 낮더라도 개발 생상성에 집중한다.

특징 : 파이썬 소스파일에서 소스 코드 변경시, 개발서버가 자동 재시작 합니다. 

static/media 파일을 장고에서 직접 서빙 지원

오류 발생시, 오류정보 직접 노출

[2] 서비스 서버환경 : 프로램 성능을 최적화 합니다.

특징 : 소스코드가 변경되더라도 개발서버가 자동 재시작 되지 안흔다.

static/media 팡리은 장고에서 직접 서빙하지 않는다. 이는 외부 웹 서버에 맡겨야 한다. 

오류가 발생하더라도 오류 정보를 직접 노출되지 않는다.


2. 서비스 환경에서 추가로 세팅하는 것들

- settings.DEBUG = False

  이 옵션 켜두면, 메모리에 SQL쿼리 실행내력이 계속 쌓이게 된다. 이렇게 메모리가 부족하게 되면 서비스가 불가능하게 된다.

  이 옵션을 켜두면, 오류 발생시 유저에게 불필요하게 서버정보가 제공된다.

-  별도 static/media 세팅

AWS를 쓴다면 AWS S3를 사용한다.

- 별도의 데이터베이스 서버를 세팅한다.

보통 Django를 쓴다면 MySQL, MariaDB를 쓴다.


3. / 주소를 다른 경로로 redirect를 시켜야 한다.

# 프로젝트/views.py

from django.shortcuts import redirect


def root(request):

return redirect('blog:index') 


# 프로젝트/urls.py

from .views import root


urlpattens = [

url(r'^$', root, name='root')

]


4. 404예외처리

- 404 예외는 page not found 없는 파일 경로가 나올 때 뜨는 예외이다. 

- django.views.defaults.page_not_found 뷰에서 처리한다. 

- settings.DEBUG= True 설정에서는 노란바탕의 예외 정보가 나온다.

- settings.DEBUG = False 설정에서는 404.html 있다면 404.html이 나온다. 없다면 장고에서 기본 설정된 페이지가 나온다.


5. 500예외

- django.views.defaults.server_error 뷰에서 치한다.

- 404예외처리와 마찬가지로 settings.DEBUG =True 환경에서는 노란바탕의 예외 정보가 나온다.

- 500.html 템플렛이 있을 경우 500.html이 실행되고, False일 경우 기본 설정된 단순한 랜더링이 나온다.


6. settings.STATICFILES_DIRS 설정 확인

-  settings.STATICFILES_DIRS에 명시된 디렉토리는 반드시 존재해야 한다. 없다면 ptrhon3 manage.py collectstatic 명령이 실패한다.

- 단 git에서는 빈 디렉토리는 버전관리 대상에 넣지 않는다. 그래서 로컬 개발환경에서 존재했더라도, 비어있다면 버전 관리에서 제외되어 배포 서버 상에서는 해당 디렉토리가 존재하지 않게 된다. 그래서 SATICFILES_DIRS에 지정된 디렉토리에는 최사한의 1개의 파일이라도 넣어야 한다.

# settings 

STATICFULES_DIRS = [

os.path.join(BASE_DIR, 'iSeed', ''static')

]


7. requirements.txt 설정하기

- 프로젝트 세팅할 때마다 팩키지를 일일이 설치하는 번거롭고, 빼 먹을 가능성이 있다. 따라서 requirements.txt를 만들어서 설치할 팩키지 목록을 파일 1개를 통해 공급받을 수 있다.

[requirements.txt 예시]

django>=1.10.6 

django-debug-toolbar 

django-extensions 

django-bootstrap3


이렇게 작성하고 실제로 서버에서 팩키지를 설정할 때 

pip install -r requiremenets.txt

명령어를 입력하면 requirements.txt에 있는 팩키지가 한번에 설치된다. 


(다른 디렉토리, 파일명이어도 상관은 없다.)