웹소켓을 사용했을 때 여러페이지에서 공유해서 사용하는 형식으로 사용자별로 하나의 웹소켓세션만을 생성하여 사용하였을 때 특정 페이지가 닫히는 상황에서 연결이 끊기는 문제점이 생길 수 있다. 또한 페이지별로 웹소켓이 연결되었을 때 다르게 보여줘야 하는 부분이 있다.
따라서 각 페이지별로 이동할때마다 별도의 websocket을 생성해서 연결할 수 있도록 하기 위해서 List에 담아주었다.
key로는 로그인한 사용자 아이디를 담아주고 value로 List형태로WebSocketSession객체를 담아주었다.
완전히 연결이 끊기는 경우는 모든 List의 사이즈가 0이 되는 순간이다.
@Slf4j
@Component
public class HandlerChat extends TextWebSocketHandler {
// (<"bang_id", 방ID>, <"session", 세션>) - (<"bang_id", 방ID>, <"session", 세션>) -
// (<"bang_id", 방ID>, <"session", 세션>) 형태
private List<Map<String, Object>> sessionList = new ArrayList<Map<String, Object>>();
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
String senderId = getMemberId(session); // 접속한 유저의 http세션을 조회하여 id를 얻는 함수
if (senderId != null) { // 로그인 값이 있는 경우만
log.info(senderId + " 연결 됨");
// sessionList.put(senderId, session); // 로그인중 개별유저 저장
}
}
이렇게 연결이 되었을 때마다 session을 추가해주었다.
오류가 날 때는 콘솔도 찍어보구 로그도 찍어보구 디버깅도 해보면서 순차적으로 문제점을 파악하여서 해결책을 내보는 것이 중요하다고 생각이 들었다... 또한 이러한 문제점이 발생했을 때 팀원들과의 소통을 통해서 아이디어를 도출해내고 실제로 해결해보는 좋은 경험이었던 것 같다.