"1. 장고 웹서비스 사전 준비"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
잔글 (Sam님이 1. 장고 웹서비스 개요 문서를 1. 장고 웹서비스 사전 준비 문서로 이동했습니다)
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
1번째 줄: 1번째 줄:
실제로 서비스하기 위한 지식들을 구분하기 위한 분류.
+
실제로 서비스하기 위한 지식들을 구분하기 위한 문서.
  
 
= 사전준비 =
 
= 사전준비 =
8번째 줄: 8번째 줄:
  
 
[[2. 장고 스테틱 서비스용 설정|스태틱 서비스용 설정]] 문서를 참고하자.
 
[[2. 장고 스테틱 서비스용 설정|스태틱 서비스용 설정]] 문서를 참고하자.
 +
 +
= Settings.py =
 +
 +
==settings.py 분리[정리해야 함;]==
 +
DEBUG모드를 False로 바꾸어주어야 하는데, 개발컴에선 True로 되어 있어야 편하다.
 +
 +
서비스용 settings와 개발용 settings는 다르게 작동해야 하는데.. 분리해두면 하나를 수정했을 때 다른 하나를 또 고쳐야 되기도 하고 귀찮은 점이 많다.
 +
 +
그러나, DEBUG 등의 세팅을 위해선 분리해주는 게 좋긴 하다; -> 그래서 import를 사용해 덧씌운다!
 +
 +
service_settings.py를 다음과 같이 짜두면 특정한 설정만 덧씌워 서비스 할 수 있다.<syntaxhighlight lang="python">
 +
from .settings import *
 +
 +
DEBUG = True # DEBUG=True이면 개발모드, False면 운영모드로 인식한다.
 +
</syntaxhighlight>
 +
 +
====세팅파일에선 DEBUG설정을 False로 해주어야 한다.====
 +
디버그 정보는 프로젝트에 관련한 중요 사항들로, 정보가 노출되지 않게끔 해야 한다.
 +
===로컬용 세팅파일로 서버 실행===
 +
기본적인 실행에선 settings.py를  통해 기본 세팅을 받지만, 이 파일을 바꾸어 서버를 실행하는 옵션이 있다.
 +
 +
python manage.py runserver --settings=config.로컬용세팅파일 #기존 세팅파일과 같은 경로에 있는 경우.
 +
 +
위와 같이 실행하면 새로 만든 파일을 세팅으로 받아 서버를 실행한다.
 +
 +
결과적으로 <code>python manage.py runserver --settings=config.로컬용세팅파일 0:8000</code> 형태로 작동시켜주면 된다.(리눅스라면 &을 붙이자. 백그라운드에서 실행하게끔)
 +
 +
0:8000은 8000번 포트로 모든 IP로부터 접속을 허용한다는 이야기.
 +
 +
service_settings.py 라는 이름으로 같은 경로에 다음과 같이 작성하였다.<syntaxhighlight lang="python">
 +
from .settings import *
 +
 +
DEBUG = False  # DEBUG=True이면 개발모드, False면 운영모드로 인식한다.
 +
</syntaxhighlight><code>python3 manage.py runserver --settings=config.service_settings</code> 라는 명령어로 세팅파일을 바꾸어 실행할 수 있다.
 +
 +
이렇게 하면 개발할 때엔 지금과 같은 <code>python3 manage.py runserver</code>명령으로 개발모드에 들어설 수 있다.
 +
 +
<code>python3 manage.py runserver --settings=세팅파일명</code> 형태로 settings.py 대신 다른 파일을 사용할 수 있다.
 +
 +
== 비밀 파일 분리 ==
 +
settings.py엔 비밀키, 이메일 비밀번호 따위가 들어가 있어 민감함 정보를 보호하지 못한다. 보호할 정보를 다른 파일로 만든 후 그걸 불러오는 방식으로 분리하거나 아예 다른 setting으로 실행하는 등 다양한 방법이 있는데(환경변수에 등록하기도 한다.), 여기에선 다른파일로 만든 후 불러오는 방식을 사용하겠다.(json파일로 만들어 불러오거나 환경변수에 값을 저장하는 등... 다양한 방법이 있다.)
 +
 +
===공유되지 않는 보안용 파일 만들기===
 +
