1. 문제
수백 명의 유저가 동시에 매칭 버튼을 누르면, 순서가 엉키거나 누군가는 하염없이 기다리기만 하는 병목이 발생합니다.
기존 데이터베이스 방식으로는 폭주하는 매칭 요청을 실시간으로 감당하지 못해 서버가 마비되는 현상이 나타납니다.
2. 왜 필요한가
공정하고 빠른 매칭 시스템은 서비스의 첫인상을 결정짓는 가장 중요한 요소입니다.
누가 먼저 왔는지 정확히 기억하고, 조건에 맞는 짝을 1초 안에 찾아주지 않으면 사용자는 지루함을 느끼고 이탈합니다.
3. 기대효과
피크 타임에 수만 명이 몰려도 억울하게 기다리는 유저 없이 빠르고 공정하게 매칭이 체결되어 서비스 만족도가 폭발적으로 증가합니다.
매칭 대기 시간이 획기적으로 단축되어 체감 속도가 비약적으로 상승합니다.
4. 구현 방향
요청이 도착한 시간을 기준으로 줄을 세워주는 고성능 메모리 대기열(Redis ZSET) 시스템을 도입합니다.
가장 오래 기다린 사람부터 우선적으로 꺼내어 순식간에 통화방으로 연결시키는 초고속 로직을 적용했습니다.
// 사용자를 현재 시간을 점수로 대기열에 추가 (ZADD)
long timestamp = System.currentTimeMillis();
redisTemplate.opsForZSet().add("matching:queue", userId, timestamp);
// 가장 먼저 들어온 2명을 1초 안에 매칭 (ZRANGE)
Set<String> matchedUsers = redisTemplate.opsForZSet()
.range("matching:queue", 0, 1);
if (matchedUsers.size() == 2) {
redisTemplate.opsForZSet().remove("matching:queue", matchedUsers.toArray());
}
5. 비즈니스 가치
폭발적인 트래픽 성장에도 끄떡없는 매칭 코어 시스템을 갖춤으로써, 대규모 마케팅이나 접속자 폭주 이벤트 시 든든한 방어막이 됩니다.
빠른 매칭은 유저의 잦은 재방문을 유도하는 최고의 사용자 경험입니다.