inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

162

kkkkkk

작성한 질문수 42

0

강의 설명중

1 번 방법에서

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

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

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

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

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

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

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

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

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

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

StompHandler에서 connect 맺을때

검증 후에 추가적으로

이메일정보를

String email = claims.getSubject();

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

로 설정해서

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

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

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

 

spring-boot websocket stomp-websocket pubsub vue-3

답변 2

0

bradkim

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

0

인프런 AI 인턴

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

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

  1. 세션 관리:

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

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

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

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

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

ERD 질문

0

54

2

StompHandler 관한 질문

0

80

2

리프레시 토큰은 알아서 구현하면 되는건가요??

0

80

2

cors, csrf 직접 구현

0

65

1

JWT 필터구현

0

98

2

강의 잘듣고 있습니다. 혹시 다음 강의 계획은 없으신가요?

0

58

1

STOMP 동작 과정 질문

0

48

1

chain.doFilter()

0

45

1

자바 21로 소스 작성해도 되나요?

0

60

2

메시지 브로커 선택에 관한 질문

0

65

2

WebSocket과 Spring Security 질문

0

81

2

추가 커스텀 구현 질문 있습니다.

0

61

2

connect와 동시에 구독하는데 구독 검증이 꼭 필요한가요?

0

97

2

저도 동일한 질문인데

0

78

3

token이 필요한 엔드포인트에 의도적으로 토큰 누락시 대처

0

67

2

수업자료가 왜 다 나눠져있나요?

0

78

2

메시지 전송 시 검증

0

61

2

JWT 생성 시 subject 설정에 대한 질문

0

158

3

StompHandler 질문 있습니다.

0

82

2

앱 서비스일 경우

0

84

2

웹소켓 서버 재배포시 고려해야 할 상황 질문

0

107

2

배포 오류 질문

0

124

2

/connect 경로에 대한 토큰 검증의 필요성

0

77

1

JwtTokenProvider 작성중 오류 발생으로 문의드립니다.

0

97

2