작성한 글 (14)
노래클립 자동생성 파이프라인 - 방송 녹화, STT, Agent 판정
라이브 방송을 녹화해 신청곡 한 곡 구간만 클립으로 만드는 파이프라인입니다. 파드 하나가 축출되며 녹화 4건이 사라진 사고, Kubernetes Job으로 옮기자 이어하기가 따라온 과정, 가사와 STT를 겹쳐 경계를 찾는 알고리즘, 그리고 클립이 0개가 된 날 드러난 네 겹의 원인을 실제 코드와 수치로 정리합니다.
조현우 62 min read 방송에서 가장 많이 나온 단어는? : NLP를 활용한 채팅 워드클라우드
라이브 채팅을 형태소 분석해 워드클라우드로 만들면서 정한 것들. 무엇을 단어로 셀지, 집계 창을 어떻게 고정할지, 절반만 계산된 결과를 어떻게 감출지에 대한 기록입니다.
조현우 24 min read 채팅 키워드알림 서비스 - 멀티테넌트 키워드 알림
라이브 채팅 firehose 한 줄이 조직별 키워드에 걸려 Slack, Discord, 앱 푸시로 나가고 ClickHouse에 남기까지를 실제 코드로 따라갑니다. 단일 테넌트로 태어난 Go 서비스가 조직, 그룹, 채널 3층 구조를 얻는 동안 무엇을 바꾸고 무엇을 그대로 뒀는지 정리합니다.
조현우 75 min read 유튜브 임베드를 벗어나 직접 재생하기 : 광고 없이 video 태그로 유튜브 영상 서빙하기
노래책 콘솔에서 YouTube 반주 영상을 직접 재생하려고 만든 게이트웨이입니다. 추출과 다운로드를 한 노드에 묶어야 했던 이유, 출구 IP가 통째로 차단됐던 사고, 일관 해시로 singleflight를 살린 방법, 캐시 히트를 CloudFront로 넘긴 구조를 실제 코드와 설정으로 정리합니다.
조현우 52 min read SOOP, 치지직, 씨미 채팅 수집 커넥터로 12,000개 방송 채팅 수집하기
치지직, SOOP, 씨미 세 곳에서 수천 개의 채팅 WebSocket을 동시에 유지하며 만난 문제입니다. 두 겹 keepalive가 각각 다른 죽음을 잡는 이유, 68,248번의 Ping/Pong 측정이 상수를 정한 과정, 공유 출구 IP 하나가 만든 P0 인시던트를 코드와 함께 정리합니다.
조현우 49 min read 라이브 스트리밍 채팅 수집 시스템을 KEDA와 Karpenter로 확장한 방법
수집 채널 수를 KEDA의 확장 신호로 바꾸고, Karpenter와 Spot Instance로 필요한 Worker와 노드를 공급하며 만든 운영 원칙을 공유합니다.
조현우 15 min read 노래 제목과 Musixmatch 트랙 매칭하기 - LLM Agent와 HITL(Human-in-the-Loop)
결정론적 매칭이 회수하지 못한 3,067곡을 LLM 에이전트 배치로 되찾았습니다. 죽어 있던 상한, 서버 안의 HTTP 클라이언트가 된 도구, 리스 기반 멱등성, 회수율 게이트, 그리고 에이전트가 물러선 곡을 사람이 확정하는 검수 대기열까지 실제 코드와 실제 수치로 정리합니다.
조현우 45 min read !신청 사랑하긴 그 긴거 : 개떡같이 말해도 찰떡같이 알아듣는 LLM 기반 신청곡 매칭 로직
라이브 채팅의 신청곡 한 줄을 스트리머 노래책의 곡으로 매칭하는 파이프라인 전체를 코드 수준으로 정리합니다. 어떤 메시지를 신청으로 볼지 가르는 티어 분류기의 실제 상수부터 10단계 결정론적 캐스케이드, 자모 단위 fuzzy, 프롬프트 캐싱을 건 LLM 판정과 환각 차단까지 다룹니다.
조현우 66 min read 확장 프로그램 없이 브라우저에서 영상 키 조절하기
노래책 콘솔의 실시간 키 조절을 Web Audio로 구현한 기록입니다. 위상 보코더에서 WSOLA로 갈아타기까지 지나간 오진 세 건, 0 반음에서 물리적으로 우회해야 했던 이유, WSOLA 파라미터가 실제로 만들어내는 100ms대 지연까지 코드와 함께 정리합니다.
조현우 48 min read 멜로밍 랭킹 - SOOP, 치지직, 씨미 채팅 수집 및 처리 아키텍처
SOOP·치지직·씨미의 방송과 채팅을 공통 이벤트로 정규화하고, PostgreSQL·Redis Streams·ClickHouse로 분리해 멜로밍 랭킹까지 연결한 아키텍처를 소개합니다.
조현우 11 min read 단일 k3s 노드에서 110개 Pod 제한을 넘기기
온프렘 단일 k3s 노드에서 kubelet maxPods와 PodCIDR 한계를 함께 조정하며 겪은 운영 기록입니다. 단순 설정 변경으로 끝나지 않았던 이유와 테스트에서 확인한 한계를 정리합니다.
조현우 8 min read 비용을 줄이려 넣은 S3 Lifecycle 한 줄이 만든 장애
임시 버퍼와 추출 결과물을 한 버킷에 담아둔 상태에서 범위를 지정하지 않은 만료 규칙을 넣었습니다. 각각은 안전했던 두 결정이 만나 문제를 가렸고, 전혀 다른 작업에서 만난 403이 그 사실을 알려준 기록입니다.
조현우 7 min read Vibe Infra로 장애를 만들고, 장애에서 배우다
AI로 인프라를 운영하다 AWS Secrets Manager auto-rotation 장애를 겪은 이야기. AI가 장애를 분석하기도, 2차 장애를 만들기도 한 경험에서 배운 Vibe Infra의 규칙들.
조현우 11 min read 멜로밍 기술 블로그를 시작합니다
멜로밍을 만들고 운영하며 마주한 기술적 도전과 노래책 서비스에 쌓인 노하우를 공유합니다.
조현우 2 min read