Repository navigation
refactor(platform): 앱 루트를 Navigation 3 NavDisplay로 전환 #1702
Copy link
Copy link
Closed
4 / 44 of 4 issues completed
Copy link
Labels
area:platformCI·빌드·릴리스·저장소 운영 영역CI·빌드·릴리스·저장소 운영 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
Description
작업 유형
refactor — 동작 변경 없는 구조·책임·경계 개선
주 담당 모듈
platform — Android 앱·CI·빌드·릴리스·저장소 운영
개요
#1698에 함께 있던 피처·플랫폼 소관 로컬 그래프 이관과 앱 전체 루트 교체를 분리한다. 이 이슈는 각 소관 그래프가 Navigation 3 계약으로 준비된 뒤 앱 루트의 Navigation 2 런타임을 제거하고 NavDisplay로 전환하는 최종 통합만 소유한다.
작업 범위:
- refactor(platform): 소관 그래프를 Navigation 3 로컬 스택으로 이관 #1698, refactor(setting): 설정 흐름을 Navigation 3 로컬 스택으로 이관 #1695, refactor(timeletter): 타임레터 흐름을 Navigation 3 로컬 스택으로 이관 #1696, #1697에서 준비한 entry·boundary 계약을 앱 루트에서 통합한다.
- 루트 NavHostController/NavHost를 앱 수준 NavigationState와 NavDisplay로 교체한다.
- 홈 탭별 back stack, 인증·온보딩·로그아웃 전환, back/up, 프로세스 재생성 동작을 보존한다.
- predictive back과 entry 수명 종료 시 ViewModel 정리 동작을 검증한다.
- #1601에서 확정한 회귀 시나리오를 최종 루트에서 재검증한다.
- 더 이상 사용하지 않는 Navigation 2 루트·호환 계층·의존성을 제거한다.
완료 조건:
- refactor(platform): 소관 그래프를 Navigation 3 로컬 스택으로 이관 #1698, refactor(setting): 설정 흐름을 Navigation 3 로컬 스택으로 이관 #1695, refactor(timeletter): 타임레터 흐름을 Navigation 3 로컬 스택으로 이관 #1696, #1697이 모두 닫혀 있고 완료 결과가 최신 통합 head에 반영되어 있다.
- 앱의 단일 루트 소유자가 Navigation 3 NavDisplay이며 Navigation 2와 이중 소유하지 않는다.
- 주요 진입·탭 복귀·인증·로그아웃·process recreation·predictive back 회귀가 통과한다.
- entry 제거 시 해당 범위 ViewModel과 리소스가 정리된다.
- Navigation 2 루트와 불필요한 의존성이 제거된다.
- 관련 단위·스크린샷·계측 테스트와 전체 CI가 통과한다.
의존 관계:
- blocked_by refactor(platform): 소관 그래프를 Navigation 3 로컬 스택으로 이관 #1698
- blocked_by refactor(setting): 설정 흐름을 Navigation 3 로컬 스택으로 이관 #1695
- blocked_by refactor(timeletter): 타임레터 흐름을 Navigation 3 로컬 스택으로 이관 #1696
- blocked_by refactor(mindrecord): Navigation 3 파일럿을 전체 entry 계약으로 확장 #1697
- #1697은 마음의 기록 허브를 Navigation 3 로컬 스택으로 — #1697 파일럿 #959 파일럿에 의해 별도로 막힌다. 이 이슈에는 전이 관계를 중복 등록하지 않는다.
- #1601은 이미 닫힌 회귀 기준이며 blocker가 아니다.
자식 이슈
- refactor(platform): 소관 그래프를 Navigation 3 로컬 스택으로 이관 #1698
- refactor(setting): 설정 흐름을 Navigation 3 로컬 스택으로 이관 #1695
- refactor(timeletter): 타임레터 흐름을 Navigation 3 로컬 스택으로 이관 #1696
- refactor(mindrecord): Navigation 3 파일럿을 전체 entry 계약으로 확장 #1697
참고
- #1698에서 최종 루트 전환 범위를 분리했다.
- App Link: feat(platform): App Links URI 계약·인텐트 수신·인증 후 목적지 재개 #924 는 2026-09-26 보류로 닫혔다(경로 계약을 서버가 정하지 않았다). 서버가 정하면 루트 엔진의 공식 딥링크 API 로 새로 연다. 그때 루트가 NavDisplay 면 Navigation 3 1.2.0 의 딥링크 API 를 쓴다.
- 알림 목적지 계약: 알림 탭이 목적지로 갈 수 없는 구조 — MainActivity onNewIntent 부재, PendingIntent 빌더 2벌 중복 #1111
2026-10-04 분리
완료 조건 5 중 지금의 Nav2 코드도 쓰지 않는 hilt-navigation-compose 직접 의존 4줄과 적용 모듈 0개인 AndroidFeatureConventionPlugin 은 루트 전환과 무관해 #2247 로 뗐다. 루트 Nav2 런타임과 android-navigation-compose 제거는 여기 남는다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:platformCI·빌드·릴리스·저장소 운영 영역CI·빌드·릴리스·저장소 운영 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
Activity
refactor(platform): 알림 목적지 이동의 앱 루트 결선을 떼어 Nav3 전환 뒤로 미룬다 (#1795)
refactor(app): 알림 진입 효과를 걷어 Nav3 루트 결선(#1795)으로 넘긴다 (#1727)
1hyok commentedon Sep 26, 2026
루트를
NavDisplay로 바꿀 때 App Link 매칭도 함께 판정한다.Navigation 3 가 2026-09-23 정식판 1.2.0 에서 공식 딥링크 API 를 냈다.
androidx.navigation3.runtime.deeplink의DeepLinkRequest,DeepLinkUri,DeepLinkMatcher이고, 내장 매처로 경로 패턴용UriDeepLinkMatcher와 합성 백스택용BackStackMatcher가 있다(딥링크 가이드, 1.2.0 릴리스 노트). 이 저장소는 아직 1.1.6 이다.#2093 의
AfternoteAppLinkParser는 이 API 가 없던 때 엔진에 묶이지 않으려고 직접 쓴 경로 매칭이다. 전환할 때 볼 것은 둘이다.UriDeepLinkMatcher,BackStackMatcher로 옮길 수 있는지.