Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] SimpMessageHeaderAccessor 종속성 제거 #4

Open
gyehyun-bak opened this issue Jan 26, 2025 · 0 comments
Open

[FEATURE] SimpMessageHeaderAccessor 종속성 제거 #4

gyehyun-bak opened this issue Jan 26, 2025 · 0 comments

Comments

@gyehyun-bak
Copy link
Owner

문제점 및 요구 사항

  • 현재 사용자의 sessionId와 nickname을 저장하고, 참가/퇴장/채팅 메시지 등의 비즈니스 로직을 구현하기 위해 SimpMessageHeaderAccessor를 통한 getSessionAttributes() 등을 이용하고 있습니다.
  • 이는 기능 확장을 위해서 개발자가 WebSocketSession 로직을 알아야 한다는 종속이 생기는 것을 의미합니다.
  • 또한 아래와 같은 방식으로 데이터를 저장하고 조회하면, 도메인 스펙에 대해서 한눈에 알 수 없고, 비즈니스 로직 변경 시 수많은 중복 변경 지점이 생깁니다.
accessor.getSessionAttributes().put("nickname", nickname);
...
accessor.getSessionAttributes().get("nickname"));

해결/구현 방법

  • WebSocketSession의 attributes를 사용하는 대신 대응하는 Model 클래스를 정의해 사용합니다.
    • 해당 Model 클래스에 비즈니스 로직에 필요한 필드를 정의합니다.
  • 각 세션의 데이터를 저장하고 관리할 서비스 클래스를 추가합니다.
    • 세션 데이터의 저장은 ConcurrentHashMap을 활용합니다.

고려사항

  • 해당 구현은 웹 애플리케이션 서버가 하나인 모놀리식 아키텍처를 기반으로 합니다. 웹소켓 세션 연결을 관리하는 서버가 둘 이상이 되는 경우 외부 분산 데이터베이스를 활용해야 합니다.
@gyehyun-bak gyehyun-bak changed the title [FEATURE] WebSocketSession 종속성 제거 [FEATURE] SimpMessageHeaderAccessor 종속성 제거 Jan 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant