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

Refactor(#242): 미디어 서버 역할 분리하기 #246

Conversation

platinouss
Copy link
Member

@platinouss platinouss commented Dec 10, 2023

작업 개요

Redis를 활용하여 미디어 서버 역할 분리하기 close #242

작업 사항

  • Redis에 클라이언트 정보(클라이언트 타입, 강의실 ID) 저장하기
  • Redis에 강의실 정보 저장하기
  • Redis에서 해당 강의실의 강의 시작 시간 가져오기
  • 화이트보드 내용이 변경될 때마다 화이트보드 데이터 갱신하기
  • 참여자 입장 시 Redis에서 최신 화이트보드 데이터 가져온 후 전달하기
  • 강의 종료 시 Redis에서 강의실 정보 제거

고민한 점들(필수 X)

Redis를 사용하려는 이유는 크게 두 가지 정도이다.

  1. Redis Streams를 사용할 수 있다.
    • 보류 리스트(pending list)를 활용하면 발표자가 네트워크 문제로 재 입장 하더라도 아직 다루지 않은 질문 사항을 쉽게 가져올 수 있다.
    • 그 밖에 적절한 데이터를 쉽게 가져올 수 있다.
  2. 데이터에 유효 기간을 설정할 수 있다.
    • 최대 24시간 동안 강의를 진행하는 사람은 없기 때문에 혹여나 지우지 못한 데이터가 있더라도 하루가 지나면 자동으로 삭제되도록 적용할 수 있다.

미디어 서버 아키텍처

현재 미디어서버 메모리에 RTCPeerConnection, Socket, 클라이언트 타입, 강의실 ID를 관리하고 있었는데 재접속하더라도 불변 데이터인 클라이언트 타입과 강의실 ID는 Redis에 저장하도록 구성했습니다.
…. #242

현재 미디어서버 메모리에 강의 시작 시간, 현재 화이트보드 정보, 발표자 정보, 참여자 정보 등을 관리하고 있었는데 재접속하더라도 불변 데이터인 발표자 Email, 강의 시작 시간, 최신 화이트보드 내용은 Redis에 저장하도록 구성했습니다.
@platinouss platinouss added 🛠️ Refactor 리팩토링 작업 BE 백엔드 작업 labels Dec 10, 2023
@platinouss platinouss added this to the 5주차 milestone Dec 10, 2023
@platinouss platinouss self-assigned this Dec 10, 2023
@boostcampwm2023 boostcampwm2023 deleted a comment from netlify bot Dec 10, 2023
Copy link
Collaborator

@tmddus2 tmddus2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고 많으셨습니다! 일단 머지할게요

@@ -31,16 +35,20 @@ export class RelayServer {
createRoom = (socket: Socket) => {
try {
const email: string = getEmailByJwtPayload(socket.handshake.auth.accessToken);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 accessToken은 로그인할 때 발급했던 토큰인가요??

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 맞습니다 !

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

강의실 입장할 때 가장 최신의 화이트보드 값은 어디서 가져오나요??

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tmddus2 최신 화이트보드 데이터는 roomInfo.currentWhiteboardData에 저장되어 있으며,
강의실 입장 시 findRoomInfoById() 함수를 통해 roomInfo를 가져오고, 참여자에게 최신 화이트보드 데이터를 전달하는 부분은 RelayServer.ts의 111라인입니다.

@tmddus2 tmddus2 merged commit ad48809 into boostcampwm2023:dev Dec 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 작업 🛠️ Refactor 리팩토링 작업
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Refactor: Redis를 활용하여 미디어 서버 역할 분리하기
2 participants