네이버 치지직(Chzzk) 방송의 실시간 스트림을 자동으로 수집하고, 오디오와 이미지를 분할 저장하여 MinIO 오브젝트 스토리지에 업로드하며, 각 파일의 메타데이터를 데이터베이스에 기록하는 NestJS 기반의 백엔드 시스템입니다.
-
방송 기록 자동화
치지직 방송이 시작되면 streamlink를 통해 방송 스트림을 받아오고, ffmpeg로 오디오와 이미지를 일정 간격으로 분할 저장합니다.
방송이 종료되면 관련 프로세스를 안전하게 종료하고, 불필요한 임시 파일을 정리합니다. -
파일 업로드 및 관리
분할된 오디오(.aac)와 이미지(.jpg) 파일은 MinIO에 업로드되며, 업로드 경로는 방송 채널, 라이브 ID, 파일 타입(오디오/이미지)에 따라 자동으로 분기됩니다.
업로드가 완료된 파일의 경로, 크기, 타입, 생성 시각 등 메타데이터는 데이터베이스에 저장되어, 추후 검색이나 통계, 관리에 활용할 수 있습니다. -
동시 다채널 지원
여러 치지직 채널의 방송을 동시에 감시하고, 각 채널별로 독립적인 프로세스와 파일 저장 경로를 관리합니다.
중복 실행 방지, 프로세스 충돌 방지, 장애 발생 시 자동 복구 등 실서비스 환경에서의 안정성을 고려한 구조입니다. -
자동 정리 및 유지보수
일정 기간(24시간) 이상 지난 파일이나, 디렉토리 용량이 10GB를 초과할 경우 자동으로 임시 파일을 정리합니다.
이로써 저장소 용량을 효율적으로 관리하고, 불필요한 리소스 낭비를 방지합니다.
- 치지직 방송의 하이라이트 오디오/이미지 자동 백업
- 방송별 파일 통계 및 검색
- 여러 채널의 방송을 동시에 기록하는 멀티 채널 아카이빙
- NestJS: 모듈화된 서비스 구조, 의존성 주입, 확장성
- TypeORM: 파일 메타데이터 DB 관리
- MinIO: 오브젝트 스토리지(파일 업로드/다운로드)
- streamlink/ffmpeg: 실시간 스트림 수집 및 분할 저장
- postgresql: RDB
이 프로젝트는 실제 운영 환경에서의 자동화, 확장성, 안정성, 유지보수 편의성을 모두 고려하여 설계되었습니다.
방송 기록 자동화, 파일 관리, 스토리지 최적화가 필요한 다양한 상황에 유용하게 활용할 수 있습니다.