Skip to content

Conversation

@YunDaeHyeon
Copy link
Collaborator

🔗 연관된 이슈

📝 작업 내용

📌 요약

BrowsingView에서 사용자가 Navigation의 뒤로 가기를 하거나
스와이프를 통해 홈으로 돌아가도 세션 연결이 종료되지 않아 발생하는 재연결 불가 및 상태 불일치 버그를 수정했습니다.

🔍 상세

문제 상황
사용자가 기기 연결 화면에서 "뒤로 가기" 버튼을 클릭하거나 스와이프로 홈 화면으로 돌아가도,
기존 연결된 세션이 끊어지지 않고 유지되는 문제가 있었습니다.

  • 촬영 기기: 재진입 시 이전 세션 정보가 남아있어 동일 기기와 재연결이 불가능함
  • 미러링/리모트 기기: 연결이 끊겼음을 인지하지 못해 ConnectedView에 계속 머무름

이를 해결하기 위해 onDisappear가 호출되는 시점을 다음 단계로 이동(Push)뒤로 가기(pop)로 구분하여 처리했습니다.

내용은 아래와 같습니다.

  1. BrowsingStoreisMovingToNextStep라는 State 플래그 추가
  2. 다음/리모트 없이 시작 버튼 클릭 시 플래그를 true로 설정 (flag가 true라는 것은 정상적인 진행)
  3. 화면 이탈 시(.exit)
    • 플래그가 true면 연결을 유지하고 기존 로직을 그대로 진행합니다.
    • 플래그가 false면 **고의적인 뒤로 가기(취소)**로 판단하여 browser.disconnect() 호출 및 세션을 정리합니다.

💬 리뷰 노트

BrowsingView에서 "뒤로 가기" 행위 자체가 사용자의 의도적인 "연결 취소"라고 생각했습니다.
따라서 촬영 기기에선 별도의 연결 상태 상실 알림 없이 즉시 연결을 해제하고 깔끔하게 초기 상태로 돌아가는 게 맞는 흐름이라고 판단했습니다!

📸 영상 / 이미지 (Optional)

📌 개선 전

default.mov

📌 개선 후

Note

개선 후 타이머 촬영이나 리모트 촬영, 사진 전송, 사진 저장 등의 메인 로직은 정상적으로 동작함을 확인했습니다!

default.mov

