Skip to content

refactor(platform): 소관 그래프를 Navigation 3 로컬 스택으로 이관 #1698

Closed

Description

@OnlyReadOneBook

작업 유형

refactor — 동작 변경 없는 구조·책임·경계 개선

주 담당 모듈

platform — Android 앱·CI·빌드·릴리스·저장소 운영

개요

Navigation 3 전환 중 플랫폼 담당 범위에서 즉시 진행할 수 있는 공통 계약과 Onboarding·Afternote·ReceivedAfternote·Receiver 로컬 그래프 이관만 소유한다. 다른 담당 그래프와 앱 전체 루트 교체는 #1702로 분리했다.

작업 범위:

  • Navigation 3 runtime/UI, lifecycle ViewModel add-on과 serialization 의존성을 convention으로 정리한다.
  • core:ui의 route/key 경계와 재사용 가능한 NavigationState·Navigator·entry decorator 계약을 만든다.
  • 온보딩 그래프를 로컬 NavDisplay로 이관하고 SignUp·FindId 공유 ViewModel 수명을 보존한다.
  • 애프터노트 작성자·수신 애프터노트 그래프를 이관하고 AfternoteHost·EditorFlow 공유 ViewModel, route 인자, 수신자 선택 결과 1회 소비를 보존한다.
  • 수신자 그래프를 이관하고 DeliveryVerificationFlow의 5화면 공유 ViewModel 수명과 인증 완료 back 경계를 보존한다.
  • 각 피처는 기존 루트 Nav2에 단일 host destination으로 연결하고, 로컬 스택 바닥의 back·외부 이동·바텀바 상태만 명시적 boundary로 앱 셸에 반환한다.
  • SavedStateHandle.toRoute()에 의존한 인자 주입은 Nav3 key 직접 주입 또는 assisted injection으로 바꾼다.
  • 결과를 실제 앱 경로에서 사용하며 최종 루트 전환 전용 dead code를 만들지 않는다.

완료 조건:

  1. Onboarding·Afternote·ReceivedAfternote·Receiver가 기존 루트 Nav2 아래 실제 사용되는 Nav3 로컬 스택으로 동작한다.
  2. 공유 ViewModel 동일성·정리 시점, route 인자, 화면 결과 1회 소비, back 경계가 현행과 동일하다.
  3. 탭 이탈·복귀와 프로세스 재생성에서 필요한 route·화면 상태가 복원된다.
  4. predictive back과 로컬 entry 제거 시 ViewModel clear를 검증한다.
  5. 관련 유닛·Robolectric·androidTest, Konsist, ktlint와 :app:compileDebugUnitTestKotlin이 통과한다.
  6. #1702가 소비할 entry·boundary 계약을 코드 또는 이슈에 남긴다.

범위 밖:

이 이슈는 다른 담당 이슈에 막히지 않으며 독립적으로 착수·완료·머지할 수 있다.

자식 이슈

없음

참고

Activity

  1. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    area:platformCI·빌드·릴리스·저장소 운영 영역
    on Aug 31, 2026
  2. changed the title [-]refactor(platform): Navigation 3 전환 — 소관 그래프 선이관과 앱 루트 NavDisplay 교체[/-] [+]refactor(platform): 소관 그래프를 Navigation 3 로컬 스택으로 이관[/+] on Sep 1, 2026
  3. OnlyReadOneBook commented on Sep 2, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    온보딩 공유 ViewModel 목록에 FindPasswordViewModel 추가

    작업 범위의 「온보딩 그래프를 로컬 NavDisplay로 이관하고 SignUp·FindId 공유 ViewModel 수명을 보존한다」에 하나가 더 붙는다.

    #1624 (feat/457-password-reset) 가 비밀번호 찾기 3화면을 세우면서 온보딩 그래프에 세 번째 그래프 스코프 공유 VM 을 추가한다.

    소유
    FindPasswordRoute · FindPasswordResetRoute · FindPasswordCompleteRoute OnboardingNavGraph
    공유 VM FindPasswordViewModel — graphScopedParentEntry() + hiltViewModel(parentEntry) 로 3 entry 가 동일 인스턴스 공유
    보존해야 할 것 이메일·인증번호·새 비밀번호 입력이 3화면에 걸쳐 유지 · 흐름 이탈 시 clear

    Nav3 엔 NavGraph 개념이 없어 getBackStackEntry(그래프) 로 잡는 이 소유 방식이 그대로는 성립하지 않는다 — rememberViewModelStoreNavEntryDecorator() 기반 스코프로 재작성 대상이다(#959 함정 2 참조: entryDecorators 를 넘기면 기본 목록을 대체하므로 rememberSaveableStateHolderNavEntryDecorator() 도 함께 넣어야 rememberSaveable 이 안 깨진다).

    #1601 이 이관 위험으로 지목한 「그래프 스코프 공유 VM 7종」의 8번째다.

    AppNavigationActions 쪽 배선도 같이 온다 — replaceFindPasswordWithComplete() · replaceFindPasswordWithLogin() 이 popUpTo { inclusive = true } 로 소비된 인증번호 화면을 비운다. Nav3 에선 로컬 스택 리스트 조작으로 바뀐다.

  4. 20 remaining items

  5. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 3, 2026
  6. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:platformCI·빌드·릴리스·저장소 운영 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions