Redis 사용해 사용자 실시간 상태를 구현해보기
- 기존의 Redis를 사용한 실시간 사용자 상태 기능을 만들었으나 폴링 방식이라 불필요한 서버 부하와 자원 낭비 가 심했습니다.
- 비유: 차에 탄 아이가 10초마다 "아빠, 다 왔어?"라고 묻는 것과 같습니다. 99%의 대답은 "아니, 아직"이지만 아빠(서버)는 매번 대답해주느라 지치게 됩니다.
- 결과: 사용자 수가 늘어날수록 서버의 CPU, 메모리, 네트워크 자원이 기하급수적으로 낭비되어 서버 증설 비용이 증가하고 성능이 저하됩니다.
- 그리고 진정한 실시간은 아니였습니다. 폴링주기가 30초라 그만큼 딜레이가 생기고 그렇다고 1초로 줄이게되면 서버에 엄청난 부담이 생기게됩니다. 아래는 원래코드 ..


왜 Redis를 선택했을까?
처음에는 MySQL로 사용자 상태를 저장하려고 했는데, 문제가 좀 있었습니다.
- 사용자가 접속할 때마다 DB에 UPDATE 쿼리를 날리면 성능이 안좋을것 같았음
- 실시간으로 상태가 바뀌는데 DB에 계속 쓰기 작업을 하면 부담이 클 것 같았음
그래서 인메모리 데이터베이스인 Redis를 사용하기로 결정 (램에 저장하기때매 읽기쓰기가 빠름)
전체 구조
- 사용된 기술
- Spring Boot + WebSocket (STOMP)
- Redis (상태 저장용)
- 프론트엔드에서 WebSocket 연결
- Redis 키 설계

Redis에서 사용자 상태를 관리하기 위해 3가지 키 설계했습니다.