개요

채팅 기능 고도화에 있어서, 캐시 저장소로 사용되는 Redis와 MongoDB를 연동하여, 보다 효율적인 채팅 서비스 개발이 가능한지 알아본다.

현재는 Redis와 MongoDB 양측에 채팅 내역을 모두 저장하고, 채팅방 기록을 불러올 때, 최근 채팅 내역 데이터는 Redis에서 불러오고, 이전 채팅 내역은 Mongo측에서 불러올 수 있도록 구성하려 한다.

더 효율적인 구성을 위해, Redis 캐시 데이터를 Queue처럼 사용하여, Redis 캐시 데이터에서 최근 기록을 관리하고, 이후 최신 기록에서 밀려난 데이터를 MongoDB측으로 전달이 가능한지 알아보고자 한다. (MongoDB와 Redis의 조합이 많이 사용된다는 이야기를 듣고, 왠지 지원할 것 같은 느낌을 받음)

잘 정리된 블로그 요약

https://inpa.tistory.com/entry/REDIS-📚-캐시Cache-설계-전략-지침-총정리

Redis와 DB를 동기화 하는 전략은 기본적인 캐시 설계 전략으로, **‘Write Back 패턴’**이 내가 원하는 구조와 가장 유사하다.

동시에 캐시에 데이터를 모아서 단번의 배치작업으로 DB에 반영할 수 있다는 점에서 추가적인 이점을 얻을 수 있을 것이라는 생각이 들었다.

하지만 Redis에서 오류가 발생한다면, 이미 입력된 채팅 내역이 변경될 수 있다는 취약점은 확실히 큰 문제가 될 수 있다는 생각이 들었다.

그렇기에 Read Through + Write Around 조합의 캐시 구성이 현 상황에서 가장 알맞고, 안전할 것이라는 생각을 갖게 되었다.

필요 기능 확인

결국 Redis나 MongoDB에서 각 외부 저장소와 연결을 제어하는 직접적인 기능이 존재하는지 알아야한다.

무엇보다 ‘Read Through + Write Around 조합’ 그림에서는 DB에서 캐시에 직접 데이터를 전달하는 듯이 표현되었지만, 이러한 과정이 실제로 가능한지 알 수 없고, 데이터 동기에 문제가 생길것을 고려한다 한들, DB와 캐시에 둘다 Write 하고, 많이 사용되는 최신 내역만 Redis에서 요청하면 되는 것이 아닌가 하는 생각이 든다.

다양한 연동 기능

알아본 바로는 아래와 같은 기능이 존재한다고 한다.