강의

멘토링

로드맵

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

리나님의 프로필 이미지
리나

작성한 질문수

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

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

해결된 질문

작성

·

50

0

안녕하세요.

 

우선 좋은 강의 만들어주셔서 정말 감사드립니다.

 

한가지 질문이 있습니다.

 

만약 spring boot 이용해서 stomp 프로토콜을 이용해서 채팅 서비스를 구축 한다고 하였을 때

 

특정 사용자가 최초 웹소켓 connection 연결 후 해당 웹소켓 서버가 재배포 했을때 고려해야 될 상황이 있습니다.

 

그럼 프론트 서버에서는 기존에 연결되었던 프론트 서버 정보는 모두 삭제가 될텐데요.

 

이렇게 된다고 하면 사용자는 채팅 페이지에서 채팅 서비스가 멈춤 현상이 발생 할 것 같습니다.

 

이것을 해결하기 위해

 

특정 프론트 서버 정보는 백엔드 서버 메모리에 저장 하는 것보다 외부 서버에 (Ex> Redis) 관리 해야 할까요?

 

답변 2

1

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

안녕하세요 리나님.

 

일단, 실시간 통신서비스에서 사용자 세션객체를 DB(redis, rdb 등)에 저장하는 것은 기본적으로 스프링의 객체이기에 객체그대로를 저장하는것은 불가능합니다. 우회적인 방법으로 ip정보등을 추출해서 저장하는게 가능할지는 모르겠으나, 일반적이지는 않은것 같아요.

 

그러면 말씀해주신대로 서버 배포 이후에 재시작과정에서 사용자 세션이 유실이 될텐데, 어떤 대안이 현실적일지를 생각해보면, 프론트엔드 코드로서 서버와의 연결이 끊기게 되면 자동으로 retry하는게 가장 현실적이고 효율적일것 같습니다.

 

실시간통신은 프론트와 백엔드 모두에서 세심하게 연결을 맺고, 적절하게 끊어주고, 문제상황에서 연결을 맺는 retry하는 코드가 충분히 고려되어 설계되어야 합니다. 그래서 결론은 프론트엔드와 협업하여 연결이 끊길수 있는 상황을 고려하여 다시 retry하는 식의 코드를 삽입하여 사용자가 인지하지 못한상태에서 서버와의 연결이 다시 맺어지도록 하는게 최선일것 같습니다.

0

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

웹소켓 서버를 재배포할 때의 사용자 연결 문제에 대한 질문을 주셨습니다. 서버가 재배포되면 기존의 연결이 모두 끊어지므로, 이런 상황에서 사용자 경험을 유지하기 위한 방법들에 대해 설명드리겠습니다.

고려해야 할 상황 및 해결 방법

  1. 자동 재연결:

    • 웹소켓 연결이 끊어졌을 경우 클라이언트 측에 자동으로 재연결을 시도하도록 구현하는 것이 좋습니다. 이를 위해 일반적으로 Retry 전략을 사용하여 일정 시간 간격으로 서버에 재접속을 시도하게 만들 수 있습니다. 클라이언트 라이브러리에서 기본적으로 제공하는 SockJS를 통해 이를 쉽게 처리할 수 있습니다.
  2. 스테이트리스 혹은 세션 유지:

    • 연결된 사용자의 상태를 별도의 외부 저장소(예: Redis)를 사용하여 관리하는 방법이 있습니다. Redis의 경우 세션 정보와 연결 상태를 저장하고 이 정보를 바탕으로 재연결된 클라이언트를 기존 상태로 복원할 수 있습니다.
  3. 로드 밸런서 활용:

    • 로드 밸런서를 통해 다수의 웹소켓 인스턴스로 트래픽을 분산시키고, 이를 통해 특정 서버가 다운되어도 다른 서버로 요청을 옮기게 할 수 있습니다. Elastic Load Balancing, AWS API Gateway 등 다양한 서비스를 통해 이를 설정할 수 있습니다.
  4. 서버에서의 Graceful Shutdown:

    • 서버 재배포(혹은 종료) 전, 연결된 클라이언트에게 이를 알리고 연결을 종료하는 ‘Graceful Shutdown’ 방식을 사용할 수 있습니다. 이는 클라이언트가 재연결을 준비할 시간을 주기 때문에 부드러운 전환이 가능합니다.

이와 관련된 내용과 유사한 질문을 다룬 게시물을 아래 소개 드립니다:
- 웹소켓 연결 중단 시 처리 방법

위 방법들은 모두 서버 재시작 시 사용자의 편의성을 보장하고 시스템의 견고성을 높이는 데 기여할 수 있습니다. 각 솔루션의 장단점과 팀의 요구사항을 고려하여 적절히 선택하시기 바랍니다.

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

리나님의 프로필 이미지
리나

작성한 질문수

질문하기