ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 환경설정 값 관리하기
    컴퓨터 공부 ver 0.1/Django 2019. 2. 1. 13:13
    반응형

    사용 이유

    아무래도 서버 환경 설정값들 중에는 보안상 중요한 것들(DB ID, Password, secret key 등등)을 사용할 수 밖에 없죠.
    그런데 이러한 값들을 코드에 그냥 그대로 넣으면? 

    저처럼 고생을 합니다...

    서버 개발 공부를 시작할 때쯤, AWS 공부하겠다며 AWS Key ID와 Access Key를 settings.py 파일에 그대로 저장하여 git에 커밋을 했드랍니다.
    그 사실을 모른체 몇 일이 지났을까..네 그렇습니다. 요금 폭탄을 맞았습니다. 400불 정도 나왔던 것 같은데.
    안되는 영어로 어찌어찌 해결은 했답니다. (그 후 AWS의 충성 고객이 됐죠)

    무튼, 그리하여 이러한 설정값들은 따로 관리하는게 좋습니다. 특히 따로 관리하면 좋은 점은 나중에 배포할 때 입니다.
    이건 나중에 AWS Beanstalk 배포 설정하는 글에 올려볼게요.

    정리 해놓은 설정 파일과 코드는 같이 첨부 했으니 필요하면 가져다 쓰세요.

    properties.json

    설정 파일의 포멧은 중요하지 않습니다. 관리하기 편하게 쓰시면 됩니다.
    {
    "DEFAULT_DB_HOST": "",
    "DEFAULT_DB_PORT": "",
    "DEFAULT_DB_NAME": "",
    "DEFAULT_DB_USER": "",
    "DEFAULT_DB_PASSWORD": "",
    "DJANGO_SETTINGS_MODULE": "project.settings.local",
    "DJANGO_SECRET": "aaaaaaaaabbbbbbccccccccddddddddddd",
    "IS_DEBUG": "TRUE"
    }

    settings/local.py

    우선, 파일 경로 설정
    SETTINGS_PATH = os.path.dirname(os.path.abspath(__file__))
    PROPERTIES_FILE = os.path.join(SETTINGS_PATH, 'properties.json')

    그리고 파일을 읽습니다. 예외처리는 pass 했는데요. 왜냐하면, 어디선가 설정 파일을 못가져오면 에러가 나서 서버가 안 돌아갈꺼예요.
    그래도 error 메시지를 로그에 남기는 걸 추천드립니다.

    try:
    with open(PROPERTIES_FILE) as properties_file:
    properties = json.loads(properties_file.read())
    for key, value in properties.items():
    os.environ[key] = value
    except FileNotFoundError as e:
    pass

    환경 설정 읽어오기. 네 아래처럼 읽어오면 됩니다. 설정을 읽어오는 수만가지 방법 중 두 가지를 보여드린 겁니다.

    # SECURITY WARNING: keep the secret key used in production secret!
    SECRET_KEY = os.environ['DJANGO_SECRET'],
    DEBUG = os.environ.get("IS_DEBUG", "False").upper() == "TRUE"


    서버 설정값을 따로 관리하면 좋은 점들

    이렇게 설정값들을 코드가 아닌 환경설정값으로 관리하면 '참 좋은데...뭐랄까 참좋은데 말입니다' 이런건 아니구요.

    • 기본적인 보안을 지킬 수 있을 뿐만 아니라,
    • 서버의 설정값을 변경할 때, 코드 수정 후 배포가 아닌, 설정값 변경 후 재부팅만 하면 되는 아주 편한 상황이 된답니다.
    • 그 외에도 상황에 따라 환경값을 바꿔야 하는 경우에도 유연하게 대처할 수 있습니다.
      (예를 들면, IS_TEST, IS_PRODUCTION 등의 설정 값들에 따라 실행되는 코드를 달리해야 하는 경우(이러한 경우는 최대한 피하는 것이 좋겠지만요))

    물론 단점도 있습니다.

    • 설정값이 추가되거나 삭제되어 배포하는 경우, 굉장히 주의해야 합니다. 팀원간의 설정값 공유도 중요합니다!
    • 코드에 없다보니 버전관리가 어렵습니다. 누가 수정 했는지 추적이 어렵죠.
    • 그리고 실수로 환경설정값을 변경하면...서버가 죽습니다.

    마무리

    그 밖에도 불편한 점들은 있었던 것 같습니다. 그래도 코드에 넣어서 배포해서 문제가 생기는 것보다는 낫다고 생각해요.
    그리고, 마지막으로 말씀드리면, properties.json 파일을 repository 올리시면 안됩니다. 절대!
    git을 쓰고 계시다면, gitignore 리스트에 넣어서 쓰시는 것을 추천드립니다.


    아래 이미지는 내용과 무관합니다.


    반응형

    댓글

Designed by Tistory.