-
Notifications
You must be signed in to change notification settings - Fork 2
트러블 슈팅 view All
Jiyeon Baek edited this page Dec 6, 2024
·
7 revisions
탐구, 가설, 검증, 개선 단계에서 겪었던 문제들을 확인할 수 있습니다.
- 문제: FE 코드에서 prop-types를 불필요하게 검사해 ESLint 에러가 다수 발생.
-
해결: ypeScript가 타입 체크를 수행하므로, .eslintrc에서 react/prop-types 규칙을 비활성화하여 불필요한 검사를 제거.
불필요한 prop-types 검사로 인한 eslint 에러
- 문제: Chrome의 정책상 음소거되지 않은 영상은 사용자 상호작용(클릭, 탭 등)이 없으면 자동으로 재생되지 않음
-
해결: muted 속성을 사용해 초기에 음소거 상태로 비디오를 자동 재생하고, 사용자에게 음소거 해제 버튼을 제공하여 수동으로 소리를 켤 수 있도록 구현.
Chrome 자동 재생이 안되는 문제
- 문제: 캔버스에 영상이 재생되는 것처럼 보이게 하려고 캔버스 draw 함수가 계속 재귀호출되어 클라이언트 부하 문제 발생.
-
해결: 카메라와 화면 공유 하나만 송출될 때는 캔버스가 아닌 원본 비디오 트랙을 송출하도록 변경.
카메라와 화면 공유 on off 상태에 따라 송출하는 비디오 트랙 교체하기
- 문제: WebM 영상을 HLS로 실시간 변환하면서 CPU 사용량이 급격히 증가해 스트리밍 품질 및 녹화 영상에 문제가 발생.
- 해결: 실시간 변환 대신 WebM 원본 저장 후, CPU 부하가 낮을 때 큐를 통해 순차적으로 HLS 변환을 수행. 방송 녹화 시 CPU 과부하 문제를 해결해보자
- 문제: GitHub Actions에서 Docker 이미지를 빌드하는 데 시간이 과도하게 소요됨
-
해결: BuildKit을 활성화하고 type=gha로 Docker 레이어 캐시를 저장 및 재사용하여 빌드 시간 단축
Git action에서 도커 이미지 빌드 시간을 단축시켜보자
- 문제: 불필요한 파일 및 레이어가 포함되어 Docker 이미지 크기가 비정상적으로 커짐.
-
해결: 멀티스테이지 빌드 전략을 활용해 최종 이미지를 경량화.
Docker 이미지가 너무 크다
- 문제: Mediasoup의 포트가 올바르게 매핑되지 않아 스트림 연결이 실패
-
해결: ACG와 Docker Compose 설정에서 포트를 명시적으로 매핑하여 문제 해결
mediasoup 포트 매핑 문제
- 문제: Docker Compose로 실행된 컨테이너가 지나치게 많은 메모리를 사용.
-
해결: Docker Compose로 네트워크를 통합하고, 불필요한 포트 매핑을 제거하여 메모리 사용량 최적화.
Docker compose를 이용해서 메모리 사용률을 줄여보자
- 문제: GitHub Actions 또는 배포 스크립트 실행 시 sudo 명령어가 비밀번호를 계속 요청함.
-
해결: 서버에서
sudo visudo
명령어를 사용해 비밀번호 입력을 생략하도록 설정.
Sudo가 계속 비밀번호를 요청함
- 문제: Swagger에서 동일한 엔드포인트에 대해 다양한 응답 형식을 보여주는 데 한계 발생.
-
해결: Swagger의
@ApiResponse
를 활용해 응답 코드를 다중으로 정의하고, 구체적인 응답 예시를 추가.
swagger 같은 응답 코드에 다양한 응답 보여주기
- 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