Skip to content
isdnetworks
Go back

무상태 환경에서 파일에 쓰면

담당자가 화면에서 입력한 값을 저장하는 기능이 배포 대기 중이었다. 코드를 읽다가 저장 위치가 컨테이너 안의 파일인 것을 봤다.

Table of contents

Open Table of contents

컨테이너 안 파일에 쓰던 코드

저장 함수가 실행 디렉터리 아래의 파일을 열어 그대로 쓰고 있었다. 읽을 때도 같은 파일을 연다.

운영은 컨테이너 기반이고 인스턴스가 뜨고 지는 구조였다. 그러면 그 파일의 수명이 컨테이너의 수명과 같아진다.

사라지는 시점과 불일치

재배포하면 새 컨테이너에 그 파일이 없고 재시작해도 마찬가지다. 인스턴스가 여럿이면 요청이 어디로 가느냐에 따라 다른 파일을 읽고 쓴다.

입력한 값이 없어지는데 그것도 불규칙하게 없어진다. 사라지는 시점이 배포 주기와 얽혀 있어서 값이 언제 사라질지 사용자 쪽에서 예측할 수 없다.

개발 환경에서는 잘 된다

이 문제가 까다로운 것은 개발 환경에서 잘 돌기 때문이다. 컨테이너가 하나이고 잘 안 죽으므로 입력하고 조회하면 그대로 나온다.

배포 직후에도 잘 된다. 며칠 뒤 다음 배포 때 사라지고 그때는 원인을 저장 방식과 연결하기 어렵다.

저장소에 있던 선례

저장소를 뒤져 보니 담당자 배정을 저장하는 비슷한 기능이 이미 있었다. 그쪽은 오브젝트 스토리지에 쓰고 있었다.

이력을 보니 처음에는 로컬 파일이었다가 바뀐 것이었다. 같은 함정을 이미 겪고 해결한 패턴이 저장소 안에 있었으므로 새로 설계할 것 없이 위치와 키만 바꿔 재사용하면 됐다.

배포와 저장 방식 전환의 분리

이것을 알기 전에는 이 기능의 남은 일이 배포 하나인 줄 알았다. 실제로는 저장 방식 전환과 배포 둘이었다.

배포만 하면 기능은 보이는데 값이 안 남고 담당자는 매번 다시 입력하게 된다. 작업 목록에 두 줄로 나눠 적은 것이 요점이었는데 한 줄이면 배포만 하고 끝낼 수 있기 때문이다.

같은 검토가 반복될 것이므로 파일에 쓰는 코드가 있으면 그 데이터가 재배포 뒤에도 필요한지 묻는 항목을 리뷰에 넣었다. 진짜 임시 파일도 있으므로 임시면 임시 디렉터리에 두어 의도가 드러나게 했다.

정리


Share this post on:

Previous Post
옮길 것의 명시 목록
Next Post
우리는 중지했는데 저쪽은 판매 중