-
Notifications
You must be signed in to change notification settings - Fork 2
11 6 회의
Seungheon Han edited this page Nov 30, 2024
·
4 revisions
- nCloud 설정
- vpc 설정
- 공인 ip
- 인스턴스 생성 (서브넷)
- git action, 도커 세팅
- 배포 파이프라인 작성, CI/CD
- 테스트 파이프라인
- 프론트엔드 초기세팅
- alias 설정
- Tailwind 변수 넣기 ⇒ 디자인 확정하고 해야할 듯?
- 디자인 확정 (컬러 뽑기, 뭐..등등)
- 백엔드 초기세팅
- erd 설계
- api 명세 작성 (리스트 뽑기)
- orm 선정 및 설치, 세팅
- db 설치 및 연결
- 테스트 초기설정 (jest)
- 로깅
- 에러 핸들링
- 인터셉터, 필터 (응답 통일 같은거래요)
- 1, 2번은 나머지 로컬에서 할 수 있는걸 다 한 후에 진행하는것이 좋은것 같다.
- 3, 4는 찢어져서 세팅 하면 될 것 같다.
- 3, 4를 각자 찢어져서 오늘 해보자
Redis 사용 이유
- 룸(room) 관리
- Redis를 통해 방송 세션(룸)에 대한 정보를 효율적으로 관리.
- 방송 정보 저장
- 방송 제목, 썸네일, 시청자 수 등의 정보를 Redis에 저장.
- 실시간 처리 및 빠른 읽기/쓰기 요구 사항 충족.
- Redis를 사용하지 않을 경우
- 모든 관리 작업을 미디어 서버에서 처리.
- Redis 대신 미디어 서버에서 JSON으로 데이터를 저장 및 관리.
- 문제점: 개발 난이도 상승, 관리 부하 증가, 미디어 서버의 부하 증가.
- 구조: 방송 정보를 JSON 형식으로 Redis에 저장
{
"broadCastingUUID": {
"hostCamper": "Jxxx",
"broadCastingName": "방송 제목",
"participant": ["Jxxx", "Jyyy", "Jzzz"],
"createAt": "yyyy.mm.dd:hh.mm.ss"
}
}
- 특징:
- 모든 데이터를 Redis에 일괄 관리.
- 빠른 읽기/쓰기 성능.
- 실시간성이 중요한 정보(시청자 수 등)에 적합.
- 문제점: Redis 사용 경험이 적거나 대규모 데이터 관리 시 부담 발생 가능.
- 구조:
- Redis에 방송 UUID 및 세션과 관련된 실시간 정보 저장.
- MySQL: 방송 제목과 같은 변동이 적은 데이터를 저장.
{
"캠퍼Id": "방송UUID"
}
- 특징:
- Redis는 실시간 데이터, MySQL은 영구적 데이터로 역할 분담.
- 확장성과 관리 편의성 증가.
- 문제점: Redis와 MySQL 간 데이터 동기화의 복잡성.
Redis만 사용 | Redis + MySQL 사용 | |
---|---|---|
개발 난이도 | 낮음 (단순 구조) | 높음 (동기화 필요) |
확장성 | 높음 (Redis 기반 확장 용이) | 중간 (두 시스템 관리 필요) |
비용 | 낮음 (Redis 관리만 필요) | 높음 (두 시스템 운영 필요) |
- 썸네일
- 미디어 서버에서 S3로 저장하고 즉시 반환하는 방식으로 해결 가능.
- DB 저장 불필요.
- 시청자 수
- Redis에서 실시간으로 관리 가능.
- 별도의 저장 없이 실시간 API 요청으로 처리.
- 방송 제목
- RDBMS에 저장.
- 자주 변경되지 않으며, 수정 API를 통해 관리.
- Redis를 주요 실시간 데이터 관리 도구로 사용.
- 방송 세션(room) 정보, 시청자 수 등을 효율적으로 관리.
- JSON 기반 구조 활용.
- MySQL은 변동이 적고 영구적인 데이터 관리에 집중.
- 방송 제목과 같은 데이터를 저장.
- 썸네일은 미디어 서버와 S3를 연계하여 관리.
- 별도의 DB 저장 불필요.
- 실시간 요구 사항은 Redis와 API 요청으로 해결.
- Redis에서 필요한 정보를 빠르게 읽고, 별도 API로 시청자 수와 같은 데이터를 제공.
- 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