Skip to content
isdnetworks
Go back

설정 옆에 근거를 적는다

(수정됨)

라즈베리 파이에 Redis 를 올렸는데 컨테이너 여럿이 같이 도는 환경이었다. redis.conf 기본 설정에서 열 개쯤을 바꿨고 나중에 왜 이렇게 했는지가 나올 것이 뻔했다.

Table of contents

Open Table of contents

조치 — 값과 근거를 함께

바꾼 것들을 값과 근거를 나란히 둔 표로 정리했다. bind 와 protected-mode 와 save 와 maxmemory 와 maxmemory-policy 와 lazyfree-lazy-eviction 과 io-threads 와 경고 억제가 들어갔다.

값만 있으면 나중에 알아볼 수 없고 근거가 있어야 그것을 바꿀지 말지 판단할 수 있다. 표를 만드는 과정에서 근거가 애매한 항목이 어느 것인지도 함께 드러났다.

원인 — 이유가 둘인 설정

save "" 로 영속화를 끈 것이 특히 설명이 필요했다. 두 가지 방법이 있었는데 기본대로 RDB 를 켜 두는 것과 끄는 것이다. 뒤쪽을 골랐다. 이유는 둘이었다.

용도가 캐시와 세션이라 날아가도 다시 만들면 된다는 것이 하나이고 Redis 공식 문서대로 RDB 는 fork() 로 자식 프로세스를 만들어 스냅숏을 뜨므로 메모리가 적은 환경에서 부담이 된다는 것이 다른 하나다. 대신 재시작하면 세션이 전부 날아가 사용자가 다시 로그인해야 하는 것을 감수했다. 용도만 적으면 반쪽이고 성능 쪽 이유도 함께 적어야 한다.

주의 — 공존에서 나온 제한

maxmemory 와 io-threads 는 이 서비스가 혼자 쓰는 것이 아니라서 정한 값이다. 보드 전체 메모리와 코어 중 일부만 할당한 것이다.

이 값이 최적이라서가 아니라 여럿이 나눠 쓰니 이만큼이라는 뜻이다. 그것을 안 적으면 나중에 왜 이렇게 작게 잡았는지 의아해하며 올리게 되고 그러면 다른 것이 죽는다.

검증 — 용도별 최소 권한

ACL 을 쓰면서 권한을 둘로 나눴는데 앱 연결용은 +@all 이고 헬스체크용은 ACL SETUSER 로 +ping 하나만 허용했다. 헬스체크는 살았는지만 확인하면 되므로 데이터를 읽을 필요가 없다.

전부 막고 확인용 명령 하나만 여는 형태라 그 계정이 유출돼도 아무것도 못 한다. 용도별로 권한을 최소화한 것이다.

배경 — 태그와 환경 정보

기본 설정 파일이 수백 줄이라 어느 것이 바꾼 항목인지 구분이 안 됐다. 그래서 저장소에 있는 redis.conf.example 에 # CUSTOM: 태그를 달아 grep 하면 커스텀 항목만 나오게 했다.

실제 파일이 아니라 예제에 단 것은 실제 파일이 배포마다 생성될 수 있고 예제는 이력이 남으며 다음 사람이 예제를 보고 만들기 때문이다. 마지막으로 보드 사양과 공존 상황과 아키텍처와 버전을 함께 적었는데 같은 값이 다른 환경에서는 틀릴 수 있으므로 옮길 때 다시 정해야 한다는 것을 알리기 위해서였다.

정리


Share this post on:

Previous Post
강제한 인덱스가 만든 지연
Next Post
같은 성공 경로의 다른 응답