PRD: 크리에이터 채널 공유
문서 정보
| 항목 |
내용 |
| 문서 상태 |
구현 완료, 수동 검증 대기 |
| 작성일 |
2026-09-14 |
| 최종 수정일 |
2026-09-15 |
| 대상 제품 |
크리에이터 채널 공유 |
| 작성자·결정권자 |
제품 요구사항: 사용자, 문서 작성: Sisyphus |
| 관련 API Contract |
해당 없음 |
| 관련 구현 계획 |
docs/20260914_크리에이터_채널_공유/plan-task.md |
| 관련 review |
없음 |
요구사항 상태
| 상태 |
의미 |
구현 처리 |
| 확정 |
제품·기술 결정이 완료되어 구현 기준으로 사용 |
plan-task.md의 Task와 완료 증거로 추적 |
| 제외 |
현재 릴리스에서 구현하지 않기로 결정 |
Decision Log에 제외 이유 기록 |
1. Overview
크리에이터 채널 사용자는 채널을 외부 앱으로 공유할 수 있어야 한다. 내 채널에서는 우측 상단에 공유 버튼을 바로 노출하고, 다른 사람 채널에서는 우측 상단 더보기 메뉴 안에서 채널 공유를 선택한다.
공유 동작은 기존 UserProfileView의 채널 공유와 동일하게 OneLink 메시지를 만든 뒤 ActivityViewController로 시스템 공유 시트를 표시한다.
2. Problem Statement
- 현재 신규
CreatorChannelView에는 채널 공유 진입점이 없다.
- 기존 레거시
UserProfileView에는 채널 공유 동작이 있으나, 신규 크리에이터 채널 title bar와 더보기 overlay에는 연결되어 있지 않다.
- 사용자는 자신의 채널을 홍보하거나 다른 사람의 채널을 추천하려면 앱 밖으로 공유할 수 있어야 한다.
문제를 해결했다는 판단은 내 채널과 다른 사람 채널에서 모두 기존 채널 공유 메시지와 딥링크가 포함된 iOS 공유 시트가 열리는 것으로 한다.
3. Goals
3.1 제품 목표
- 내 크리에이터 채널 우측 상단에 공유 버튼을 직접 표시한다.
- 다른 사람 크리에이터 채널 더보기 메뉴 최상단에
채널 공유 항목을 표시한다.
- 공유 결과는 기존
UserProfileView 채널 공유와 동일한 메시지·딥링크 형식을 사용한다.
3.2 UX 목표
- 내 채널 사용자는 더보기 단계를 거치지 않고 바로 공유할 수 있다.
- 다른 사람 채널 사용자는 기존 더보기 메뉴 안에서 공유, 차단, 신고 동작을 한 곳에서 선택할 수 있다.
- 공유 버튼에는
ic_audio_content_share asset을 사용한다.
4. Non-Goals
- 새 공유 문구를 만들지 않는다.
- 새 딥링크 계약이나 새 API를 만들지 않는다.
- 공유 URL 생성 로직을 범용 helper로 리팩터링하지 않는다.
Pods/**, generated/**, build/**는 수정하지 않는다.
- 이 문서 작업에서는 코드 구현을 진행하지 않는다.
5. Target Users and Permissions
| 사용자 |
목표 |
주요 작업 |
사용 환경 |
| 내 채널 소유자 |
내 채널 홍보 |
title bar 공유 버튼 탭 |
iOS 앱 |
| 다른 사람 채널 방문자 |
채널 추천 |
더보기 메뉴에서 채널 공유 선택 |
iOS 앱 |
권한 정책:
- 인증 여부와 무관하게 기존
UserProfileView.shareChannel 동작과 동일한 조건을 따른다.
- 내 채널 여부는 기존
CreatorChannelView의 isOwnCreatorChannel 판단을 따른다.
- 공유 대상
creatorId는 CreatorChannelHomeResponse.creator.creatorId를 사용한다.
6. 핵심 사용자 흐름
- 사용자가 내 크리에이터 채널에 진입한다.
- 우측 상단
ic_audio_content_share 버튼을 탭한다.
- 앱이 기존 채널 공유 메시지와 OneLink URL을 생성한다.
- iOS
ActivityViewController 공유 시트가 표시된다.
다른 사람 채널 흐름:
- 사용자가 다른 사람 크리에이터 채널에 진입한다.
- 우측 상단 더보기 버튼을 탭한다.
- overlay 메뉴 최상단의
채널 공유 항목을 탭한다.
- 앱이 기존 채널 공유 메시지와 OneLink URL을 생성한다.
- iOS
ActivityViewController 공유 시트가 표시된다.
7. 정보 구조와 라우팅
별도 route나 신규 AppStep은 추가하지 않는다.
8. 기능 요구사항
8.1 내 채널 공유 버튼
| ID |
상태 |
요구사항 |
수용 기준 |
계약/Goal 연결 |
CCSHARE-001 |
확정 |
내 채널 title bar 우측 상단에 공유 버튼을 직접 표시한다. |
isOwnCreatorChannel == true일 때 ic_audio_content_share 버튼이 보이고 더보기 버튼은 공유 진입에 필요하지 않다. |
P1-T1 |
CCSHARE-002 |
확정 |
공유 버튼 탭 시 기존 채널 공유 방식으로 iOS 공유 시트를 표시한다. |
공유 메시지에 I18n.MemberChannel.shareChannelMessage(nickname) 결과와 OneLink URL이 포함된다. |
P1-T2 |
8.2 다른 사람 채널 더보기 공유
| ID |
상태 |
요구사항 |
수용 기준 |
계약/Goal 연결 |
CCSHARE-003 |
확정 |
다른 사람 채널 title bar는 기존 더보기 버튼을 유지한다. |
isOwnCreatorChannel == false일 때 더보기 버튼을 탭하면 overlay 메뉴가 열린다. |
P1-T3 |
CCSHARE-004 |
확정 |
더보기 overlay 메뉴 최상단에 채널 공유 항목을 추가한다. |
메뉴 순서는 채널 공유가 기존 차단/신고 항목보다 위다. |
P1-T3 |
CCSHARE-005 |
확정 |
채널 공유 항목 탭 시 overlay를 닫고 공유 시트를 표시한다. |
공유 시트가 표시되며 기존 차단/신고 흐름은 변경되지 않는다. |
P1-T3 |
8.3 공유 링크와 메시지
| ID |
상태 |
요구사항 |
수용 기준 |
계약/Goal 연결 |
CCSHARE-006 |
확정 |
공유 링크 생성은 기존 UserProfileViewModel.shareChannel과 동일한 OneLink 파라미터를 사용한다. |
af_dp=voiceon://, deep_link_value=channel, deep_link_sub5={creatorId}가 사용된다. |
P1-T2 |
CCSHARE-007 |
확정 |
공유 실패 시 기존 채널 공유 실패 처리와 동일한 사용자 피드백을 사용한다. |
OneLink 생성 실패 시 I18n.MemberChannel.shareLinkCreateFailed 기반 popup이 표시된다. |
P1-T2 |
9. 반응형 기능 범위
| 기능 |
iPhone |
iPad |
비고 |
| 내 채널 공유 버튼 |
전체 |
전체 |
기존 title bar layout 범위 안에서 표시 |
| 다른 사람 채널 더보기 공유 |
전체 |
전체 |
기존 overlay 메뉴 패턴 유지 |
| ActivityViewController |
전체 |
전체 |
기존 ActivityViewController wrapper 사용 |
10. UI/UX Expectations
10.1 디자인과 component 원칙
- 공유 버튼 asset은
ic_audio_content_share로 고정한다.
- 신규 공용 component를 만들기보다 기존
CreatorChannelTitleBar, ProfileReportMenuView, ActivityViewController 패턴을 우선 재사용한다.
- 더보기 메뉴의 신규 항목 텍스트는
채널 공유 의미의 I18n 항목으로 제공한다.
10.2 화면 상태
- 홈 API 응답을 받기 전에는 공유 대상 creator 정보가 없으므로 공유 action은 실행하지 않는다.
- 공유 시트 표시 중 기존 loading overlay를 새로 추가하지 않는다.
- OneLink 생성 실패 시 기존 popup 피드백을 표시한다.
10.3 접근성
- 공유 버튼에는 채널 공유 의미의 accessibility label을 제공한다.
- 더보기 메뉴의
채널 공유 항목은 탭 가능한 충분한 영역을 유지한다.
11. API 계약
신규 API 계약은 없다.
공유 링크 생성 파라미터:
| Key |
Value |
af_dp |
voiceon:// |
deep_link_value |
channel |
deep_link_sub5 |
{creatorId} |
12. 보안과 데이터 취급
- 공유 메시지에는 기존 채널 공유와 동일하게 공개 가능한 채널 nickname과 OneLink URL만 포함한다.
- 토큰, 인증 헤더, 개인정보를 공유 메시지나 로그에 포함하지 않는다.
- 새 네트워크 요청을 추가하지 않는다.
13. 성능과 품질 요구사항
- 공유 버튼 또는 메뉴 항목 탭 한 번으로 iOS 공유 시트가 표시되어야 한다.
- 기존 팔로우/알림/차단/신고 title bar 및 더보기 흐름을 회귀시키지 않는다.
- 테스트 타깃이 없는 현재 저장소 상태를 고려해, 구현 시 focused 빌드와 수동 검증을 완료 증거로 기록한다.
14. 성공 기준
14.1 기능 수용 기준
14.2 UI/UX 수용 기준
14.3 추적성 완료 기준
15. Open Questions
| ID |
상태 |
결정 필요 사항 |
현재 권고 |
결정 주체 |
결정 기한/시점 |
영향 Goal |
| 없음 |
확정 |
추가 미결정 사항 없음 |
기존 공유 방식 재사용 |
사용자 |
2026-09-14 |
전체 |
16. 요구사항 추적표
| 요구사항 범위 |
API Contract |
계획 Phase |
Goal |
자동 검증 |
수동 검증 |
CCSHARE-001~002 |
해당 없음 |
1 |
P1-T1, P1-T2 |
빌드 |
내 채널 공유 버튼 탭 |
CCSHARE-003~005 |
해당 없음 |
1 |
P1-T3 |
빌드 |
다른 사람 채널 더보기 공유 탭 |
CCSHARE-006~007 |
해당 없음 |
1 |
P1-T2, P1-GATE |
코드 대조, 빌드 |
공유 메시지와 실패 popup 확인 |
17. Decision Log
| 날짜 |
ID |
상태 |
결정 |
근거 |
영향 요구사항·계약·Goal |
| 2026-09-14 |
DEC-001 |
확정 |
기존 문서에 누적하지 않고 신규 문서 docs/20260914_크리에이터_채널_공유/를 만든다. |
사용자 선택 B |
전체 |
| 2026-09-14 |
DEC-002 |
확정 |
다른 사람 채널 더보기 메뉴의 채널 공유 항목은 최상단에 배치한다. |
사용자 선택 A |
CCSHARE-004, P1-T3 |
| 2026-09-14 |
DEC-003 |
확정 |
공유 구현은 기존 UserProfileView의 ActivityViewController 방식과 OneLink 파라미터를 재사용한다. |
사용자 요구사항, 기존 코드 확인 |
CCSHARE-002, CCSHARE-006 |
18. 변경 관리
- 공유 문구, 딥링크 파라미터, 메뉴 순서가 바뀌면 Decision Log에 정정 행을 추가한 뒤 요구사항과
plan-task.md를 갱신한다.
- 구현 중 테스트 타깃 또는 빌드 명령이 달라지면
docs/agent-guides/build-test-verification.md 확인 후 검증 기록에 실제 명령을 남긴다.