-
Notifications
You must be signed in to change notification settings - Fork 2
11 20 회의
Seungheon Han edited this page Nov 30, 2024
·
1 revision
- 백엔드 이벤트 필요: 사용자 선택에 따른 화질 조정 이벤트 구현.
-
화질 조정 테스트 필요:
-
기본값:
auto
로 설정 (bitrate는 min, max 값에 따라 자동 설정). - 사용자가 360, 480, 720 중 하나를 선택 → 이벤트 발생.
- 서버에서 Consumer의 bitrate를 사용자 선택에 맞게 고정.
-
기본값:
-
이벤트 흐름:
- 채팅방 생성: 방송 생성 시 채팅방 생성 이벤트 발생 (소켓 2개).
- 채팅방 입장: 시청 페이지 입장 시 채팅방 입장 이벤트 발생 (소켓 2개).
- 채팅방 떠나기: 시청 종료 시(창 닫기 등) 채팅방 떠나기 이벤트 발생.
- 채팅방 삭제: 방송 종료 시 채팅방 삭제 이벤트 발생.
-
채팅 이벤트:
- 사용자가 채팅 입력 → 이벤트 발생.
- 해당 채팅방의 모든 유저에게 채팅 전달.
- 모든 유저는
socket.on
으로 채팅 수신 후 상태 업데이트 및 UI 리렌더링.
-
썸네일 업데이트:
- 주기: 30초마다 썸네일 변경 (데모에서는 10초).
- 저장소: Object Storage에 업로드한 URL을 데이터베이스에 저장.
-
방송 리스트:
- 방송 시작 시 리스트에 썸네일 표시.
- 방송 입장 시 채팅 가능.
- 현상: 일부 사용자(희선) 방송창에서 방송은 정상 작동하지만 에러 화면이 보임.
-
해결 방향:
- 개인 환경 문제 확인.
- 로그 확인 및 디버깅.
- 현상: 설정창을 "닫기" 눌렀을 때 방송 종료가 되지 않음.
- 원인: 프론트에서 관련 로직이 실행되지 않음.
-
해결 방향:
- 프론트에서 창 닫기 시 종료 로직 추가.
- 현상: Transport가 끊겼을 때 적절한 정리 필요.
-
해결 방향:
-
socket.disconnect
발생 시 모든 연결 정리:-
송출자:
stopBroadcast
실행. -
수신자:
leaveBroadcast
실행.
-
송출자:
- 소켓과 Room 1:1 매칭하여 정리 로직 구현.
-
- 현상: 방 정보가 없을 때 서버가 의도치 않게 종료.
-
해결 방향:
- 종료 원인 분석 및 예외 처리 구현.
- 사진 경로 저장: Object Storage 경로를 데이터베이스에 저장하여 제공.
- Room 생성 시 고정 URI 지정.
-
데이터베이스
- 썸네일 저장 로직 추가 (Room 생성 시 URI 고정).
-
PlainTransport
- Room 닫힐 때 PlainTransport 종료 처리.
- Transport 관련 데이터 정리.
-
소켓 끊김 정리 로직
-
socket.disconnect
시:-
roomId === socketId
확인 후 Room 정리. -
transportId === socketId
확인 후 Transport 정리.
-
-
-
방 정보 미존재 서버 종료 이슈 해결
- 원인 파악 및 의도치 않은 종료 방지.
-
배포 스크립트 작성
-
포트 매핑:
- Media 서버:
30000~31000
. - Record 서버:
10000~10300
.
- Media 서버:
- FFmpeg 설치.
-
WebRTC 및 PlainTransport 포트 통합:
-
MIN_PORT
와MAX_PORT
상수 생성하여 통합 관리.
-
-
포트 매핑:
-
채팅 로직 구현
- 채팅 입력, 수신 및 UI 업데이트 로직 완성.
- Mediasoup 포트 매핑 문제
- swagger 같은 응답 코드에 다양한 응답 보여주기
- Sudo가 계속 비밀번호를 요청함
- Docker 이미지가 너무 크다
- Git action에서 도커 이미지 빌드 시간을 단축시켜보자
- Docker compose를 이용해서 메모리 사용률을 줄여보자
- 방송 녹화 시 CPU 과부하 문제를 해결해보자
- Release 브랜치? 너 필요해?
- 로딩이 너무 짧아…!
- NestJS ORM으로 무엇을 사용해야 할까?
- WebRTC를 이용한 1:N 스트리밍 서비스에서 시그널링 서버가 필요할까?
- 실시간 채팅 구현: 인메모리 방식을 선택한 이유
- MySQL 아키텍처 개선: DB 의존성 분리와 서버 역할 명확화
- 브라우저 창이 최소화되면 비디오 송출이 안된다…!
- Mediasoup 기본 개념
- DLTS와 Signaling
- Tell, Don't Ask (TDA) 원칙이란
- VPC(Virtual Private Cloud) 학습 정리
- 순환참조: A 서비스 ‐ B 서비스 vs. A 서비스 ‐ B 레포지토리
- Dto 메서드 전략
- WebRTC란?
- 자바스크립트 패키지 매니저(npm, yarn, pnpm)
- shadcn/ui을 이용해 UI 개발 생산성 높이기
- React 이벤트 핸들러 네이밍(on vs handle)
- React-router-dom의 createBrowserRouter을 사용해보기
- fetch vs axios