오토에버 클라우드 2기 프로젝트 4~5주차 개발과 마무리(END)
4~5주차 때는 기능을 개발했다 내가 맞은 역할인 StreamingService는 srt로 영상을 받아서 처리하는 서버이다 이 서버를 만들기 위해서 초반에 많은 시행착오를 거쳤다
4주차
여러 클라이언트(블랙박스)에서 영상을 srt로 송출하기 때문에 srt를 받을 수 있는 서버를 구축해야했다 파이썬으로 srt를 받는 서버를 만들기에는 시간소모와 기능 자체를 직접 만들어야한다 그렇게 된다면 우리의 목표 쿠버네티스 클러스터 구축 + 부하테스트는 늦어지고 기능에만 시간이 너무 많이 소요되기 때문에 기존에 만들어진 서버를 찾아서 사용하기로 했다
세 가지 스트리밍 서버 비교
| 기능 | MediaMTX | OvenMediaEngine | SRT Live Server |
|---|---|---|---|
| 주요 특징 | 경량, 고성능 미디어 라우터 | 다기능, 대규모 스트리밍 플랫폼 | SRT 프로토콜에 특화된 경량 서버 |
| 프로토콜 지원 | SRT, RTMP, RTSP, HLS, WebRTC 등 매우 다양 | SRT, WebRTC, LL-HLS, RTMP 등 다양 | SRT에 집중, 일부 파생 버전에서 RTMP 등 지원 |
| 트랜스코딩 | 지원하지 않음 (원본 스트림 중개) | 강력한 실시간 트랜스코딩 및 ABR 지원 | 지원하지 않음 |
| 리소스 사용량 | 매우 낮음 (Go 언어 기반, 제로 디펜던시) | 비교적 높음 (다양한 기능 내장) | 낮음 |
| 설정 및 관리 | 간단한 YAML 파일로 설정 완료 | 상대적으로 복잡 (다양한 기능 설정 필요) | 간단한 편 |
| 확장성 | 단순한 구조로 수평 확장에 용이 | Origin-Edge 클러스터링 등 대규모 확장 기능 제공 | 기능이 제한적이므로 대규모 확장은 어려움 |
| 추천 사용 사례 | 다중 프로토콜 입출력, 가벼운 중개 서버 | ABR, DVR, DRM 등 복합적인 미디어 서비스 구축 | 단순 SRT 수신 및 전송, 저지연 방송 |
위 3가지를 모두 테스트 해봤지만 SRT Live Server는 너무 오래된 서비스라서 패스, OvenMediaEngine는 영상만 받는데 너무 무거워서 결론으로 MediaMTX를 사용하기로 결정했다
발생한 문제 MediaMTX 설정
mediaMTX를 사용할 때 문제가 있었다 mediaMTX를 사용할 때 우리는 도커에 올라간 이미지를 사용하기 때문에 기존 이미지에 있는 설정파일 mediamtx.yml를 우리가 작성할걸로 변경해서 사용하던중

paths 내부 설정에서 uuid 가 존재하는데 uuid이렇게 명시하면 srt에서 보낼때 streamid를 uuid로 명시해서 보내주면 mediaMTX가 인식해서 recordPath에 저장을 한다 여기까지는 좋은데 우리 서비스에서는 다중 클라이언트의 uuid를 미리 정의 해놓을 수가 없어서 특정 streamid가 들어온다면 해당 streamid를 이용해서 폴더를 만들고 내부에 저장할 수 없었다
해결
일단 공식문서를 보고도 해결 방법을 찾지 못해서 잼미니(gemini)에게 물어봐서 해결했다

streamid가 들어가야하는 부분을 정규표현식을 사용해서 모든 문자열을 허용했다 위 결과 우리가 의도한대로 streamid를 미리 정의하지 않아도 mediaMTX서버가 새롭게 폴더를 생성해서 영상을 저장했다
이후에는 mediaMTX가 여러개로 늘어날 수 있어서 (부하가 높아지면 추가생성 앞단에 로드밸런서를 둬서 부하가 없는 서버에 보냄) 공용 저장을 위해서 EFS를 사용했다
5주차
5주차에는 추가적으로 오프라인시 블랙박스 로컬에 저장된 영상을 받기 위해 추가적인 오프라인 영상 업로드 서버를 구축했다
클라이언트는 먼저 mediaMTX서버 연결을 확인후 연결 된다면 송출, 송출이 끊기거나 연결이 안된다면 로컬에 30s기준으로 저장후 30s마다 연결을 확인 재연결되면 오프라이서버에 저장된 영상을 모두 보냄 그와 동시에 실시간 srt영상도 같이 송출한다

여기까지 기능을 완성하고 이후 저장된 영상을 이용해서 S3에 저장하고 영상 메타데이터를 상태서버에 보내는 과정은 팀원이 완성했다
이후 남은 시간은 사용자가 접속해서 블랙박스를 등록하고 영상을 보는 웹사이트의 프론트엔드 작업을 했다
기존 프론트엔드

기존 웹앱 팀원이 백엔드 + aws에 집중해서 프론트엔드 작업된게 없이 그냥 html로만 되어 있어서 내가 이부분을 수정했다
먼저 로그인과 회원가입 페이지를 분리했다
조회할 날짜를 눌러서 영상을 보여준다 지금은 영상이 세로로 되어있어서 길게 표시됐지만 maxwidth를 설정해서 가로로 촬영한 영상이면 넘치지 않을것이다
마무리
사실 4주차 9월 19일(금)에 스마일샤크 면접을 보고 좋은 결과가 나왔다 내가 원하던 기업에 합격한건 너무 좋았지만 프로젝트 기간이어서 다른 팀원들에게 피해를 주지않기 위해 5주차는 내가 맡은 역할을 다하고 다른 기능도 도와줬다
끝까지 같이 못한건 아쉬웠지만 내가 가고싶은 기업이었고 팀원들도 모두 축하해줘서 마무리도 잘할 수 있었다 앞으로 남은 기간은 스마일샤크 업무에 도움이 될만한 AWS 공부를 진행하면서 10월 13일 첫 출근을 해야겠다!




