-
Notifications
You must be signed in to change notification settings - Fork 2
11 11 회의
Seungheon Han edited this page Nov 30, 2024
·
3 revisions
-
체크인 → 방송 송출
- 방송하는 사람 구현 (프론트, 백엔드)
-
송출 중인 방송 시청
- 시청자 화면 구현 (프론트, 백엔드)
-
메인페이지 → 방송 리스트 구현
- 방송 목록 표시
-
썸네일 기능 구현
-
Mediasoup-client 연결
- 방송 수신 및 시청 기능.
-
UI 구현
- 방송 송출을 위한 새로운 탭 구현.
-
Mediasoup-client 구현
- 송출 클라이언트 연결.
-
화면 공유 기능- 구현 대상에서 제외.
-
방송 미리보기
- 썸네일 및 방송 관련 정보 표시.
-
방송 리스트 조회 API
- 방송 정보(썸네일, 제목, 캠퍼 ID 등) 제공.
-
방송 정보 조회 API- 필요성 낮음.
-
방송 정보 업데이트 API- 필요성 낮음.
-
장점:
- API 서버 의존성을 제거.
- 서버 간 분리 작업 불필요.
-
단점:
- 데이터 일관성 관리 어려움.
- 확장 시 여러 미디어 서버에서 발생하는 업데이트 쿼리로 데이터 무결성 문제 발생 가능.
-
장점:
- API 서버에만 테이블 존재 → 데이터 일관성 유지.
- 확장성 높은 구조.
-
단점:
- API 호출을 위한 추가 작업 필요.
- 공통 .env 파일: 여러 서버에서 공통으로 사용하는 환경변수 정의.
-
개별 .env 파일: 각 서버에서 필요에 따라 별도 관리.
- 겹치는 항목이 많아질 경우 추후 수정 고려.
-
Private 네트워크에 Redis 설치
- Public 네트워크에는 Nginx, API, Chat, Media 서버 등 이미 존재.
- Redis를 Private 네트워크로 분리해 서버 확장성 확보.
REDIS_MEDIA = 0 REDIS_CHAT = 1
-
이벤트:
getRtpCapabilities
- 클라이언트가 RTPCapabilities 요청.
- 서버는 사전 설정된 RTPCapabilities를 반환.
- 클라이언트는 받은 RTPCapabilities를 사용해 Device 생성.
-
이벤트:
createRoom
- 클라이언트가 방 생성 요청.
- 서버는 새로운 방(Router)을 생성하고 roomId 반환.
- 클라이언트는 받은 roomId를 저장.
저장 형식:
rooms: Map<RoomId, Router[]>
-
이벤트:
createTransport
- 클라이언트가 roomId를 사용해 transport 생성 요청.
- 서버는 해당 roomId의 Router를 찾아 WebRTCTransport를 생성하고 반환.
-
이벤트:
connectTransport
- 클라이언트가 transportId를 사용해 연결 요청.
- 서버는 transport를 connect 처리 (DTLS 프로토콜 적용).
- 클라이언트는 TransportId, iceParameters, iceCandidate, dtlsParameters를 저장.
-
이벤트:
createProducer
- 클라이언트가 transportId를 사용해 producer 생성 요청.
- 서버는 transportId로 producer를 생성하고 반환.
- 클라이언트는 반환받은 producerId를 저장.
저장 형식:
producers: Map<RoomId, Producer[]>
consumers: Map<TransportId, Consumer[]>
-
이벤트:
createConsumer
- 클라이언트가 transportId와 roomId를 사용해 consumer 생성 요청.
- 서버는 transportId와 roomId로 producer를 찾고 consumer를 생성한 뒤 반환.
- 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