인프런 커뮤니티 질문&답변
장고 운영환경과 개발환경에서 json 파일 업데이트 시간차 오류
작성
·
347
·
수정됨
0
안녕하세요.
장고에서 보안이 필요한 SECRETKEY 등의 내용은 .gitignore로 설정한 json 파일에 따로 저장하여 사용하고 있습니다.
csrf token 값도 이렇게 저장하고 업데이트 하여 필요에 따라 json 파일로 부터 가져오거나, 업데이트하여 사용 중에 있습니다.
개발환경에서는 어느 뷰함수에서 새로운 값으로 업데이트 한 후에, 다른 뷰함수에서 이 값을 가져오면 당연히 업데이트 한 값이 나타나는데, 문제는 운영환경(AWS)에서는 업데이트 되어 있지 않고 이전의 저장된 값이 나타난다는 점입니다.
json 파일에 대한 컨트롤은 기존의 settings.py를 환경에 따라 셋으로 분리한 모듈 중 하나인 settings/base.py에서 처리하고 있습니다. 공통 요소는 base.py, 운영 환경은 prod.py, 개발 환경은 local.py에 각각 설정하였습니다.
base.py 에서 다음과 같이 json 파일을 다루고 있습니다.
#settings/base.py
secret_file = os.path.join(BASE_DIR, 'secrets.json')
with open(secret_file) as f:
secrets = json.loads(f.read())
# key가 setting인 value 가져오기
def get_secret(setting, secrects=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
# key/value 신규 저장 또는 기존 값 업데이트
def update_secret(key, value):
secrets[key] = value
with open(secret_file, 'w') as outfile:
json.dump(secrets, outfile, indent=1)
SECRET_KEY = get_secret('SECRET_KEY')그리고 base.py 의 get_secret 함수 또는 update_secret함수를 views.py 에서 호출하여 필요한 값을 가져오고 있습니다.
개발 환경에서는 이러한 값들을 업데이트 하고 가져오면, 너무나도 당연히 그 업데이트 된 값으로 나타나지만, 운영 환경에서는 이전에 저장되었던 값이 나타납니다.
예를 들면 다음과 같습니다.
# 개발환경 / views.py
from config.settings import base
def view_1(request):
...
# 새로운 csrf_token 값('bbb') 받아오기
csrf_token = request.POST.get('csrfmiddlewaretoken')
# csrf_token 값 업데이트(기존 값 'aaa')
base.update_secret('csrf_token', csrf_token)
...
def view_2(request):
...
# 업데이트 된 csrf_token 값 가져오기
csrf_token = base.get_secret('state')
# 개발환경 : 업데이트 된 값 'bbb' 가져옴
# 운영환경 : 이전의 저장된 값 'aaa' 가져옴희한하게 운영 환경에서도, view_1에서 csrf_token을 업데이트한 시점에 json 파일을 열어보면 업데이트 된 값으로 바뀌어 있다는 점입니다. 그런데도 어디서 이전의 값을 참조하는 건지 도무지 알 수가 없어서 너무나 답답합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
장고 운영 환경과 개발 환경에서 json 파일 업데이트 시간차 오류에 대해 질문하셨군요. 제가 이해한 바로는 운영 환경에서는 업데이트 된 json 파일의 값이 나오지 않고 이전의 값이 계속해서 나온다는 것인가요?
json 파일에 대한 컨트롤은 settings.py를 환경에 따라 셋으로 분리한 모듈 중 하나인 settings/base.py에서 처리하고 있다는데요. base.py에서 다루는 json 파일에 대해 업데이트가 되었음에도,업데이트된 값을 가져오지 못하는 문제가 발생하고 있습니다.
해당 문제는 운영환경과 개발환경에서 발생하고 있는 데이터 불일치 문제로 생각됩니다. json 파일을 업데이트한 view 함수와 그 값을 가져오는 view 함수가 서로 다른 프로세스에서 동작하기 때문에 생기는 문제인 것으로 추측됩니다.
이를 해결하기 위해서는, json 파일을 읽어오는 함수가 호출될 때마다 최신 파일을 읽어오도록 수정하는 것이 필요합니다. 또는, 파일을 비교해보고 새로운 값을 확인할 때마다 파일을 다시 불러오는 것도 방법이 될 수 있습니다.
이 부분 확인하시고 수정해보시길 바랍니다. 어려운 문제가 있으시면 다시 질문해주세요. 감사합니다.




