Files
sodalive-android/docs/20260918_레거시_메인_직접_진입_v2_전환/prd.md
T

5.4 KiB

레거시 메인 직접 진입 V2 전환 PRD

문서 정보

항목 내용
문서 상태 구현 완료
작성일 2026-09-18
최종 수정일 2026-09-18
대상 제품 Android SodaLive 메인 라우팅
관련 구현 계획 docs/20260918_레거시_메인_직접_진입_v2_전환/plan-task.md
관련 review docs/20260918_레거시_메인_직접_진입_v2_전환/reviews/phase1-main-v2-direct-entry-review.md
docs/20260918_레거시_메인_직접_진입_v2_전환/reviews/phase2-live-deeplink-deferral-review.md
docs/20260918_레거시_메인_직접_진입_v2_전환/reviews/phase3-reservation-status-package-path-review.md

1. Overview

레거시 MainActivity를 직접 여는 두 사용자 흐름을 MainV2Activity로 전환한다. 기존 딥링크 데이터와 Activity stack 정리 동작은 유지한다.

2. Problem Statement

  • 라이브룸에서 다른 라이브 푸시 이동을 확인하면 레거시 MainActivity를 경유한다.
  • 라이브 예약 취소 화면의 "다른 수다 예약" 동작도 task를 비운 뒤 레거시 MainActivity를 연다.
  • 이 때문에 후속 화면 종료 시 현재 제품 기준인 V2 메인이 아닌 레거시 메인이 표시될 수 있다.

3. Goals

  • 두 직접 진입 경로가 MainV2Activity를 연다.
  • 라이브룸 딥링크 경로의 Constants.EXTRA_DATA, FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_SINGLE_TOP을 유지한다.
  • 예약 취소 경로의 finishAffinity() 동작을 유지한다.
  • 라이브룸이 foreground인 상태에서 V2 메인이 받은 라이브룸 딥링크만 1초 지연하고, 대기 및 입장 처리 중 기존 로딩 다이얼로그를 표시한다.
  • live.reservation.status package 파일의 물리 디렉터리를 package 경로와 일치시킨다.

4. Non-Goals

  • 레거시 MainActivity 내부 기능 또는 Fragment를 수정하지 않는다.
  • 다른 Activity/Fragment의 내비게이션 구조를 리팩터링하지 않는다.
  • 새로운 라우팅 추상화나 의존성을 추가하지 않는다.

5. 핵심 사용자 흐름

  1. 라이브룸에서 다른 라이브 푸시를 누르고 이동을 확인하면 V2 메인이 딥링크 bundle을 처리해 대상 라이브로 이동한다.
  2. 이동한 라이브룸에서 나가면 V2 메인이 표시된다.
  3. 라이브 예약 취소 화면에서 "다른 수다 예약"을 누르면 기존 task를 정리하고 V2 메인이 표시된다.

6. 기능 요구사항

ID 상태 요구사항 수용 기준 계획 연결
ROUTE-001 확정 라이브룸 딥링크 확인 경로는 MainV2Activity를 사용한다. target이 MainV2Activity이고 기존 bundle/flags가 유지된다. P1-T1
ROUTE-002 확정 예약 취소의 다른 수다 예약 경로는 MainV2Activity를 사용한다. target이 MainV2Activity이고 finishAffinity()가 유지된다. P1-T1
ROUTE-003 확정 대상 두 파일에서 레거시 MainActivity 직접 참조를 제거한다. source test에서 import와 Intent target 부재를 확인한다. P1-T1
ROUTE-004 확정 MainV2Activity.onNewIntent()는 foreground 라이브룸에서 전달된 라이브룸 딥링크만 1초 지연한다. 채팅·오디오·일반 딥링크는 기존 즉시 처리 경로를 유지하고 SINGLE_TOP도 유지된다. P2-T1
ROUTE-005 확정 지연 중에는 기존 LoadingDialog를 표시하고 라이브 입장 loading 상태로 표시 책임을 인계한다. deferred 또는 live entry loading 중에만 다이얼로그가 표시되고 두 상태가 모두 끝나면 해제된다. P2-T1
ROUTE-006 확정 Activity 종료 후 지연된 딥링크가 실행되지 않는다. onDestroy()에서 해당 callback을 제거하고 다이얼로그를 해제한다. P2-T1
ROUTE-007 확정 live.reservation.status package 파일은 live/reservation/status/에 위치한다. 대상 6개 파일이 새 경로에 있고 기존 live/reservation_status/ 경로는 존재하지 않는다. P3-T1

7. 오류 처리와 보안

  • 기존 Intent extra와 Activity flag를 그대로 유지하므로 신규 오류 처리는 추가하지 않는다.
  • 인증 정보, 토큰, URL을 새로 저장하거나 로그로 출력하지 않는다.

8. 테스트 및 수용 기준

  • source test가 두 경로의 MainV2Activity target과 레거시 target 부재를 검증한다.
  • focused unit test와 Kotlin compile이 성공한다.
  • 사용자 요청에 따라 기기·에뮬레이터 UI 테스트는 수행하지 않는다.
  • source test가 foreground 라이브룸 딥링크의 선택적 지연, 기존 loading 결합 조건, 종료 정리를 검증한다.

9. Decision Log

날짜 결정 이유
2026-09-18 두 직접 진입 경로를 함께 V2로 전환 사용자가 두 곳 모두 수정을 확정했다.
2026-09-18 기존 flags, extras, finishAffinity() 유지 메인 target 외 동작 변경을 피한다.
2026-09-18 foreground 라이브룸 딥링크에만 1초 지연과 기존 로딩 다이얼로그를 적용 레거시 진입 경로가 제공하던 정리 시간을 재현하면서 다른 딥링크와 MainV2Activity 단일 인스턴스 동작을 유지한다.
2026-09-18 reservation_status 물리 디렉터리를 reservation/status로 이동 package 선언과 소스 경로를 일치시키고 ktlint 허용 package명을 유지한다.