← 염승준
05

앱 웹뷰 뒤로가기 이상 동작

하나의 버그로 보였던 것이 서로 다른 원인 둘이었습니다.

문제
  • 앱 웹뷰의 무한스크롤 피드에서 뒤로가기가 어색함. 신고된 적 없이 직접 쓰다가 발견
  • 하나의 버그로 보고 고쳤는데 증상이 남아, 재현 조건을 분리하니 원인이 둘
해결
  • 최상단으로 튕김: 저장은 0을 쓰고 복원은 0을 무시하는 비대칭이 원인. 저장 시점을 이탈 직전 한 번으로 변경
  • 스와이프 백 시 흰 배경: 메모리 가설로 두 번 시도했다가 기각. 스크롤 복원 주체를 프레임워크로 넘긴 실험 옵션이 원인이라 브라우저로 되돌림
결과
  • 뒤로가기 시 리스트 위치가 정상 복원
  • 스와이프 백 시 이전 화면이 흰 배경 없이 표시 (실기기에서 확인)

발견

직접 서비스를 쓰다가 앱 웹뷰의 무한스크롤 피드에서 뒤로가기가 어색하다는 걸 발견했습니다. 신고로 올라온 적 없는 문제였습니다.

처음엔 하나의 버그로 보고 고쳤는데 증상이 남았습니다. 재현 조건을 분리하니 원인이 서로 달랐습니다.

리스트가 최상단으로 튕기는 문제

스크롤할 때마다 위치를 저장하고 있었는데, 페이지를 떠날 때 라우터가 스크롤을 0으로 되돌리는 움직임까지 저장돼 직전 위치를 덮어썼습니다.

반면 복원 쪽은 "0이면 되돌릴 것 없음"으로 넘겼습니다. 저장은 0을 쓰는데 복원은 0을 무시하는 비대칭이 핵심이었습니다.

저장 시점을 스크롤마다가 아니라 이탈 직전 한 번으로 바꿔 해결했습니다.

스와이프 백 시 흰 배경

메모리 문제로 보고 두 차례 시도했습니다. 먼저 content-visibility, 이어서 화면 밖 아이템 언마운트. 둘 다 증상이 남았고, 가설을 기각했습니다.

실제 원인은 스크롤 복원 주체를 브라우저가 아닌 프레임워크로 넘긴 실험 옵션이었습니다. 시스템은 이전 화면 스냅샷을 놓을 위치를 브라우저 히스토리에서 읽는데, 프레임워크가 그 기록을 자기 쪽으로 가져가 참조할 값이 비어 있었던 것입니다.

실기기 콘솔에서 복원 주체만 브라우저로 되돌리자 즉시 해소됐습니다.