| 정책 | 구현 위치 |
|---|---|
| §3, §4 채널 타입·IVS 타입 비노출 | app/utils/channelSpec.ts CHANNEL_SPECS |
| §4.1 일반 채널 기본 선택 | channelSpec.ts DEFAULT_CHANNEL_TYPE |
| §4.3 권장 송출 사양 | channelSpec.ts RECOMMENDED_INGEST |
| §9 썸네일 사용 여부 · 간격 1~10초(기본 2초) · 채널 소관 | channelSpec.ts THUMBNAIL_INTERVAL_*, types Channel.thumbnailEnabled/thumbnailIntervalSec |
| §7 프리뷰 이미지 · 기본 이미지 | channelSpec.ts BROADCAST_IMAGE_*/BROADCAST_DEFAULT_PREVIEW, public/images/broadcast-default-preview.jpg, types BroadcastInput |
| §7 방송 카드 그리드 · 라디오 선택 | app/pages/[account]/channels/[id]/broadcasts.vue .bc-card (role="radio") |
| §7 방송별 최근 방송일·총 횟수 | types Broadcast.lastSessionAt/sessionCount (세션 이력에서 집계) |
| §15 Trial 한도 / §16 표준 한도 | channelSpec.ts PLAN_LIMITS |
| §15 Trial·Enterprise 우선 운영 | app/types/index.ts PlanCode, app/utils/mockData.ts MOCK_PLAN_CODE |
| §19-5 / §16.1 리전 할당량 70~80% 경고 | (콘솔 코드 없음 — 운영이 지켜보는 값이라 화면에 띄우지 않는다) |
| §19-12 48시간 연속 방송 | channelSpec.ts MAX_CONTINUOUS_BROADCAST_SEC |
| §19-13 30초 재연결 대기 | channelSpec.ts RECONNECT_GRACE_SEC |
| §6, §7 채널/방송/방송 세션 3계층 | app/types/index.ts Channel / Broadcast / BroadcastSession, LNB 메뉴 구성 |
| §7.1 기본 방송 자동 생성·적용 중 1개 | app/utils/mockData.ts makeDefaultBroadcast, app/stores/channels.ts |
| §19-14 시청자 지표 4종(V3 동일) | app/types/index.ts BroadcastSession viewers/peakViewers/uniqueViewers/peakUniqueViewers |
| §19-14 조건 선택 3단계(검색+페이징) · CSV 는 표 위 | app/components/common/FilterDropdown.vue, app/pages/[account]/analytics.vue .analytics-filter / .csv-btn |
| §19-14 세션 구간별 지표(1/10/60/1440분) · 표 아래 지표 설명 | types SessionIntervalPoint/SessionIntervalUnit, mockData.ts makeSessionIntervals, analytics.vue intervalRows/intervalNotes, livepack.css .metric-note |
| §19-14 조회 기간 1년 / 최근 3년 | channelSpec.ts ANALYTICS_MAX_RANGE_YEARS/ANALYTICS_MAX_AGE_YEARS/checkPeriod, PeriodPicker.vue, analytics.vue·usage.vue appliedFrom/appliedTo |
| §19-14 표 위 차트(막대/꺾은선) | app/components/common/SeriesChart.vue, analytics.vue channelChart |
| §22 계정 메뉴 글자 크기 · 홈페이지 이동 | AppHeader.vue fontScalePct / HOMEPAGE_URL |
| §22 상담(채널톡) | utils/channelTalk.ts, plugins/channel-talk.client.ts, AppHeader.vue openChannelTalk, nuxt.config.ts channelTalkPluginKey |
| §23.4 적용 기능은 글자로 · 켠 것만 | ChannelCard.vue .channel-card__tag, usage.vue .opt-tag/optionText, types SessionAppliedOptions.thumbnailEnabled |
| §9 라이브 썸네일이 없으면 방송 프리뷰 이미지 | LiveThumbnail.vue poster |
| §19-14 드릴다운·선택 세션을 URL 에 | analytics.vue queryId/범위 watch, sessions.vue·channels/[id]/sessions.vue restorePicked |
| §5 채널 ID 노출 | ChannelCard.vue .channel-card__id, channels/index.vue 채널 ID 열, ChannelDetailHeader.vue copyId |
| §14 채팅 로그 (상태·내려받기) | types ChatLogInfo/BroadcastSession.chatLog, mockData.ts makeChatLog, SessionTable.vue 채팅 로그 열, SessionHealthPanel.vue artifacts |
| §23.4 드릴다운 경로 바 위치 · 한 줄 | app/components/common/DrillBreadcrumb.vue, analytics.vue pathCrumbs/goPath |
| §19-14 조회/초기화 (즉시 조회하지 않음) | analytics.vue draftChannel/runQuery/resetFilters/filterDirty, usage.vue 같은 구조, PeriodPicker.vue v-model:invalid |
| §19-14 더보기 · 세션 요약 접기 | useTableSort.ts visible/showMore, livepack.css .table-more/.collapse-head |
| §9 라이브 모니터 갱신 5초 고정 | channelSpec.ts MONITOR_REFRESH_SEC |
| §7.3 세션 적용값 스냅샷 | app/types/index.ts SessionAppliedOptions |
| §19-18 사용량 분석 | app/pages/[account]/usage.vue, mockData.ts getStorageUsage/getDailyStorage/getDailyUsage |
| §19-18 스토리지 추이·증감·피크 | types DailyStorageRow, usage.vue storageChart/storagePeak/.delta--up·.delta--down |
| §19-18 피크 대역폭(bps) | types DailyUsageRow.peakBps, useFormat.ts bps(), usage.vue usageSeries/peakBpsMax |
| §19-18 이중 축 차트(막대+선) | SeriesChart.vue ChartSeries.axis/kind, formatRight, yRight/yTicksRight |
| §19-18 표는 수집 단위 · 차트는 선택 단위 | useFormat.ts BYTE_UNITS/bytesIn/bpsIn, SeriesChart.vue unit, usage.vue chartUnit, livepack.css .unit-picker |
| §19-18 날짜 → 시간대(트래픽 전용) | types HourlyUsageRow, mockData.ts getHourlyUsage, usage.vue hourlyChart/exportHourlyCsv |
| §19-18 빈 날짜 0 채움 | mockData.ts getDailyUsage/getDailyStorage 의 날짜 선채움, usage.vue 0건 행 드릴 잠금 |
| §22.1 관리자 등급·권한 | app/composables/usePermission.ts ADMIN_LEVEL, app/pages/[account]/account/admins.vue |
| §22.1 등급별 메뉴 접근 | usePermission.ts canAccessAccountMenu, app/middleware/account-menu.global.ts, AppSidebar.vue |
| §22.2 알림 유형 | app/types/index.ts NotificationTypeKey, app/pages/[account]/account/notifications.vue |
| §22.3 IP 접속제한(콘솔/API 분리) | app/types/index.ts IpPolicyScope, app/composables/useIpRange.ts, account/ip-restriction.vue · account/developer-api.vue |
| §22.4 콘솔 로그인 세션 타임아웃 | app/types/index.ts ConsoleSessionPolicy, app/pages/[account]/account/session-policy.vue |
| §14 라이브 채팅 | types ChatSettings/ChatMessage/ChatBan, channels/[id]/chat.vue, useApi.ts 채팅 블록 |
| §22.5 플레이어 | app/types/index.ts LivePlayer/LivePlayerOptions, app/pages/[account]/players/, app/components/player/ |
| §22.6 API 키 발급·조회 | app/composables/useApi.ts getApiKey/createApiKey, app/pages/[account]/account/developer-api.vue |
| §23.1 카피라이트 위치·문구 | app/components/common/AppFooter.vue, app/layouts/default.vue, livepack.css .page-scroll |
| §23.1 전체 폭 바(축·탭·필터바·표·하단 바) | app/assets/css/livepack.css .page-body:not(.page-body--flush) > … |
| §23.4 하단 바는 화면 아래 끝 | app/assets/css/livepack.css .page-body--stack > .batch-bar(margin-top: auto + 아래 패딩 상쇄) |
| §23.2 축 ↔ 하위 축 계층 표현 | livepack.css .stats-nav / .subtab, app/pages/[account]/analytics.vue · usage.vue |
| §23.3 LNB 순서·하위 접기 | app/components/common/AppSidebar.vue sections / openSubs |
| §23.4 건수 표시·단위 | locales/*.json common.totalItems(개) / common.totalCount(건) |
| §23.4 선택 삭제 · 하단 바 | app/components/common/AppPagination.vue, app/pages/[account]/players/index.vue |
| §23.4 표 정렬 · 페이징 | app/composables/useTableSort.ts, app/components/common/SortableTh.vue |
| §23.4 표 위 도구 줄 · 순번 열 · 카드 폭 | app/components/common/TableToolbar.vue, livepack.css .stats-toolbar/.table__no/.card--bleed |
| §12 재생 정보 · QR | channels/[id]/index.vue, app/components/common/QrCode.vue, app/utils/qr.ts |
| §12 재생 접근 제한 3방식 | types RestrictMode/ChannelSecurity, channels/[id]/playback.vue |
| §2.2 인프라 자동 판정 | types ChannelInfra, channelSpec.ts resolveInfra/infraWouldChange, mockData.ts updateChannel(재발급), channels/[id]/settings.vue·chat.vue(확인 문구) |
| §7.3 자원 설정은 채널 · 콘텐츠는 방송 | types Channel.chatEnabled/recordingEnabled/thumbnailEnabled/thumbnailIntervalSec, Broadcast(제목·설명·이미지만), ChannelCreateDialog.vue whereHints |
| §2.1 운영방식(표준/전문) | 표준 운영방식만 구현. 프리롤·채널 중지/비활성·대체 이미지는 전문 운영방식으로 미룸 |
| §8 지연 모드(기본 일반) | types LatencyMode, channels/[id]/settings.vue |
| §13 녹화 파일 형식(MP4) | mockData.ts makeRecording(.mp4), SessionHealthPanel.vue artifacts(MP4 · 용량), recording.retentionNotice |
| §16 동시 LIVE 는 플랜 화면에 적지 않음 | AppSidebar.vue usageRows, plan.vue |
| §13 녹화 보관 30일 · 직접 삭제 | channelSpec.ts RECORDING_RETENTION_DAYS, types RecordingStatus, useApi.ts deleteRecording, recordings.vue |
| §14 세션 패널에서 산출물 삭제 | useApi.ts deleteChatLog, SessionHealthPanel.vue removeArtifact/changed emit, sessions.vue·channels/[id]/sessions.vue onSessionChanged |
| §13 녹화 실패·재시도 | types RecordingStatus(failed/unrecoverable)·lastTriedAt, useApi.ts retryRecording, recordings.vue retryRecording/hasFailed |
| §22.1 액션 권한 | usePermission.ts canManageChannel/canRotateStreamKey/canDeleteArtifact/canDeletePlayer, common.noPermission |
| §13 녹화 메뉴 = 만료 관리 화면 | recordings.vue urgent/keptBytes/channelFilter/sortByExpiry, 기본 정렬 expiresAt asc, .rec-urgent-box |
| §7.5 세션 제목 postfix | useFormat.ts sessionTitle, SessionTable.vue, recordings.vue, usage.vue, analytics.vue |
| §19-20 방송 이력 조회 기간 | channelSpec.ts SESSION_DEFAULT_RANGE_DAYS, types SessionFilter, sessions.vue (특정기간/최근/현재) |
| §19-19 라이브 상태 | types IngestSignal/SessionHealth/LiveEvent, LiveHealth.vue, SessionHealthPanel.vue, useBitrateChart.ts |
| §12 디바이스별 배포 설정 | types DeliveryPreference, channelSpec.ts RENDITIONS, channels/[id]/playback.vue |
| 브랜드 로고 · 파비콘 | public/images/livepack-logo.png/livepack-mark.png, public/favicon.png, AppSidebar.vue, login.vue |
| §23.5 빈 상태 | 각 목록·집계 화면의 .empty-state |
| §23.6 대시보드 시청 추이 | app/pages/[account]/dashboard.vue (세션 이력에서 집계) |
| §23.7 상세 열 폭 드래그 | app/composables/useResizableAside.ts, livepack.css .detail-layout__grip |
| §23.4 방송 이력 기간 검색 | app/pages/[account]/sessions.vue dateFrom/dateTo |
| §7 방송 그리드/목록 전환 | app/stores/ui.ts broadcastView/setBroadcastView |
| §23.7 상세 패널·하단 액션 | app/pages/[account]/players/index.vue .player-panel__footer |
| §23.8 설정 아코디언 · 하단 저장 바 | livepack.css .pc-acc* / .form-footer, app/pages/[account]/players/create.vue |
정책 ↔ 구현 대응표
정책이 코드 어디에 반영돼 있는지의 색인이다. 정책을 바꾸면 여기부터 확인한다.