디스콰이엇 팔로우 기능 개발 노트 (개발 동기, Redis 활용, ElasticCache 환경 등)
지난주 배포한 디스콰이엇 팔로우 기능개발할때 여러 기술적 고민들이 있었는데요, 이에 대한 내용을 디스콰이엇에서 소프트웨어 엔지니어로 일하고 계신 재환님께서 정리해주셨습니다. 비슷한 고민이 있으신 분들은 참고해보세요 :)
요약
- 개발 동기: 올라오는 글들이 많아지면서 개인화된 피드를 고민했고 팔로우 기능을 구현하기로 했음.
- Redis 활용: Relevance score 시스템으로 피드를 구성하는 것을 생각했으나 동적으로 DB에 있는 포스트들을 정렬하는 것은 비효율적이였고 유저별로 사전에 정렬된 피드를 Push(fan-out-on-write)나 Pull(fan-out-on-load)형태로 가져오는 방식을 생각했음. Redis가 두가지 방식 다 수용함으로 Redis 사용하기로 결정
- ElasticCache 환경: Redis는 클러스터 안에 master node와 replica node가 있는 형태인데 이때문에 관리가 어렵다는 단점(네트워크 문제, Key distribution 문제)이 있음. 이 문제를 해결하기 위해 ElasticCache를 활용