Files
sodalive-android/docs/20260818_팔로잉_해제_확인과_버튼_UI/prd.md
T

10 KiB
Raw Blame History

팔로잉 해제 확인과 버튼 UI PRD

문서 정보

항목 내용
문서 상태 구현 기준 확정
작성일 2026-08-18
최종 수정일 2026-08-18
대상 제품 팔로잉 리스트, 크리에이터 채널 팔로우/팔로잉 액션
작성자·결정권자 사용자 요청 기준
관련 API Contract 변경 없음
관련 구현 계획 docs/20260818_팔로잉_해제_확인과_버튼_UI/plan-task.md
관련 review 없음

1. Overview

팔로잉 리스트와 크리에이터 채널에서 팔로잉 해제 동작을 더 명확하고 안전하게 만든다. 팔로잉 리스트의 팔로잉 중 버튼은 크리에이터 채널의 팔로잉 중 버튼과 같은 원형 스타일을 사용하고, 팔로잉 해제 요청은 두 화면 모두 V2ModalDialog 확인 후에만 진행한다.

2. Problem Statement

현재 사용자는 다음 문제를 겪는다.

  • 팔로잉 리스트의 팔로잉 중 버튼 UI가 크리에이터 채널의 팔로잉 중 상태와 다르다.
  • 팔로잉 리스트에서 팔로잉 중 버튼을 누르면 CreatorFollowNotifyFragment Bottom Sheet 액션 메뉴가 표시된다.
  • 크리에이터 채널에서는 팔로잉 중 버튼을 누르면 확인 없이 바로 팔로우 해제가 진행된다.

문제를 해결했다는 판단은 팔로잉 리스트와 크리에이터 채널 모두에서 팔로잉 해제 전 V2ModalDialog가 표시되고, 확인 버튼을 누른 경우에만 기존 팔로우 해제 API 흐름이 실행되는 것으로 한다.

3. Goals

3.1 제품 목표

  • 팔로잉 리스트의 팔로잉 중 버튼을 ic_new_following_white, gray_800, 크리에이터 채널과 동일한 원형 스타일로 표시한다.
  • 팔로잉 리스트의 팔로잉 중 버튼 터치 시 Bottom Sheet 액션 메뉴를 사용하지 않는다.
  • 팔로잉 리스트와 크리에이터 채널 모두 팔로우 해제 전 한 번 더 확인한다.
  • 취소 시 팔로우 상태와 알림 상태를 변경하지 않는다.
  • 확인 시 기존 팔로우 해제 프로세스를 한 번만 실행한다.

3.2 UX 목표

  • destructive action인 팔로우 해제의 영향을 Dialog 문구로 명확히 알린다.
  • 한국어, 일본어, 영어에서 동일한 의미와 %1$s 크리에이터 이름 placeholder 계약을 유지한다.
  • 팔로우 시작, 알림 토글, 기존 성공/실패 Toast 처리는 이번 변경으로 바꾸지 않는다.

4. Non-Goals

  • 코드 구현은 이 문서 작성 작업의 범위가 아니다.
  • CreatorFollowNotifyFragment 자체를 수정하거나 삭제하지 않는다.
  • 팔로우/언팔로우 API, Repository, ViewModel 계약을 재설계하지 않는다.
  • 신규 Dialog 컴포넌트, 신규 dependency, 공통 coordinator abstraction을 추가하지 않는다.
  • 요청 범위 밖의 레거시 리팩터링을 하지 않는다.
  • 사용자가 명시적으로 요청하지 않았으므로 app/src/androidTest, 기기·에뮬레이터 UI 조작, 스크린샷·시각 QA는 범위에서 제외한다.

5. Target Users and Permissions

사용자 목표 주요 작업 사용 환경
로그인 사용자 팔로잉 중인 크리에이터를 안전하게 해제 팔로잉 리스트 또는 크리에이터 채널에서 팔로우 해제 Android 앱

