기본 정책
- 채널별 라이브 채팅 제공, 방송 중 실시간 메시지 송수신
- 라이브 플레이어와 함께 쓰는 채팅 UI 제공
- 채팅 사용 여부를 채널별로 설정 가능
- 사용자가 별도 채팅 서버·기술 설정을 구성할 필요 없음
- 채팅 인프라는 서비스가 정한다 — 채팅을 켠 채널은 IVS 로 만들어지고 Amazon IVS Chat 을 쓴다(§2.2). 사용자에게는 인프라 이름을 노출하지 않는다
사용자 경험 — 채널 생성/설정에서 이 정도만 선택하게 한다.
라이브 채팅 — 방송 중 시청자와 실시간으로 대화할 수 있습니다. [사용 / 사용 안 함]
기본값은 사용 안 함이다(§5) — 채팅을 켜면 채널을 만들 수 있는 인프라가 좁아진다(§2.2). 기술적인 설정값은 사용자에게 노출하지 않는다.
방송 중에도 채팅을 켜고 끌 수 있다. 도배·사고처럼 도중에 멈춰야 하는 상황이 실제로 생긴다 — 방송이 끝나기를 기다리게 할 수 없다.
- 끄면 새 Chat Token 발급을 멈추고 시청자의 입력 영역을 비활성화한다(
채팅이 중지되었습니다.). - 이미 오간 대화는 그대로 보여준다. 막는 것은 새 메시지뿐이다. 이미 열려 있는 WebSocket 연결은 남아 있을 수 있으므로, 서버가 새 메시지를 거절해야 한다.
- 다시 켜면 작성이 가능해진다.
- 기존 채팅 메시지의 표시 여부는 별도 정책으로 정한다 (미결).
- 채팅은 채널이 어느 인프라로 갈지도 가르지만(§2.2), 방송 중에는 인프라를 갈아끼우지 않는다 — 잠깐 채팅을 멈추려던 조작이 스트림 키를 재발급해 방송을 끝내 버리면 안 된다. 그 채널의 인프라는 다음 방송을 시작할 때 다시 판정된다.
- 어느 화면에서 끄든 같아야 한다 — 채팅 탭과 채널 설정 탭이 같은 규칙을 쓴다.
채팅 로그 저장 — 방송 중 오간 채팅을 전부 저장해 운영자가 내려받게 하는 옵션이다.
기본값은 꺼짐이고, 방송 중에는 바꿀 수 없다. 시청자 발언을 남기는 일이라 켜는 것이 선택이어야지 모르는 사이에 쌓이면 안 된다. 그리고 도중에 켜고 끄면 그 세션의 로그가 반쪽이 되어 무엇이 빠졌는지 알 수 없다 — 채팅 자체는 방송 중에 끌 수 있어도 로그 저장은 잠근다. 방송 중에 채팅을 나중에 켰다면 그때부터의 메시지만 로그에 남는다.
세션 스냅샷에 담는다(§7.3). 방송 중에 바뀌지 않는 값이고 스토리지를 점유하는 산출물이라
비용이 왜 그렇게 나왔는지의 근거가 된다 — 채널의 현재 설정에서 읽으면 지난 세션의 근거가 흔들린다.
시청자에게 다시 보여주는 기능이 아니다 — 이력이라고 쓰면 방송이 끝난 뒤 시청자가 대화를
다시 보는 것으로 읽히므로 화면 문구는 채팅 로그 저장으로 쓴다. 끄면 방송이 끝나는 순간 남는 것이 없다.
삽입 코드는 플레이어와 채팅을 나란히 놓는 형태로 준다.
채팅만 떼어 주면 받는 사람이 레이아웃을 직접 짜야 하는데, 실제로 필요한 것은 둘을 함께 놓는 일이다.
채팅만 다른 자리에 두고 싶으면 iframe 중 하나만 떼어 쓰면 된다.
<div style="display:flex;gap:8px;">
<iframe src="https://play.wecandeo.com/live/v?key=xxx"
width="640" height="360" frameborder="0"></iframe>
<iframe src="https://play.wecandeo.com/live/chat?key=xxx"
width="320" height="360" frameborder="0"></iframe>
</div>
재생 호스트는 채널이 들고 있는 재생 URL 에서 뽑는다 — 화면에 호스트를 박아 두면 환경마다 어긋난다.
만들어지는 경로 — IVS Chat → S3 .log.gz 다수 → 방송 세션 기준 취합 → CSV.
취합·변환에 시간이 걸리므로 처리 중 상태가 반드시 있다. 파일 형식(CSV)과 컬럼 구성은 잠정이다.
보관기간은 켤 때·받을 때 모두 알린다. 만료된 뒤에 "받을 수 없습니다"만 보여주는 것은 사전 안내가 아니라 사후 통보다. 녹화도 같은 규칙이다.
| 자리 | 시점 | 표시 형식 |
|---|---|---|
| 채널 생성 다이얼로그 | 켤 때 | 라이브 채팅 — 채널 > 채팅 탭. 삽입 코드·금칙어·참여 인원·모니터링.채팅 로그를 저장하면 방송 종료 후 30일간 내려받을 수 있습니다. |
채팅 탭 · 채팅 로그 저장 설명 |
켤 때 | … 시청자에게 다시 보여주는 기능이 아닙니다.저장된 로그는 방송 종료 후 30일간 내려받을 수 있습니다. |
방송 이력 표 · 채팅 로그 열 |
훑을 때 | 상태 배지만 — 처리 중 / 다운로드 가능 / 보관 만료 / 저장 안 함 |
| 세션 상세 패널 · 산출물 | 받을 때 | 녹화 [다운로드 가능]2.43 GB · 29일 남음 [다운로드] |
| 〃 (채팅 로그) | 받을 때 | 채팅 로그 [다운로드 가능]메시지 7,157건 · 29일 남음 [다운로드] |
| 〃 (받을 수 없을 때) | 받을 때 | 버튼 대신 이유 — 파일을 만드는 중입니다. 완료되면 내려받을 수 있습니다. /보관기간이 지나 내려받을 수 없습니다. |
| 녹화 메뉴 상단 | 훑을 때 | 녹화본은 라이브 종료 후 최대 30일간 보관되며, 이후에는 삭제되어 내려받을 수 없습니다.… 기간 안에도 직접 삭제할 수 있습니다. 보관 중인 녹화는 모두 20.56 GB 입니다. |
| 〃 · 임박 요약 | 들어오자마자 | ⚠ 3일 안에 만료되는 녹화가 5건 있습니다. [임박한 것부터 보기] (급한 것이 없으면 띄우지 않는다) |
녹화 메뉴 · 보관 만료 열 |
훑을 때 | 29일 남음 / 오늘 만료 / 2026-08-01 12:30 만료됨 |
- 남은 기간은 날짜가 아니라
N일 남음으로 적는다. 이 자리의 질문은 "언제까지 받을 수 있나"라 절대 날짜보다 남은 일수가 답에 가깝다. 이미 지난 것만 만료 시각을 적는다. - 3일 이하로 남으면 붉게 쓴다 — 숫자만으로는 지나치기 쉽다.
- 이미 만료된 것에는
N일 남음을 적지 않는다. 그 자리는 받을 수 없는 이유가 대신한다. - 일수는 한 곳에서 온다(
channelSpec.tsRECORDING_RETENTION_DAYS) — 보관기간이 바뀌면 위 문구가 전부 함께 따라간다. 화면마다 숫자를 적어 두지 않는다.
녹화 메뉴는 목록이 아니라 만료를 관리하는 화면이다. 좌측 메뉴에 따로 두는 이유가 여기 있다 — 채널 탭으로 넣으면 만료 임박을 알려면 채널을 하나씩 열어야 하고, 30일이 지난 것은 되돌릴 수 없다. "이 채널의 녹화"는 채널 상세 > 방송 이력 탭이 이미 답한다(§19-19). 그래서 이 화면은 방송 이력을 걸러낸 표처럼 보이면 안 되고, 다음 셋을 갖춘다.
- 기본 정렬은
보관 만료 임박순이다. 이 화면에 온 이유가 곧 정렬 기준이다. 만료된 것은 어느 방향으로 정렬하든 뒤로 보낸다 — 받을 수 없는 줄이 맨 위를 차지할 이유가 없다. - 목록 위에 임박 요약을 둔다 —
3일 안에 만료되는 녹화가 N건 있습니다+ 임박순으로 되돌리는 장치. 급한 것이 없으면 띄우지 않는다. 보관 안내와 성격이 달라(안내는 늘 같은 말, 이쪽은 지금 손쓸 일) 색을 갈라 쓴다. - 채널 필터를 둔다. 검색어는 두지 않는다 — 이 화면에서 찾는 단서는 채널과 만료일이지 제목이 아니다 (제목으로 찾을 때는 방송 이력으로 간다). 보관 중인 총 용량도 안내에 함께 적는다(§19-18 과 이어진다).
받는 자리 — 채팅 로그는 녹화와 같은 성질의 산출물이다(방송이 끝난 뒤 만들어지고, 다 만들어져야
받을 수 있고, 보관기간이 지나면 사라진다). 그래서 상태 축과 보관기간을 녹화와 같이 쓴다 —
처리 중 / 다운로드 가능 / 만료 / 실패, 보관기간은 녹화와 동일(§13).
| 자리 | 하는 일 |
|---|---|
| 방송 이력 표 (전체 · 채널 탭) | 채팅 로그 열에 상태만. 어느 방송에 로그가 있는지 훑는 자리다(녹화 열과 같은 규칙) |
| 방송 세션 상세 패널 | 이 방송이 남긴 것 묶음에서 녹화·채팅 로그를 나란히 놓고 내려받는다 |
방송 세션 상세 패널에서 나가는 길은 둘이다 — 채널(글자 링크)과 이 방송의 시청 분석(버튼). 시청 분석은 보고 있는 범위를 URL 로 받으므로(§19-14) 링크 하나로 이 세션이 조건으로 걸린 화면이 열린다. 들어가서 채널·방송·세션을 다시 고르게 하지 않는다. 기간도 함께 넘긴다 — 세션이 있던 날로 좁혀서 연다.
내려받기를 표가 아니라 상세 패널에 두는 이유 — 세션 하나를 고른 뒤에 하는 행위이고, 표에 실행 버튼을 넣으면 행이 무거워진다. 채팅 탭에 두지 않는 이유는 그쪽이 채널 단위 자리라 세션 목록을 또 만들어야 하고 방송 이력과 정면으로 겹치기 때문이다. 받는 자리에서 지울 수도 있다. 녹화는 녹화 메뉴에서 지울 수 있지만 채팅 로그는 전용 목록이 없어 이 패널이 유일한 자리다. 보관기간을 기다리지 않고 비울 수 있어야 하고(§13 과 같은 규칙), 채팅 로그는 시청자 발언이 담긴 데이터라 지워 달라는 요구가 실제로 들어온다.
- 두 산출물에 같이 둔다. 나란히 있는데 하나만 지울 수 있으면 왜 그런지 설명이 되지 않는다.
- 만들다 실패한 것에는 두지 않는다 — 지울 파일이 없다. 목록에서 줄을 빼는 것과는 다른 일이다.
- 삭제는 되돌릴 수 없어 일반관리자에게 열지 않는다(§22.1). 받는 것은 누구나 할 수 있다.
- 지우면 패널과 목록 표를 함께 갱신한다 — 패널만 고치면 뒤의 표가 아직 있다고 말한다.
- 확인창은 무엇이 사라지고 무엇이 남는지를 말한다: 파일은 즉시 삭제되고, 방송 이력과 통계는 남는다.
녹화도 이 묶음에서 함께 받는다 — 세션을 열어 두고도 녹화를 받으려면 녹화 메뉴로 나가야 했다.
제공 범위 — 채널 상세의 채팅 탭 하나에 사용 여부 · 삽입 코드 · 운영 설정 · 모니터링을 모은다.
운영자가 채팅을 켜고, 어디에 붙일지 가져가고, 무슨 말이 오가는지 보는 일은 이어서 일어난다.
| 묶음 | 내용 |
|---|---|
| 사용 여부 | 켜고 끄기. 채널의 값이다(§7.3) — 꺼져 있으면 나머지는 아무 일도 하지 않으므로 감춘다. |
| 켜고 끄면 인프라가 바뀔 수 있어 채널 설정과 똑같이 재발급 확인을 거친다(§2.2) | |
| 삽입 코드 | 채팅 전용 iframe. 플레이어와 따로 붙일 수 있어야 한다 — 채팅만 다른 자리에 놓는 페이지가 흔하다 |
| 운영 설정 | 채팅 로그 저장 · 비속어 필터 · 금칙어 · 동시 참여 인원 · 메시지 길이 · 연속 입력 간격 |
| 모니터링 | 오간 메시지, 운영자 메시지 작성, 메시지 삭제, 시청자 차단 |
| 차단 목록 | 차단된 시청자와 해제 |
- 기술 설정은 노출하지 않는다(엔드포인트·토큰·룸 식별자). 여기 있는 값은 전부 운영 규칙이다.
- 비속어 필터는 기본으로 켠다. 공개 방송에서 한 번 새어 나간 말은 되돌릴 수 없다.
인원 제한은 기본으로 두지 않는다(
null= 제한 없음) — 막을 이유가 생기기 전에 막지 않는다. - 걸러진 메시지도 운영자에게는 보인다. 무엇이 막혔는지 모르면 규칙을 고칠 수 없다.
- 차단은 되돌릴 수 있어야 한다. 잘못 누른 한 번이 시청자를 영영 막으면 안 된다.
- 모니터링은 방송 중에만 볼 것이 있다 — 대기 중에는 그렇게 적는다.
후속 검토 — 운영자/관리자 권한 분리, 참여자 목록, 채팅 통계, 고객 서비스 내 채팅 UI 커스터마이징.