다양한 방법으로 보호되어야 할 정보를 따로 분리한 후 gitignore에 설정한다.
 +
{| class="wikitable"
 +
|+보호전략
 +
!방법
 +
!설명
 +
!단점
 +
|-
 +
|라이브러리 활용
 +
|pip install django-environ 설치 후 .env 파일을 작성해 보호할 정보를 저장한다.(django-environ 도큐먼트 참고)
 +
settings.py에서 import os, environ으로 불러온 후, 보호된 정보를 활용한다.
 +
 +
이후 .env를 gitignore에 담는다.
 +
|굳이; 이렇게 복잡하게;;?
 +
|-
 +
|텍스트 파일 활용
 +
|외부에 텍스트파일을 만들어 두고, 이를 읽어 비밀키 등에 대입.
 +
|쓸 코드가 길어져;
 +
|-
 +
|.py 활용
 +
|다른 파이썬 파일 안에 각종 정보를 담아두고 settings.py에서 import해 변수로 활용.
 +
|
 +
|-
 +
|환경변수 활용
 +
|감출 키를 환경변수에 등록하고 os.environ['환경변수'] 형태로 사용할 수도 있다.
 +
|특수문자때문에 환경변수에 추가 안될 수도 있다.
 +
|}SECRET_KEY는 쿠키, 세션 같은 보안에 쓰여 외부에 노출되면 안되지만, 많은 이들이 그냥 github에 올려버리고 만다. 그런 경우, 다음 링크를 통해 새로운 키를 만들어보자. https://miniwebtool.com/django-secret-key-generator/
 +
 +
필자는 setting.py와 같은 경로에 secret.py를 만들고 다음과 같이 변수를 정의하였다.<syntaxhighlight lang="python">
 +
SECRET_KEY= '비밀키'
 +
</syntaxhighlight>기존 변수와의 관계를 알기 쉽게 하기 위해 이름을 그대로 사용한다.
 +
 +
이외 이메일 비밀번호 등 필요하다 판단되는 변수들을 secret.py로 옮겨 정의한다.
 +
 +
== 기존 settings.py 설정 ==
 +
 +
=== ALLOWED_HOSTS ===
 +
ALLOWED_HOSTS 안에 서버의 아이피를 기입했기 때문에 localhost로 동작하지 못하게 된다. 이건 서버가 아닌, 작업PC에서 시범사이트를 돌리는 데 문제가 된다.
 +
 +
이를 방지하기 위해 세팅파일을 구분하여 로컬호스트로 동작할 때는 다른 파일로 서버를 동작시켜주어야 한다.
 +
 +
