인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

ckstj8027님의 프로필 이미지

작성한 질문수

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

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

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

작성

·

70

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 인턴님의 프로필 이미지

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

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

  1. 세션 관리:

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

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

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

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

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