들어가기

메일 전송 때 사용하는 GMail 비밀번호를 Git에 같이 커밋 할 수 없어서 파일을 나누려 찾다보니, Django에서 settings.pySECRET_KEY를 따로 분리해야 한다는 글을 보고 경악 했다 😱 (튜토리얼에 그런 글은 없었는데... 내가 못본건가 ...)

이왕 이렇게 된거 Django 에서 배포할 수 없는 중요한 데이터를 분리하는 법에 대해 정리하자

SECRET KEY 변경

먼저 나의 노출된 기밀(?) 인 SECRET_KEY 를 변경해주자

SECRET_KEY는 주로 쿠키데이터 해시, 암호화 등 임시적인 일에 사용되고, 변경 시 로그인 세션 등의 데이터가 사라질 수 있다

아마 변경한다고 해도 세션 ID 정도 바뀌는 걸테니 괘..괜찮을 것이다... 일단 branch를 뜨고 실험 해보자

SECRET_KEY는 50자의 랜덤 문자로 구성되어 있는데 Django Secret Key Generator 를 이용하면 편하게 새로운 SECRET_KEY 를 생성할 수 있다

분리 방법

SECRET_KEY 나 다른 중요한 정보를 따로 불러 오는 방법에는 크게 세가지가 있다
(더 있을 수도 있다)

  • 환경변수 설정
  • 다른 파일에서 불러오기

개인적으로 파일을 만드는게 좋기 때문에 환경변수는 생략하겠다

다른파일에서 불러오기

먼저 비밀 데이터를 담을 파일 secret.json을 만들자

secret.json

{
  "SECRET_KEY" : "ufe0x4%92dwkn9l1ye!m3o$zvcag!rfz837fctzj!t2&5s884"
}

Django secret key generator 사용하여 SECRET_KEY 를 만들어보았다

자 이제 저 파일을 불러올 함수를 settings.py에 추가해보자

settings.py

with open('secret.json', 'r') as f:
    secret = json.loads(f.read())
# with 함수는 자동으로 파일을 닫아준다

def get_secret(setting, secret=secret):
    try:
        return secret[setting]
    except:
        msg = "Set key '{0}' in secret.json".format(setting)
        raise ImproperlyConfigured(error_msg)

위의 함수를 선언하고 아래처럼 불러오자

SECRET_KEY = get_secret('SECRET_KEY') # my-secret-key

다른 중요한 데이터들도 이렇게 분리하면 된다

❗️ *주의 *
secret.json 파일은 꼭 .gitignore에 추가하자 !!!