Spring Boot
[Spring] Redis를 이용한 대기열 관리
kittity
2024. 12. 28. 23:47
콘서트 예약 서비스 기능 중 대기열 관리를 위해 RDB 대신 Redis를 적용해 보며 얻은 장점을 정리해보고자한다.
1. DB 부하 감소
- Redis를 사용하면 RDB 보다 비용이 저렴하고 속도가 빠르다. 특히, 대기열 진입은 많은 사용자가 동시에 요청할 수 있는 기능으로 Redis를 사용해 DB 부하를 줄일 수 있다.
- 사용자마다 폴링을 통해 토큰의 상태를 확인하고, 토큰의 상태를 전환하는 과정 등에서 발생하는 DB의 부하를 줄일 수 있다.
2. 대기열 순서 관리 용이
- Redis는 String, List, Sorted Set, Set, Hash 등 다양한 자료구조를 제공한다.
- Redis를 사용하면 대기 상태(WAITING) 토큰을 갖는 User 정보를 Sorted Set 자료구조로, 활동 상태(ACTIVE) 토큰을 갖는 User 정보를 Set 자료구조로 나누어 관리할 수 있다.
- 이때, Sorted Set의 Score를 통해 진입한 시간으로 대기번호와 순서를 용이하게 관리할 수 있으며, WAITING User와 ACTIVE User의 관리와 전환시에도 용이하다.
3. 콘서트 별로 대기열 분리
- Redis를 사용하면 콘서트 별로 키값을 생성하여 콘서트 별로 대기열을 만들고 관리할 수 있다.
- 이를 통해 인기가 많은 콘서트에 사용자가 몰리더라도, 인기가 많지 않은 콘서트 좌석 예약시 영향을 받지 않고 예약할 수 있다.
관련 코드는 아래 GitHub를 참고해주세요.
GitHub - leehanna602/hhplus-server-construction
Contribute to leehanna602/hhplus-server-construction development by creating an account on GitHub.
github.com
728x90