Skip to content

11 11 회의

Seungheon Han edited this page Nov 30, 2024 · 3 revisions

이번주 목표: 방송 관련


목표

  1. 체크인 → 방송 송출

    • 방송하는 사람 구현 (프론트, 백엔드)
  2. 송출 중인 방송 시청

    • 시청자 화면 구현 (프론트, 백엔드)
  3. 메인페이지 → 방송 리스트 구현

    • 방송 목록 표시
  4. 썸네일 기능 구현


방송 관련 필요한 기능

방송 시청 화면

  • Mediasoup-client 연결
    • 방송 수신 및 시청 기능.

방송 송출

  1. UI 구현
    • 방송 송출을 위한 새로운 탭 구현.
  2. Mediasoup-client 구현
    • 송출 클라이언트 연결.
  3. 화면 공유 기능
    • 구현 대상에서 제외.

메인페이지

  • 방송 미리보기
    • 썸네일 및 방송 관련 정보 표시.

서버 구현

  1. 방송 리스트 조회 API
    • 방송 정보(썸네일, 제목, 캠퍼 ID 등) 제공.
  2. 방송 정보 조회 API
    • 필요성 낮음.
  3. 방송 정보 업데이트 API
    • 필요성 낮음.

백엔드 논의

MySQL 저장 방식 논의

1. 미디어 서버와 API 서버가 직접 MySQL에 접근

  • 장점:
    • API 서버 의존성을 제거.
    • 서버 간 분리 작업 불필요.
  • 단점:
    • 데이터 일관성 관리 어려움.
    • 확장 시 여러 미디어 서버에서 발생하는 업데이트 쿼리로 데이터 무결성 문제 발생 가능.

2. 미디어 서버에서 API 서버의 API 호출로 MySQL 저장 (채택)

  • 장점:
    • API 서버에만 테이블 존재 → 데이터 일관성 유지.
    • 확장성 높은 구조.
  • 단점:
    • API 호출을 위한 추가 작업 필요.

.env 관리 방안

  1. 공통 .env 파일: 여러 서버에서 공통으로 사용하는 환경변수 정의.
  2. 개별 .env 파일: 각 서버에서 필요에 따라 별도 관리.
    • 겹치는 항목이 많아질 경우 추후 수정 고려.

Redis 위치 논의

  • Private 네트워크에 Redis 설치
    • Public 네트워크에는 Nginx, API, Chat, Media 서버 등 이미 존재.
    • Redis를 Private 네트워크로 분리해 서버 확장성 확보.

Redis DB 분리 예시

REDIS_MEDIA = 0 REDIS_CHAT = 1

Mediasoup 흐름

image

WebSocket 이벤트 목록

1. RTP Capabilities 요청

  • 이벤트: getRtpCapabilities
  1. 클라이언트가 RTPCapabilities 요청.
  2. 서버는 사전 설정된 RTPCapabilities를 반환.
  3. 클라이언트는 받은 RTPCapabilities를 사용해 Device 생성.

2. 방 생성

  • 이벤트: createRoom
  1. 클라이언트가 방 생성 요청.
  2. 서버는 새로운 방(Router)을 생성하고 roomId 반환.
  3. 클라이언트는 받은 roomId를 저장.

저장 형식:
rooms: Map<RoomId, Router[]>


3. Transport 생성

  • 이벤트: createTransport
  1. 클라이언트가 roomId를 사용해 transport 생성 요청.
  2. 서버는 해당 roomId의 Router를 찾아 WebRTCTransport를 생성하고 반환.

4. Transport 연결 요청

  • 이벤트: connectTransport
  1. 클라이언트가 transportId를 사용해 연결 요청.
  2. 서버는 transport를 connect 처리 (DTLS 프로토콜 적용).
  3. 클라이언트는 TransportId, iceParameters, iceCandidate, dtlsParameters를 저장.

5. Producer 생성

  • 이벤트: createProducer
  1. 클라이언트가 transportId를 사용해 producer 생성 요청.
  2. 서버는 transportId로 producer를 생성하고 반환.
  3. 클라이언트는 반환받은 producerId를 저장.

저장 형식:
producers: Map<RoomId, Producer[]>
consumers: Map<TransportId, Consumer[]>


6. Consumer 생성

  • 이벤트: createConsumer
  1. 클라이언트가 transportId와 roomId를 사용해 consumer 생성 요청.
  2. 서버는 transportId와 roomId로 producer를 찾고 consumer를 생성한 뒤 반환.

👥 팀 강점

🧑‍💻 개발 일지

📌 ALL

📌 FE

📌 BE

💥 트러블 슈팅

📌 FE

📌 BE

🤔 고민

📚 학습 정리

📌 김광현

📌 백지연

📌 전희선

📌 한승헌

🤝 회의록

🗒️ 데일리 스크럼

💬 팀 회고


👨‍👩‍👧‍👦 소개

🌱 문화

🔨 기술 스택

⚙️ 서비스 아키텍쳐

🚧 CI/CD

🌊 Flow

💭 6주를 보내면서

Clone this wiki locally