1. 비밀 키(SECRET_KEY) 관리하기
프로젝트를 배포하기 위해 SECRET_KEY를 분리하는 실습을 진행하려고 합니다.
1.1 비밀 값을 관리하는 이유
만약에 설정값에 시크릿 값이 포함되어 있는 상태에서 Github이나 Bitbucket과 같은 버전 관리 시스템에 코드를 공개하는 경우, 자칫하면 시크릿 값을 잘못 관리함으로 인해 큰 피해를 볼 수도 있다. 가령 시크릿 값을 탈취해 남의 서버 자원을 비정상적으로 사용하는 경우도 있고, 암호키 값인 경우 서버 애플리케이션을 향한 악의적 공격이나 해킹 문제로 이어질 수도 있다.
이 SECRET_KEY는 프로젝트마다 유일한 값으로 세팅되어야 합니다.
또한 VCS(Version Control System)에서 제외되어야 하는데 git과 같은 사이트에 올라갔을 때
다른 사용자에게 노출 시 악용(AWS, 채굴)될 우려가 있기 때문에 settings.py 파일이 아닌 외부에 따로 저장되어야 합니다.
따라서, SECRET_KEY도 별도의 파일을 만들어 settings.py에서 분리하고 settings.py가 이 파일을 읽어와 사용할 수 있도록 해야한다.
git과 같은 버전 관리 시스템에 PUSH 할 때. gitignore에 외부 파일을 지정해서 제외시켜야 합니다.
1.2 설정값 관리 방법
- 빌트인 데이터 구조를 사용한 설정
- 외부 파일을 통한 설정
- 환경 변수를 사용한 설정
- 동적 로딩을 통한 설정
관리 방법에는 크게 4가지 방법이 있는데 외부 파일을 통한 설정으로 SECRET_KEY를 관리해보도록 하겠다.
SECRET_KEY를 별도의. json 파일을 만들어 데이터를 저장하고 settings.py에서. json 파일을 읽어와 사용할 수 있도록 하겠습니다.
2. json 파일로 SECRET_KEY 분리하는 방법
2.1 secrets.json 파일 생성
프로젝트에 secrets.json 파일을 1개 생성한 후 다음과 같이 설정합니다.

2.2 settings.py 파일 수정
아래 코드를 settings.py에 추가해줍니다.
import json, os
BASE_DIR = "./"
secret_file = os.path.join(BASE_DIR, 'secrets.json')
with open(secret_file) as f:
secrets = json.loads(f.read())
def get_secret(setting, secrets=secrets):
try:
return secrets[setting]
except KeyError:
err_msg = f"set the {setting} enviroment variable"
raise print(err_msg)
SECRET_KEY = get_secret("SECRET_KEY")
DB_PORT = get_secret("DB_PORT")
코드를 보면 json, os 모듈을 불러와서 SECRET_KEY를 저장해둔 json파일을 읽어온 데이터를 SECRET_KEY, DB_PORT 변수에 저장합니다.
2.3 app.py 파일 수정
app에서 settings 파일을 불러와서 getattr 메서드로 settings에 저장된 SECRET_KEY, DB_PORT 값을 가져와 저장합니다.

SECRET_KEY, DB_PORT 값으로 mongoDB 연결해줍니다.
2.4 .gitignore파일에 리스트 추가
git과 같은 버전 관리 시스템에 PUSH 할 때. gitignore에 secrets.json을 넣어주시면 tracking 되지 않아서 git에 올라가지 않습니다.
앞에서 만든 secrects.json 파일을 리스트에 추가합니다.

그리고. gitignore.io 사이트를 이용해서 프로젝트를 진행할 때 사용하는 언어나 DB 등을 선택하면
알아서 기본적으로 gitginore에 추가되어야 할 파일이나 폴더들을 정리해 줍니다.
이것들을 모두 복사해서 로컬에 만든 gitginore파일에 붙여 넣으면 기본적인 설정은 갖춰집니다.
[gitignore.io 사이트]:https://www.toptal.com/developers/gitignore
gitignore.io
Create useful .gitignore files for your project
www.toptal.com
참고
[파이썬 config 파일의 민감정보 분리방법] : https://scv-life.tistory.com/34
파이썬 config 파일의 민감정보 분리방법
1. json 파일로 분리하는 방법 파이썬 예제 코드 import os, json import pymysql BASE_DIR = "./" secret_file = os.path.join(BASE_DIR, 'secrets.json') with open(secret_file) as f: secrets = json.loads(f...
scv-life.tistory.com
[SECRET_KEY를 분리하는 실습]:https://eveningdev.tistory.com/51
[Django] 시크릿 키(SECRET_KEY) 분리 실습하기
안녕하세요! 이번 시간에는 장고(Django)에서 배포하기 위해 SECRET_KEY를 분리하는 실습을 진행하려고 합니다. 개발 환경 Language: python 3.9.4 IDE: PaCharm community File: secret.json " SECRET_KEY " 란?..
eveningdev.tistory.com
'DB > MongoDB' 카테고리의 다른 글
💻NoSQL이란 (0) | 2022.06.16 |
---|---|
mongoDB 백업 및 복구 파일만들기 (0) | 2022.04.12 |
mongoDB 데이터 모델링 (0) | 2021.12.28 |
[mongoDB] 데이터베이스, 콜렉션, 도큐먼트 네이밍 관습 (0) | 2021.12.23 |