사용자 알림 및 매칭 기능
- SSE를 이용한 실시간 사용자 알림 기능
- JavaScript 에서 페이지를 열때 SSE 서버로 연결 한다.
/sse + userId
SSE Controller 에서 해당 UserID 에 대한 정보를 통해 새로운 Emitter 를 생성하며, static Map 에 KEY(UserID):VALUE(emitter) 방식으로 저장한다.
- 해당 Emitter를
Controller 에서 return 해주고 JavaScript 에서 데이터소스로 아래 알림에 대한 이벤트 리스너를 등록한다.
- 댓글, 대댓글, 좋아요, 팔로우, 참여 신청 및 승인, 이용자 후기, 실시간 매칭에 대한 알림이 발생
실시간 매칭 기능
매칭
- redis와 sse를 활용한 실시간 매칭기능
- 기존 sse 기능은 그대로 받아서 사용합니다.
- 클라이언트에서 운동종목을 받아 서버로 넘겨줍니다.
- 서버에서는 Sorted set에 key를 종목으로 잡고 value를 userId, score를 현재 시간으로 설정합니다.
- 이때 Map에
KEY(UserID):VALUE(Sport) 방식으로 저장합니다 (로그아웃에서 사용)
- Sorted set에 key값의 사이즈가 3이상이면 순서대로 3명을 뽑아 Crew를 생성하여 넣습니다.
- 생성된 CrewId를 사용해 Participation과 채팅방을 생성합니다.
- 생성 후 Sorted Set에서 선택된 3명을 삭제합니다.
- 생성이 완료되면 SSE를 통해 채팅방으로 이동 할 수 있는 채팅방 정보를 넘겨줍니다.
- SSE를 통해 채팅방 URL을 넘겨 알림을 받으면 채팅방으로 자동 이동 할 수 있게 처리합니다.
- 대기열을 확인 할 수 있게 redis의 카테고리별 사이즈를 출력해 줍니다.
취소
- redis와 Map에 저장된 유저를 삭제
- 이때 Sport를 알 수 없으니 Map에 저장된 값을 활용합니다.
- id로 key 조회해서 sport를 확인 후 삭제합니다.
Oauth 로그인
타 플랫폼에서 넘어온 프로필 정보를 토대로 강제로 회원가입을 시킵니다.