장고 SECRET_KEY 관리 방법: 환경 변수와 로컬 파일 설정

2022. 3. 13. 22:04·Django

장고에서는 프로젝트 생성 시 settings.py에 자동으로 SECRET_KEY를 생성해줍니다. 이는 세션, 메시지, 토큰, 암호화된 서명 등에 사용되므로 외부로 유출되지 않게 잘 관리해야 합니다. 특히나 프로젝트 협업을 진행할 때 사용하는 깃을 통해 직접 SECRET_KEY나 데이터베이스의 암호, AWS 정보, 각종 소셜 로그인 API 키 등을 업로드해 공유할 경우 유출되어 큰 문제가 발생할 수 있습니다.

 

SECRET_KEY를 프로젝트 파일과 구분하여 관리하는 방법으로는 1. 환경 변수 설정 2. 로컬 파일 생성이 있습니다.

환경 변수 설정

환경 변수란 운영 체제(OS)에서 프로세스를 실행하기 위해 참조하는 변수를 의미합니다. 즉, 프로세스가 컴퓨터에서 작동하는 데 영향을 미치는 글로벌 환경의 동적인 값들을 의미합니다.

 

.bashrc, .zshrc 파일 등에 다음과 같이 환경 변수를 설정하여 키를 관리할 수 있습니다. 배포 도구에 따라 환경 변수 설정 방법이 달라질 수 있습니다.

# 터미널에서 사용 중인 셸 확인
echo $SHELL
/bin/zsh

# 셸의 프로필 스크립트를 열기
vim ~/.zshrc

# 스크립트 내에 다음을 추가
export DJANGO_SECRET_KEY='django-insecure-w$cc...'
export DB_NAME='project'
...

# 저장 후 터미널로 빠져나와 zsh 명령어 입력
zsh

#환경 변수 설정 확인
echo $DJANGO_SECRET_KEY

환경 변수 설정을 마쳤다면 이제 장고의 settings.py로 이동하여 다음과 같이 환경 변수를 지정해줍니다.

# settings.py

import os
from django.core.exceptions import ImproperlyConfigured


def get_env_variable(var_name):
  """환경 변수를 가져오거나 에러 메시지를 반환."""
  try:
    return os.environ[var_name]
  except KeyError:
    error_msg = "Set the {} environment variable".format(var_name)
    raise ImproperlyConfigured(error_msg)


SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]

로컬 파일로 관리

로컬 파일로 관리하는 가장 간단한 방법은 프로젝트에서 my_settings.py를 만들고 내부에 데이터를 저장한 다음 이를 .gitignore에 추가하여 추적을 방지하는 것입니다.

{
   "django:" {
    SECRET_KEY = 'django-insecure-w$cc...'
    DATABASES = {
          'default' : {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'mysite',
          'USER': 'root',
          'PASSWORD': '****',
          'HOST': '127.0.0.1',
          'PORT': '3306',
          }
    }
  },
  "aws": {
    AWS_ACCESS_KEY_ID = "AKIA2WVSW..."
    AWS_SECRET_ACCESS_KEY = "psRKZoW+3..vQ"
  } 
}

로컬 파일에서 SECRET_KEY를 관리하는 보다 자세한 방법은 장고 초기 세팅 포스팅을 참조해보시기 바랍니다.

 

참고:
https://ehfgk78.github.io/2018/02/03/Django_secrets/
https://wayhome25.github.io/django/2017/07/11/django-settings-secret-key/

반응형

'Django' 카테고리의 다른 글

장고 개발 환경에 따라 settings.py 분리하는 방법  (0) 2022.03.13
장고 get_or_create()와 race condition 문제  (0) 2022.03.05
장고 Q를 활용한 필터링, 정렬, 검색 방법  (0) 2022.02.20
장고에서 HTTP GET, POST 요청 처리하는 방법  (0) 2022.02.20
장고 ORM과 쿼리셋의 개념  (0) 2022.02.07
'Django' 카테고리의 다른 글
  • 장고 개발 환경에 따라 settings.py 분리하는 방법
  • 장고 get_or_create()와 race condition 문제
  • 장고 Q를 활용한 필터링, 정렬, 검색 방법
  • 장고에서 HTTP GET, POST 요청 처리하는 방법
휘 Hwi
휘 Hwi
개발자 성장 로그
  • 휘 Hwi
    개발자 로그: 변화를 위한 공간
    휘 Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 101 (1)
      • Web | Internet (4)
      • HTML | CSS (4)
      • Python (9)
      • Django (20)
      • Javascript (0)
      • Node.js (0)
      • React (0)
      • React Native (0)
      • Database (1)
      • Git (1)
      • Terminal | Vim (1)
      • Auth | Security (4)
      • AWS (0)
      • Docker (0)
      • Kubernetest (1)
      • Deployment (1)
      • Project (2)
      • TIL (12)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JWT
    요소 상대 크기
    깃 오류
    JWT 디코딩
    장고 URL
    정규 표현식
    배포
    JWT 인코딩
    새 탭에서 열기
    프로젝트 회고
    깃 에러 해결
    깃 ssh
    깃
    HTTP GET 요청
    요소 절대 크기
    장고 프로젝트
    html
    TIL
    요소 크기 설정
    HTTP POST 요청
    장고 Views
    파라미터
    장고
    파이썬
    깃 퍼블릭 키 등록
    탭내빙
    css
    HTTP
    target="_blank"
    함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
휘 Hwi
장고 SECRET_KEY 관리 방법: 환경 변수와 로컬 파일 설정
상단으로

티스토리툴바