Skip to content

수신자 목록이 화면 재진입 시 미갱신 — 앱 재시작 전까지 stale #579

Closed

Description

@OnlyReadOneBook

📜 Overview (Required)

설정 → 수신자 목록이 앱 실행 중에는 갱신되지 않는다. 화면을 나갔다 다시 들어와도 조회 요청이 나가지 않아, 그 사이 늘어난 수신자가 보이지 않는다 (2026-07-28 16:17 에뮬 런타임 실측).

실측

  1. 수신자 3건이 서버에 있는 상태
GET /api/v1/users/receivers
<-- 200 [{"receiverId":11,"name":"Sub Receiver"…},{"receiverId":12,"name":"Invalid Phone"…},{"receiverId":13,"name":"Invalid Phone Dup"…}]
  1. 그런데 화면에는 2건(11·12)만 표시됨
  2. 뒤로 → 수신자 목록 재진입 → 여전히 2건, 네트워크 요청 0건
  3. 앱을 강제 종료 후 재시작 → 조회 1회 발생 → 3건 모두 표시

즉 앱 시작 시 한 번 받아온 목록을 계속 쓰고, 화면 재진입은 갱신 계기가 되지 않는다. 수신자를 등록하고 목록으로 돌아와도 같은 문제가 생긴다.

수정 방향: 화면 진입 시 목록을 다시 조회한다.

📌 Child Issue(Optional)

No response

📍 Note (Optional)

Activity

  1. OnlyReadOneBook commented on Aug 2, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    원인 지점을 짚어 둔다.

    ReceiverListViewModel 에 조회를 트리거하는 코드가 없다. repository Flow 를 구독만 한다.

    ```kotlin
    val receivers: StateFlow<List> =
    userRepository.receiverListFlow
    .map { … }
    .stateIn(scope = viewModelScope, started = SharingStarted.WhileSubscribed(5_000), initialValue = emptyList())
    ```

    init 블록도 refresh() 도 없어서, 화면 진입·재진입이 서버 조회를 일으키지 않는다. 실측에서 재진입 시 요청 0건이고 앱을 재시작해야 갱신되는 것이 이 구조와 맞는다 — 재시작 때 다른 경로로 채워진 값이 Flow 에 실려 온 것이다.

    ReceiverListScreen.kt:73 의 LaunchedEffect 는 스크롤 인덱스(listState·consonantIndexMap)용이라 데이터 로드와 무관하다.

  2. changed the title [-]fix(setting): 수신자 목록이 화면 재진입 시 미갱신 — 앱 재시작 전까지 stale[/-] [+]수신자 목록이 화면 재진입 시 미갱신 — 앱 재시작 전까지 stale[/+] on Aug 28, 2026
  3. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 13, 2026
  4. github-actions commented on Sep 13, 2026

    @github-actions
    Contributor

    이 이슈를 맡은 PR 은 #2034 다 (base refactor/1805-receiver-list-mvi).

    base 가 기본 브랜치(develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에
    아무것도 표시하지 않는다. 본문에 Closes #N 이 있어도 마찬가지다 — 그 링크는 기본 브랜치를
    target 하는 PR 에서만 만들어진다.

    PR 이 닫히거나 머지되면 이 이슈의 pr-open 라벨은 다음 리컨사일에서 떨어진다.

  5. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 18, 2026
  6. OnlyReadOneBook commented on Sep 23, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    develop 에서 이미 고쳐져 있어 완료로 닫는다.

    본문의 두 증상(재진입해도 요청 0건, 앱을 재시작해야 갱신, 등록 뒤 복귀도 같음)은 08-04 커밋 cfb25be 에서 없어졌다. 이 커밋이 UserRepositoryImpl 의 싱글턴 receiverCache(첫 조회값을 계속 재방출하던 캐시)를 걷어내고, 구독마다 receiverRefreshRevision 을 따라 다시 조회하게 바꿨다. createReceiver 성공도 revision 을 올린다. 커밋 메시지에 이슈 번호가 없어 git log --grep=#579 로는 안 잡힌다.

    재진입 경로 근거 (origin/develop f69332d):

    • feature/setting/presentation/.../navigation/SettingNavGraph.kt 108~110행: composable<RecipientListRoute> 가 hiltViewModel() 로 entry 스코프 ViewModel 을 만든다.
    • app/.../navigation/AppNavigationActions.kt 226~228행: onRecipientListBack 은 popBackStack() 이다. 나가면 entry 와 ViewModel 이 사라지고, 다시 들어오면 새 ViewModel 이 새 구독으로 조회한다.
    • core/data/.../UserRepositoryImplTest.kt 156행 receiverListFlow - 새 구독은 서버에서 목록을 다시 조회한다, 311행 createReceiver - 성공하면 구독 중인 목록을 다시 조회한다 가 두 증상을 고정한다.

    남은 앱 안 경로는 수신자를 수정하고 5초 안에 목록으로 돌아오는 경우 하나다(WhileSubscribed(5_000) 로 살아 있는 같은 구독이 옛 이름을 보여 준다). 이건 #2127 이 추적하고 PR #2130 이 updateReceiver 성공에도 revision 을 올려 고친다. 그 5초 창 안에 다른 기기에서 생긴 외부 변경까지 되살리는 재조회는 넣지 않는다. 앱 안의 변경 경로(등록·수정)는 revision 이 덮고, 남는 값이 창 안의 외부 변경뿐이라서다.

    Note 의 두 항목도 풀려 있다. 상세 진입은 #631 로 관리 화면 행 탭이 수정 화면으로 가고, 0건 안내는 #2086(3ed4af2)이 넣었다.

    09-18 에 정한 설정 사슬 재개 순서에서 닫힌 PR #2034(이 이슈의 사슬 구현, 원격 브랜치 fix/579-receiver-reentry 보존)는 이 판정으로 한 칸 빠진다. 그 사슬이 쓰던 재시도 API 는 #2045 가 refreshReceiverList() 로 develop 스택 위에 다시 넣는다.

    실기 재현은 하지 않았고, 판정은 코드와 위 테스트 대조다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:setting설정 기능 영역bugSomething isn't working

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions