Inflearn brand logo image

인프런 커뮤니티 질문&답변

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

웹소켓/STOMP 채팅서비스(spring, vue, redis)

메시지읽음처리, 채팅방나가기

강의 내 1 번 방법에 대한 질문

작성

·

129

0

강의 설명중

1 번 방법에서

누가 서버에 커넥션을 맺고 있고 subscribe 하는지 서버에 메모리를 만들어서

관리하는 로직을 사용한다고 하셨는데

이전에 강의에서 배운내용에 따르면

스프링과 stomp 는 기본적으로 세션관리를 내부적으로 처리한다고 하셔서

즉 저희가 직접 접근을 하지못하는데 이러면

이벤트 리스너로 따로 sessions라는 자료구조를 만든 것을 활용해서

코드를 작성해야 하잖아요 ?

그리고 세션은 랜덤으로 스프링에서 생성하는데

이러면 세션이 몇개인지 카운트 및 각각 세션id가 부여되긴하는데

그게 어떤 사용자인지 구분이 안되기에

StompHandler에서 connect 맺을때

검증 후에 추가적으로

이메일정보를

String email = claims.getSubject();

accessor.getSessionAttributes().put("email", email);

로 설정해서

이벤트 리스너에 넘겨서 세션을 저장하는 식으로 생각했는데 맞을까요 ?

이후 서버에서 처리할때 subscribe하면서 , 동시에 누가 서버에 커넥션을 맺고있는지 아닌지 여부를 파악하는

(다소 복잡한) 로직을 작성해서 처리할 수 있다 이게 맞는 흐름일까요 ?

 

답변 2

0

bradkim님의 프로필 이미지
bradkim
지식공유자

네 맞습니다 보통 map과같은 자료구조에 사용자 emali을 키값으로하고 세션을 밸류로 관리를 많이합니다.

0

안녕하세요, 인프런 AI 인턴입니다. ckstj8027님.

웹소켓과 STOMP를 사용하여 서버에서의 세션 관리를 다루는 방법에 대해 깊이 있는 질문을 주셨네요. 강의에서 설명된 개념을 바탕으로 현재 이해하신 부분을 강화할 수 있도록 몇 가지 포인트를 정리해 드리겠습니다.

  1. 세션 관리:

    • STOMP와 Spring을 사용하면 기본적으로 웹소켓 세션 관리는 내부적으로 처리됩니다. 하지만, 세션을 추적하거나 추가 정보를 유지하기 위해 특정 이벤트 리스너를 구현할 수 있습니다.
    • 말씀하신 대로, StompHandler에서 사용자 이메일 정보를 세션에 저장하는 방법은 적절합니다. 이렇게 함으로써 누가 어떤 세션인지 파악할 수 있고, 세션의 상태를 유지할 수 있습니다.
  2. 이벤트 리스너 및 세션 정보 관리:

    • 세션이 생성되거나 닫힐 때 이벤트를 캐치해서, 사용자 세션 정보를 관리하는 구조체(예: Map 등)에 저장할 수 있습니다. 이렇게 하면 현재 연결 상태 및 사용자 정보를 세션에 편리하게 유지할 수 있습니다.
    • 예를 들어, 사용자 이메일 정보를 세션 속성에 저장하면, 이후에 해당 세션에서 어떤 사용자가 연결되어 있는지를 파악할 수 있습니다.
  3. 구독(subscribe) 및 세션 상태 관리:

    • 사용자가 특정 토픽에 구독하도록 하면서, 관련 정보를 세션에 저장하고 관리할 수 있습니다.
    • 세션이 연결되었는지 여부를 파악하는 로직은 이벤트 리스너에서 커넥션 및 디스커넥션 이벤트를 감시하면서 처리하시면 복잡한 세션 상태 관리 로직이 가능합니다.

이와 관련된 정보를 더 알아보시려면 아래의 유사한 질문 링크를 참고해 보세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ckstj8027님의 프로필 이미지
ckstj8027

작성한 질문수

질문하기