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

류돌프님의 프로필 이미지

작성한 질문수

대용랑 채팅 TPS에 대한 stateful 서비스 구축하기

Kafka를 통한 Subscribe 마무리하고, API를 통해 확인해 볼게요.

채팅 클라이언트는 누구와 연결되는지

해결된 질문

24.07.08 13:29 작성

·

124

1

안녕하세요 강사님

복습을 하다가 궁금한 점이 3가지 정도 생겨 질문드립니다.

1) 채팅 유저가 최초 접속을 하면

  1. 컨트롤 서버에 접속

  2. 가용 가능한 채팅 서버의 주소를 응답받음

  3. 해당 채팅 서버와 소켓 연결

이런 흐름으로 이해했는데 맞을까요?

프론트 단 코드에서는 채팅 서버와 직접 소켓 연결하는 코드만 있어서 질문드립니다.

2) 사용자가 채팅 시, 채팅 서버가 도중에 다운되면 사용자는 컨트롤 서버에 재연결 시도하여 가용가능한 채팅 서버를 재할당 받는 것인가요?

3) 컨트롤 서버에 api 주소 중 /server-list 라는 api 가 있던데 해당 API 는 누가 호출하는 것인가요? 가용가능한 서버 리스트를 내려주는 API 로 이해했는데, 그럼 채팅 사용자가 해당 API 를 직접 찌르는 걸까요?

답변 1

1

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

2024. 07. 08. 15:13

안녕하세요 파이후님!! 자주 질문 주셔서 너무 감사드립니다!!

먼저 결론부터 말씀드리자면, FE에 대한 코드는 완성본이라고 할수가 없어요.
저는 기본적으로 BE를 주로 개발하기 떄문에, FE개발에 대해서 잘못된 지식을 전달 할 우려가 있어서 /server-list를 사용하는 FE까지는 다루지 않습니다.

기본적인 흐름은 다음과 같아요.
1. /server-list를 호출하여 가용가능한 소켓 서버 확인

  1. 서버에 접속을 진행

  2. 접속 후 에러가 발생을 하면, 다시 /server-list를 호출함으로써 소켓 셋팅

 

컨트롤 타워 API같은 경우에는 wss통신이 없기 떄문에, 인스터스를 무중단으로 재배포하는데에 있어서 큰 제약이 없습니다. 그래서 이름을 컨트롤 타워라고 부르고 있는거고요.

 

어느정도 이해가 되셨을까요?? 해당 아키텍처는 얼마든지 변경이 가능합니다. 제가 알려드리는 아키텍처는 하나의 방법일 뿐이니 추가적으로 고민해보시면 좋을 꺼 같아요.

 

감사합니다!

류돌프님의 프로필 이미지
류돌프
질문자

2024. 07. 08. 16:51

아하 그렇군요 ㅎㅎ

이해한게 맞다면 프론트 단에서는 가용가능한 채팅서버의 상태에 따라 연결을 맺는 채팅 서버가 동적으로 변경될 수 있다는 것이군요.

export const host = "http://localhost:1010"; // 여기 host 값이 동적으로 변경
export const socketHost = "ws://localhost:1010/room-chat";  // 마찬가지


항상 빠른 답변 주셔서 정말 감사합니다! 많이 배우고 있습니다 ㅠㅜ

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

2024. 07. 08. 17:45

도움이 된거 같아서 뿌듯하네요!!

앞서 말씀드렸듯이 이 아키텍처는 일종의 예시입니다. 다양한 방법이 존재하니깐요 ㅎㅎ

 

이 강의가 파이후님에게 개발의 재미를 불러일으켰길 바랄게요!! 질문 감사합니다!