1. 문제
매칭이 완료되었는지 확인하기 위해 사용자가 화면을 계속 새로고침해야 하는 불편함이 있습니다.
계속해서 서버에 ‘매칭 됐어?’라고 묻는 방식은 서버에 엄청난 무리를 주고 사용자 스마트폰 배터리를 갉아먹습니다.
2. 왜 필요한가
실시간 매칭 서비스에서 ‘즉각적인 알림’은 생명입니다.
상대방이 연결되면 유저가 화면을 뚫어져라 쳐다보고 있지 않아도 즉시 알아서 화면이 넘어가 줘야 답답함을 느끼지 않습니다.
3. 기대효과
새로고침 없는 실시간 피드백을 통해 답답함이 사라지고, 유저의 서비스 몰입도와 만족도가 극적으로 상승합니다.
서버 요청량이 획기적으로 줄어들어, 매칭 서버가 수만 명을 동시에 안정적으로 수용할 수 있게 됩니다.
4. 구현 방향
서버와 브라우저 사이에 끊기지 않는 일방통행 전용 도로(SSE)를 뚫습니다.
매칭 성공 소식을 서버가 먼저 유저의 화면으로 실시간으로 쏘아주도록 통신 방식을 근본적으로 개선합니다.
public SseEmitter subscribe(Long userId) {
SseEmitter emitter = new SseEmitter(60000L); // 60초 타임아웃
emitterRepository.save(userId, emitter);
return emitter;
}
public void notifyMatchSuccess(Long userId, String targetInfo) {
SseEmitter emitter = emitterRepository.get(userId);
if (emitter != null) {
emitter.send(SseEmitter.event().name("MATCH").data(targetInfo));
}
}
5. 비즈니스 가치
즉각적이고 생동감 있는 사용자 경험(UX)을 제공하여 경쟁 서비스 대비 확실한 차별화를 이뤄내고 유저 잔존율을 높입니다.
쾌적한 속도는 곧 서비스의 퀄리티로 인식되어 활성 사용자 수 증대에 기여합니다.