@YunDaeHyeon YunDaeHyeon changed the title [fix/#300] BrowsingView에서 네비게이션 pop 시 세션 정리되지 않는 문제를 개선한다. [fix/#300] BrowsingView에서 네비게이션 pop 시 세션이 정리되지 않는 문제를 개선한다. Feb 4, 2026
@YunDaeHyeon YunDaeHyeon requested review from opficdev and sangYuLv and removed request for sangYuLv February 4, 2026 17:48
Copy link
Collaborator Author

@YunDaeHyeon YunDaeHyeon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📄 PR Code Review Report

🔍 Summary

BrowsingStoreisMovingToNextStep 플래그를 추가하여 viewWillDisappear 시 브라우저 연결 해제 로직을 조건부로 실행하도록 변경되었습니다. 이 변경은 특정 내비게이션 흐름에서 브라우저 연결을 유지하기 위한 의도로 보이나, 플래그가 한 번 true로 설정된 후 다시 false로 재설정되지 않는 문제가 있어 브라우저 연결이 예상보다 오래 유지되거나 의도치 않게 해제되지 않는 위험을 내포하고 있습니다.

⚠️ Key Issues

  1. isMovingToNextStep 플래그의 미재설정: prepareMoveToNextStep 인텐트가 전송되면 isMovingToNextStep 상태는 true로 변경됩니다. 하지만 이 플래그를 다시 false로 되돌리는 로직이 누락되어 있습니다. 이로 인해 사용자가 내비게이션을 시작한 후 실제 다음 화면으로 이동하지 않고 돌아오거나, 내비게이션이 실패하는 경우에도 해당 플래그는 계속 true 상태를 유지하게 됩니다. 결과적으로 BrowsingView에서 뒤로가기 내비게이션이 발생했을 때 browser.disconnect() 호출이 불필요하게 건너뛰어질 수 있으며, 이는 브라우저 연결이 의도치 않게 유지되는 리소스 누수 또는 상태 불일치를 유발할 수 있습니다.

🛠 Improvement Suggestions

  1. isMovingToNextStep 플래그 재설정 로직 추가: isMovingToNextStep 플래그는 특정 내비게이션이 완료되거나 취소되었을 때 false로 명시적으로 재설정되어야 합니다. 예를 들어, 다음 화면으로의 전환이 성공적으로 이루어졌음을 알리는 리듀스 결과, 혹은 BrowsingView가 다시 화면에 나타날 때 false로 재설정하는 인텐트를 추가하는 것을 고려할 수 있습니다. 가장 안전한 방법은 현재 뷰의 라이프사이클이 종료되거나, 이 플래그의 유효 범위가 끝나면 false로 초기화하는 것입니다.
  2. 내비게이션 실패 또는 취소 시의 일관성 있는 처리: router.push 작업이 실패하거나 사용자가 내비게이션 도중에 취소하는 상황을 고려하여, 이러한 경우에도 isMovingToNextStep 플래그가 즉시 false로 재설정되도록 처리하여 후속 viewWillDisappear 로직이 올바르게 동작하게 해야 합니다.

✅ Positive Observations

  1. 의도 명확화: viewWillDisappear 시 브라우저 연결 해제 로직의 실행 여부를 isMovingToNextStep 플래그를 통해 제어하려는 시도는 특정 내비게이션 흐름에서 브라우저 연결을 유지해야 하는 비즈니스 로직의 의도를 명확하게 반영하려는 좋은 접근 방식입니다.
  2. Flux/Redux 패턴 유지: 새로운 상태와 인텐트, 결과를 추가하여 일관된 Store 기반의 상태 관리 패턴을 유지하고 있습니다. 이는 코드의 예측 가능성과 테스트 용이성을 높이는 데 기여합니다.

@YunDaeHyeon YunDaeHyeon self-assigned this Feb 4, 2026
@YunDaeHyeon YunDaeHyeon added the 🐞 fix 버그 수정 label Feb 4, 2026
@YunDaeHyeon YunDaeHyeon added this to the WEEK05 milestone Feb 4, 2026
@YunDaeHyeon
Copy link
Collaborator Author

AI의 Key Issues 리뷰의 경우 사용자가 갔다가 다시 돌아올 경우 Store가 살아있어서 flag가 true로 남아있는 경우를 말합니다.
하지만 현재 구조는 화면을 pop으로 나갔다가 다시 push로 돌아오면 스토어 자체가 새로 만들어지므로 무조건 false로 시작하니
따로 AI 리뷰 반영 작업은 진행하지 않았습니다!

Copy link
Collaborator

@GRJeon GRJeon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

빠른 수정 감사합니다

Copy link
Collaborator

@sangYuLv sangYuLv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다 👍🙂

@YunDaeHyeon YunDaeHyeon force-pushed the refactor/#289-browser-refactoring branch from 68f6835 to 85405e8 Compare February 5, 2026 01:48
Copy link
Collaborator

@opficdev opficdev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Base automatically changed from refactor/#289-browser-refactoring to develop February 5, 2026 02:16
- Browser는 계산 프로퍼티로 스트림을 노출
- HeartBeeater는 스트림 매니저의 yield 메서드 사용
- 테스트 코드 모두 통과로 동등성 확인 완료
- BrowsingView에서 뒤로 가기(Navigation Pop) 시 연결을 해제하지 않아 세션이 유지되는 문제 해결
- isMovingToNextStep 상태를 도입하여 화면 이탈 사유(Push vs Pop) 구분
- 정상적인 다음 단계 이동(Push)에는 연결 유지, 뒤로 가기(Pop) 시에는 disconnect 호출
@YunDaeHyeon YunDaeHyeon force-pushed the fix/mirroring-disconnect-on-back branch from 21ff8bc to 6f1fb95 Compare February 5, 2026 02:44
@YunDaeHyeon YunDaeHyeon merged commit 4bf3a55 into develop Feb 5, 2026
2 checks passed
@YunDaeHyeon YunDaeHyeon deleted the fix/mirroring-disconnect-on-back branch February 5, 2026 02:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐞 fix 버그 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BrowsingView에서 네비게이션 pop 시 세션 정리되지 않는 문제를 개선한다.

4 participants