PokeClip의 Live와 DVR을 나누고, 다시 이어 붙이는 조건
Live·DVR URL 분리, DB 기준의 S3 매니페스트 발행, 자동 핸드오프의 조건을 연결합니다. 완료한 발행·되감기 연동과 진행 중인 시간축 검증을 구분합니다.
문제 정의와 설계의 선택, 구현 이후의 검증과 회고.
Live·DVR URL 분리, DB 기준의 S3 매니페스트 발행, 자동 핸드오프의 조건을 연결합니다. 완료한 발행·되감기 연동과 진행 중인 시간축 검증을 구분합니다.
비정상 종료 시험에서 남은 컨테이너와 삭제된 비밀 파일이 충돌한 원인을 추적하고, 정리·마운트·재생성 조건을 함께 보완했습니다.
경로의 방송 ID와 playback 쿼리를 대조하고, 정규화·중복 파라미터 우회 요청이 상류에 도달하지 않도록 검증한 기록입니다.
두 서비스의 세 연결 풀에 흩어진 DB 접속 정책을 pgconf로 모으고, IAM 토큰 재발급과 verify-full을 실험 RDS에서 검증한 기록.
공통 DB 인증, nginx 요청 검증, DVR 발행과 복구, MediaMTX 기여를 만든 판단과 검증을 연결한 기술 글 모음.
채널별 기준선·고유 참여자·미디어 시간 보정을 검토한 연구 기록. 검증된 정확도 성과와 구분합니다.
원본을 보존하고 편집 의도를 데이터로 남기면서, 되감기 재포장과 최종 렌더를 구분한 PokeClip 설계 기록.
테스트 제외 실험과 정수 교차곱으로 80% 커버리지 게이트의 실제 차단과 경계값을 검증한 기록.
미디어와 무관한 PR의 CI 표시를 없애며 필수 검사 포기, 적용 순서, 롤백을 함께 다룬 PR #163.
말소리 검출과 마이크 선택을 구분하고, 클립 구간의 RMS·미리듣기로 분석 범위를 줄인 설계 판단.
방송 회차와 실제 미디어 경로를 분리하면서 기존 소비자의 조회와 배포 순서를 조율한 계약 변경.
MySQL 수동 스냅샷과 MongoDB 데이터 볼륨을 새 대상에 복원하고, 이전 데이터·새 쓰기를 검증하며 자동 백업의 권한 한계를 구분했습니다.
MySQL의 정상 TLS와 잘못된 호스트 거부를 짝으로 확인하고, MongoDB의 암호화·단일 primary 장애 전환을 별도 검증했습니다.
Semgrep 경로에서 잘못된 Java 구문이 ALLOW를 받은 반례를 유지하고, Tree-sitter 사전 검사로 SCAN_FAILED 경계를 보완했습니다.
수동 시작이 필요했던 초기 결과를 보완하고, 제품 API 배포 뒤 재부팅 복구와 DELETE 뒤 미부활을 두 번의 실제 EC2 재부팅으로 확인했습니다.
MediaMTX 포크 전환 때 설정·훅·녹화 입력의 9개 전제를 재검증하고, 제품 이미지와 테스트·라이브러리의 버전 기준을 함께 맞췄습니다.
기존 Dockerfile과 지원 스택 규칙을 먼저 사용하고, 실패할 때만 Claude를 호출하도록 이미지 생성과 인프라 판단의 범위를 제한했습니다.
저장된 배포 계획을 실제 AWS 자원에 연결하고, 기동·중지 시간 예산과 태스크·RDS 장애 뒤 복구를 별도 조건으로 확인했습니다.
같은 녹화 파일 10개에서 init 분리와 tfdt 변경을 분리해 S3·CDN 직접 재생의 시간축 조건을 확인했습니다.
DB 장부·작성 권한·세대·S3 조건부 PUT을 나눈 설계와 실제 S3에서 재시작 전후 발행을 확인한 결과를 설명합니다.
FFmpeg 프로세스 호출을 상주 Go 재포장으로 바꾸고, 같은 입력·읽기·쓰기를 포함한 200회 대조와 동시성 비용을 확인했습니다.
완료 훅·파일 감시·재스캔을 나눠 설계하고, 정상과 알림 유실 네 조건에서 누락·중복과 마지막 파일 지연을 확인했습니다.
재생목록 창·실제 시청 지연·녹화 길이를 분리해 7조각·약 14초 창과 녹화 4초를 독립적으로 선택했습니다.
연속 확정 구간과 최근 1시간 창을 계산하고, 10만 행 원장의 초기 계산·tail 갱신·전체 렌더 비용을 구분했습니다.
원본·재생 조각·init의 독립 상태, MinIO 업로드 확인, 16MiB 입력 경계와 동시성 비용을 설명합니다.
이른 트랙 끝과 DISCONTINUITY 조합을 대조하고, 동일 init 조건에서 150조각·두 재접속 경계를 확인했습니다.
런타임 root 작업 없이 녹화와 사이드카 읽기를 유지하기 위해 이미지 단계에서 소유권을 확정했습니다.
시작점 BETWEEN을 실제 구간 겹침으로 정정하고, 계약 확정·팀원 구현·SQL 정확성 시험을 구분했습니다.
송출 키·녹화기 표식·논리 회차를 분리하고 ENDLIST 불변과 조건부 이전 회차 계승을 설계했습니다.
4초 객체라는 작업 단위를 기준으로 새 저장 계층 도입을 보류하고 PUT·GET·동시성의 실제 측정 범위를 나눴습니다.
테스트 종료 정리로 해결되지 않는 개발 DB 오염을 전용 DB와 명시적 소유 표식으로 차단한 과정입니다.
큐 접수·객체 생성·DB 완료를 나누고, 스위퍼의 접수 회차와 실제 PostgreSQL 상태 복구를 별도로 검증했습니다.
141.97초 목록이 80.03초로 인식되고 60초 탐색이 약 87초로 이동한 현상에서 재생 성공 조건을 다시 정했습니다.
본방 트랙 2의 440Hz 보존과 컬렉션별 복원을 대조했습니다. 자동 배정을 켜는 것만큼 끈 뒤의 상태도 확인한 기록입니다.
서버 오류를 없애도 검은 화면은 남았습니다. GAP 7개와 hls.js 초기화를 차례로 조사하고 실제 재생·되감기까지 확인했습니다.
401이 난 첫 시도에서 캐시 키와 원본 전달 정책을 분리했습니다. 원본 요청 1,254→28건과 97.95%의 분모, 403 검증을 함께 설명합니다.
편집 결과를 보존하면서 게시 결정은 방송자에게 남기기 위해 제작·직접 업로드·자동 업로드와 승인 대기를 나눈 설계입니다.
채팅 담당자가 바뀌면서 Node 자산 재사용과 이후 변경 검토 비용을 다시 비교해 Spring 전환을 선택했습니다.
편집 원본에는 오디오 6개를 보존하고 되감기는 1개로 단순화했습니다. 같은 방송의 소비 목적이 달라 처리 경로를 나눈 이유입니다.
OBS→SRT→녹화·재생을 확인한 뒤 직접 구현할 범위를 파일 색인·복구·시간축으로 좁혔습니다.
6트랙의 존재, 선택 추출, 실제 소리 보존을 나누어 검사했습니다. 무음 입력과 테스트 톤은 다른 것을 증명합니다.
로컬에서 x264 인코더 1개로 RTMP·SRT를 함께 보냈습니다. 시작 전 GOP 설정과 실행 중 거절, 종료 수명을 함께 다뤘습니다.
8자·10분·일회용 코드로 OBS를 연결하면서 시도 제한과 재사용 응답, 사용 기록의 보존 기간까지 정했습니다.
연결별 인증으로 전환하며 폐기한 path-reconciler 설계입니다. 부분 목록으로 삭제하지 않는 규칙과 인증 지연의 영향을 남겼습니다.
현재 PG의 passphrase를 Secrets Manager로 옮기는 전환을 준비 중입니다. 원문 사용과 키 대조를 나눈 이유 및 변경 조건을 설명합니다.
약 10개 소스를 직접 추적하는 대신 필요한 편집 조합을 OBS 6트랙으로 표현하고 전달·복원을 확인했습니다.
UDP 세션·진행 중 녹화·업로드 전 파일이 남는 미디어를 코어 API와 다르게 배치한 이유입니다.
방송 채팅 데이터로 하이라이트를 찾아내는 도구를 만들면서 부딪힌 문제들과 해결 과정, 그리고 한 번의 틀린 가설에 대한 기록이다.
지난 글에서 PokéClip의 v3 아키텍처를 소개했다. 영상(YOLO)·음성(Whisper)·채팅 세 신호를 병렬로 분석하고, 둘 이상이 임계치를 넘으면 하이라이트로 판정하는 "E 하이브리드" 구조였다.
라이브 방송에서 하이라이트 클립을 자동으로 뽑아내는 시스템을 만들었다. 치지직 스트림을 실시간으로 받아서 재밌는 순간을 감지하고, 클립으로 저장하는 파이프라인이다.