권한과 인증 정책은 기존 팔로우/언팔로우 흐름을 그대로 따른다.

6. 핵심 사용자 흐름

  1. 사용자가 팔로잉 리스트에서 팔로잉 중인 크리에이터의 액션 버튼을 누른다.
  2. 앱은 CreatorFollowNotifyFragment Bottom Sheet를 표시하지 않고 V2ModalDialog를 표시한다.
  3. 사용자가 취소를 누르면 Dialog만 닫히고 팔로우 해제 요청은 보내지 않는다.
  4. 사용자가 해제하기를 누르면 기존 viewModel.follow(creatorId, follow = false, notify = false) 흐름으로 팔로우 해제를 진행한다.
  5. 사용자가 크리에이터 채널에서 팔로잉 중 원형 캡슐을 누른다.
  6. 앱은 V2ModalDialog를 표시한다.
  7. 사용자가 확인하면 기존 homeActionDelegate.follow(follow = false, notify = false) 흐름으로 팔로우 해제를 진행한다.

7. 기능 요구사항

ID 상태 요구사항 수용 기준 계약/Goal 연결
UNFOLLOW-001 확정 팔로잉 리스트의 팔로잉 중 버튼은 ic_new_following_white를 사용한다. 팔로잉 중 branch가 기존 btn_following_big, btn_following_no_alarm_big 대신 요청 아이콘을 사용한다. P1-T1, P3-T1
UNFOLLOW-002 확정 팔로잉 리스트의 팔로잉 중 버튼은 gray_800 배경과 크리에이터 채널의 팔로잉 중과 동일한 원형 스타일을 사용한다. gray_800 기반 원형 배경이 적용되고 unfollowed 상태는 기존 팔로우 버튼 정책을 유지한다. P1-T1, P3-T1
UNFOLLOW-003 확정 팔로잉 리스트에서 팔로잉 중 버튼 터치 시 Bottom Sheet 액션 메뉴를 표시하지 않는다. CreatorFollowNotifyFragment를 통한 팔로잉 중 액션 메뉴 route가 제거된다. P1-T2, P3-T2
UNFOLLOW-004 확정 팔로잉 리스트에서 팔로우 해제 전 V2ModalDialog로 확인한다. 취소는 side effect가 없고, 확인만 기존 unfollow 호출을 실행한다. P1-T2, P3-T2
UNFOLLOW-005 확정 크리에이터 채널에서 팔로우 해제 전 V2ModalDialog로 확인한다. 팔로잉 중 캡슐 터치만 Dialog를 표시하고, 팔로우 시작 branch는 기존대로 즉시 실행한다. P1-T3, P4-T1
UNFOLLOW-006 확정 Dialog 문구는 한국어, 일본어, 영어 string resource로 제공한다. 모든 locale에서 title, description, cancel, confirm resource가 있고 description은 %1$s로 크리에이터 이름을 받는다. P2-T1

8. UI/UX Expectations

8.1 팔로잉 리스트 버튼

  • 팔로잉 중: ic_new_following_white, @color/gray_800, 크리에이터 채널 팔로잉 중과 동일한 원형 스타일.
  • 팔로우 전: 기존 팔로우 버튼 표시와 팔로우 시작 동작 유지.
  • 알림 on/off에 따른 팔로잉 중 버튼 이미지 분기는 제거하거나 동일한 팔로잉 중 UI로 통합한다.

8.2 팔로우 해제 확인 Dialog

V2ModalDialog를 사용한다.

Locale Title Description Cancel Confirm
Korean 팔로우 해제 팔로우를 해제할까요?\n%1$s의 소식을 받을 수 없어요. 취소 해제하기
Japanese フォロー解除 %1$sからの最新情報を受け取れなくなります。\nフォローを解除しますか? キャンセル 解除する
English Unfollow Youll no longer receive updates from %1$s.\nDo you want to unfollow? Cancel Unfollow

9. API 계약