사실, settings를 분리해줄 것 없이, ALLOWED_HOSTS = ['''<nowiki/>'도메인'<nowiki/>''', '''<nowiki/>'127.0.0.1''''] 처럼 도메인을 벡터로 추가해주면 로컬과 서버에서 모두 사용할 수 있다.
 
[[분류:6. 장고 웹서비스]]
 
[[분류:6. 장고 웹서비스]]

2022년 6월 27일 (월) 11:33 기준 최신판

실제로 서비스하기 위한 지식들을 구분하기 위한 문서.

1 사전준비[편집 | 원본 편집]

웹서비스를 위해 몇몇 준비가 필요하다.

1.1 Static[편집 | 원본 편집]

서비스용 스태틱 설정이 필요하다.

스태틱 서비스용 설정 문서를 참고하자.

2 Settings.py[편집 | 원본 편집]

2.1 settings.py 분리[정리해야 함;][편집 | 원본 편집]

DEBUG모드를 False로 바꾸어주어야 하는데, 개발컴에선 True로 되어 있어야 편하다.

서비스용 settings와 개발용 settings는 다르게 작동해야 하는데.. 분리해두면 하나를 수정했을 때 다른 하나를 또 고쳐야 되기도 하고 귀찮은 점이 많다.

그러나, DEBUG 등의 세팅을 위해선 분리해주는 게 좋긴 하다; -> 그래서 import를 사용해 덧씌운다!

service_settings.py를 다음과 같이 짜두면 특정한 설정만 덧씌워 서비스 할 수 있다.

from .settings import *

DEBUG = True # DEBUG=True이면 개발모드, False면 운영모드로 인식한다.

2.1.1 세팅파일에선 DEBUG설정을 False로 해주어야 한다.[편집 | 원본 편집]

디버그 정보는 프로젝트에 관련한 중요 사항들로, 정보가 노출되지 않게끔 해야 한다.

2.1.2 로컬용 세팅파일로 서버 실행[편집 | 원본 편집]

기본적인 실행에선 settings.py를 통해 기본 세팅을 받지만, 이 파일을 바꾸어 서버를 실행하는 옵션이 있다.

python manage.py runserver --settings=config.로컬용세팅파일 #기존 세팅파일과 같은 경로에 있는 경우.

위와 같이 실행하면 새로 만든 파일을 세팅으로 받아 서버를 실행한다.

결과적으로 python manage.py runserver --settings=config.로컬용세팅파일 0:8000 형태로 작동시켜주면 된다.(리눅스라면 &을 붙이자. 백그라운드에서 실행하게끔)

0:8000은 8000번 포트로 모든 IP로부터 접속을 허용한다는 이야기.

service_settings.py 라는 이름으로 같은 경로에 다음과 같이 작성하였다.

from .settings import *

DEBUG = False  # DEBUG=True이면 개발모드, False면 운영모드로 인식한다.

python3 manage.py runserver --settings=config.service_settings 라는 명령어로 세팅파일을 바꾸어 실행할 수 있다.

이렇게 하면 개발할 때엔 지금과 같은 python3 manage.py runserver명령으로 개발모드에 들어설 수 있다.

python3 manage.py runserver --settings=세팅파일명 형태로 settings.py 대신 다른 파일을 사용할 수 있다.

2.2 비밀 파일 분리[편집 | 원본 편집]

settings.py엔 비밀키, 이메일 비밀번호 따위가 들어가 있어 민감함 정보를 보호하지 못한다. 보호할 정보를 다른 파일로 만든 후 그걸 불러오는 방식으로 분리하거나 아예 다른 setting으로 실행하는 등 다양한 방법이 있는데(환경변수에 등록하기도 한다.), 여기에선 다른파일로 만든 후 불러오는 방식을 사용하겠다.(json파일로 만들어 불러오거나 환경변수에 값을 저장하는 등... 다양한 방법이 있다.)

2.2.1 공유되지 않는 보안용 파일 만들기[편집 | 원본 편집]

다양한 방법으로 보호되어야 할 정보를 따로 분리한 후 gitignore에 설정한다.

보호전략
방법 설명 단점
라이브러리 활용 pip install django-environ 설치 후 .env 파일을 작성해 보호할 정보를 저장한다.(django-environ 도큐먼트 참고)

settings.py에서 import os, environ으로 불러온 후, 보호된 정보를 활용한다.

이후 .env를 gitignore에 담는다.

굳이; 이렇게 복잡하게;;?
텍스트 파일 활용 외부에 텍스트파일을 만들어 두고, 이를 읽어 비밀키 등에 대입. 쓸 코드가 길어져;
.py 활용 다른 파이썬 파일 안에 각종 정보를 담아두고 settings.py에서 import해 변수로 활용.
환경변수 활용 감출 키를 환경변수에 등록하고 os.environ['환경변수'] 형태로 사용할 수도 있다. 특수문자때문에 환경변수에 추가 안될 수도 있다.

SECRET_KEY는 쿠키, 세션 같은 보안에 쓰여 외부에 노출되면 안되지만, 많은 이들이 그냥 github에 올려버리고 만다. 그런 경우, 다음 링크를 통해 새로운 키를 만들어보자. https://miniwebtool.com/django-secret-key-generator/ 필자는 setting.py와 같은 경로에 secret.py를 만들고 다음과 같이 변수를 정의하였다.

SECRET_KEY= '비밀키'

기존 변수와의 관계를 알기 쉽게 하기 위해 이름을 그대로 사용한다.

이외 이메일 비밀번호 등 필요하다 판단되는 변수들을 secret.py로 옮겨 정의한다.

2.3 기존 settings.py 설정[편집 | 원본 편집]

2.3.1 ALLOWED_HOSTS[편집 | 원본 편집]

ALLOWED_HOSTS 안에 서버의 아이피를 기입했기 때문에 localhost로 동작하지 못하게 된다. 이건 서버가 아닌, 작업PC에서 시범사이트를 돌리는 데 문제가 된다.

이를 방지하기 위해 세팅파일을 구분하여 로컬호스트로 동작할 때는 다른 파일로 서버를 동작시켜주어야 한다.

사실, settings를 분리해줄 것 없이, ALLOWED_HOSTS = ['도메인', '127.0.0.1'] 처럼 도메인을 벡터로 추가해주면 로컬과 서버에서 모두 사용할 수 있다.