docs(main): 복귀 초기화 방지 계획을 추가한다

This commit is contained in:
Yu Sung
2026-07-15 14:41:46 +09:00
parent 063c2808de
commit e466774a8a
2 changed files with 71 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
# 메인 복귀 시 중복 초기화 방지 계획
### Phase 1: 현재 동작 확인
- [x] **Task 1.1: MainView 생명주기와 내비게이션 구조 확인**
- 확인: `SodaLive/Sources/V2/Main/MainView.swift`
- 확인: `SodaLive/Sources/ContentView.swift`
- 확인: `SodaLive/Sources/App/AppState.swift`
- 검증 기준: `MainView``NavigationStack` 루트에 유지되고 복귀 시 첫 번째 `.onAppear`의 요청이 반복되는 구조를 확인한다.
### Phase 2: 중복 초기화 차단
- [x] **Task 2.1: MainView 인증 데이터 초기화에 1회 가드 적용**
- 수정: `SodaLive/Sources/V2/Main/MainView.swift`
- 검증 기준: 로그인 상태에서 `hasLoadedMainData``false`인 경우에만 인증 데이터 요청이 실행된다.
- 검증 기준: `contentView`와 push 메시지용 두 번째 `.onAppear`는 변경되지 않는다.
### Phase 3: 검증
- [x] **Task 3.1: 변경 범위 및 Debug 빌드 검증**
- 확인: `SodaLive/Sources/V2/Main/MainView.swift`
- 실행 명령: `git diff --check`
- 실행 명령: `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug -destination 'generic/platform=iOS Simulator' -derivedDataPath /private/tmp/SodaLiveDerivedData CODE_SIGNING_ALLOWED=NO build`
- 기대 결과: 공백 오류와 컴파일 오류 없이 빌드가 성공한다.
## 검증 기록
- 2026-07-15: `ContentView``AppState`를 확인해 일반 상세 이동은 `navigationPath`에 destination을 추가하고, 메인 복귀는 path를 제거하는 구조임을 확인했다. `MainView`의 인증 데이터 요청은 첫 번째 `.onAppear`에 있어 복귀마다 다시 실행될 수 있다.
- 2026-07-15: `MainView``hasLoadedMainData` 상태를 추가하고, 토큰이 존재하면서 아직 로드하지 않은 경우에만 인증 데이터 초기화 요청을 실행하도록 변경했다. `contentView`와 push 메시지용 두 번째 `.onAppear`는 변경하지 않았다.
- 2026-07-15: `git diff --check`가 exit 0으로 통과했다. Simulator 접근이 필요한 빌드는 샌드박스 밖에서 실행했으며, 위 `xcodebuild` 명령이 기존 경고만 출력하고 `** BUILD SUCCEEDED **` 및 exit 0으로 완료됐다.

View File

@@ -0,0 +1,41 @@
# PRD: 메인 복귀 시 중복 초기화 방지
## 목표
- 다른 페이지에서 `MainView`로 복귀할 때 메인 컨테이너의 인증 데이터 초기화 요청이 반복되지 않게 한다.
- `contentView`와 각 탭 하위 화면의 기존 새로고침 동작은 유지한다.
## 문제/배경
- `MainView``NavigationStack`의 루트로 유지되지만, destination에서 복귀하면 첫 번째 `.onAppear`가 다시 실행된다.
- 이때 `pushTokenUpdate()`, 회원 정보, 이벤트 팝업, 재생 추적 요청이 매번 반복된다.
## 성공 기준
- 로그인 상태에서 메인 인증 데이터 초기화 요청은 동일한 `MainView` 생명주기 동안 한 번만 실행된다.
- 비로그인 최초 진입은 로드 완료로 처리하지 않아 이후 로그인한 메인 진입에서 초기화 요청이 실행된다.
- `contentView` 구성과 push 메시지 복귀 처리는 변경하지 않는다.
- `SodaLive` Debug 빌드가 성공한다.
## 제외 범위
- 탭 하위 화면의 `.onAppear` 및 데이터 새로고침 정책 변경
- `AppState` 내비게이션 구조 변경
- `softRestart()`가 의도적으로 `MainView`를 재생성하는 동작 변경
- 기존 사용자 작업인 이벤트 팝업 배경 및 프로젝트 버전 설정 변경
## 핵심 요구사항
- `MainView`가 소유하는 로컬 `@State`로 초기화 완료 여부를 관리한다.
- 토큰이 비어 있을 때는 초기화 완료 상태를 설정하지 않는다.
- 기존 첫 번째 `.onAppear`의 인증 데이터 요청에만 가드를 적용한다.
## 기술/운영 제약
- 수정 범위는 `SodaLive/Sources/V2/Main/MainView.swift`로 제한한다.
- 현재 프로젝트에 테스트 번들 타깃이 없으므로 정적 확인과 공식 Debug 빌드로 검증한다.
- 기존 작업 트리 변경을 보존한다.
## 미결정 사항
- 해당 없음.