API 계약 변경은 없다. 기존 팔로우/언팔로우 endpoint와 payload를 그대로 사용한다.

10. 보안과 데이터 취급

  • 인증 토큰, API URL, 내부 오류 정보는 Dialog, Toast, 로그에 노출하지 않는다.
  • Dialog description에는 화면에 이미 표시되는 크리에이터 이름만 삽입한다.

11. 성능과 품질 요구사항

  • 신규 dependency를 추가하지 않는다.
  • Dialog 확인 버튼 중복 터치는 기존 V2ModalDialog의 중복 클릭 방지 동작을 재사용한다.
  • 테스트는 app/src/test의 local/source test로 제한한다.
  • UI 변경 자동 테스트는 리소스 선택, route, callback 흐름만 검증하고 layout 크기·constraint·pixel은 직접 검증하지 않는다.

12. 성공 기준

12.1 기능 수용 기준

  • 팔로잉 리스트 팔로잉 중 버튼이 요청 아이콘, 색상, 원형 스타일을 사용한다. (UNFOLLOW-001, UNFOLLOW-002)
  • 팔로잉 리스트 팔로잉 중 버튼이 CreatorFollowNotifyFragment를 표시하지 않는다. (UNFOLLOW-003)
  • 팔로잉 리스트 팔로우 해제는 V2ModalDialog 확인 후에만 실행된다. (UNFOLLOW-004)
  • 크리에이터 채널 팔로우 해제는 V2ModalDialog 확인 후에만 실행된다. (UNFOLLOW-005)
  • 한국어, 일본어, 영어 문구가 확정 문구와 일치한다. (UNFOLLOW-006)

12.2 추적성 완료 기준

  • 모든 확정 요구사항이 plan-task.md의 Task와 연결된다.
  • 구현 전 계획 문서가 먼저 준비된다.
  • 코드 구현은 별도 사용자 승인 후 plan-task.md에 따라 진행한다.

13. Open Questions

ID 상태 결정 필요 사항 현재 권고 결정 주체 영향 Goal
없음 확정 없음 없음 사용자 없음

14. 요구사항 추적표

요구사항 범위 API Contract 계획 Phase Goal 자동 검증 수동 검증
UNFOLLOW-001~002 변경 없음 1, 3 P1-T1, P3-T1 FollowingCreatorAdapterSourceTest 또는 동등 source/local test 범위 제외
UNFOLLOW-003~004 변경 없음 1, 3 P1-T2, P3-T2 FollowingCreatorActivitySourceTest 또는 동등 source/local test 범위 제외
UNFOLLOW-005 변경 없음 1, 4 P1-T3, P4-T1 CreatorChannelActivitySourceTest 범위 제외
UNFOLLOW-006 변경 없음 2 P2-T1 string resource source/local test 또는 관련 source test 범위 제외

15. Decision Log

날짜 ID 상태 결정 근거 영향 요구사항·계약·Goal
2026-08-18 DEC-001 확정 한국어 Dialog description은 팔로우를 해제할까요?\n%1$s의 소식을 받을 수 없어요.로 사용한다. 사용자 인터뷰에서 A안 확정 UNFOLLOW-006, P2-T1
2026-08-18 DEC-002 확정 시각 보조 브라우저는 사용하지 않고 텍스트 기반 문서만 작성한다. 사용자 응답 문서 작성 방식
2026-08-18 DEC-003 확정 이번 작업은 PRD와 구현 계획 문서 생성만 수행하고 코드 구현은 하지 않는다. 사용자 명시 요청 전체 범위

16. 변경 관리

요구사항 변경 시 다음을 확인한다.

  • Decision Log에 변경 이유와 날짜를 기록했다.
  • 관련 요구사항 상태·본문·수용 기준을 갱신했다.
  • plan-task.md의 범위·Files·체크박스·완료 증거를 코드 변경 전에 갱신했다.
  • 기존 Progress·검증 기록을 삭제하거나 덮어쓰지 않았다.