Skip to content

iOS 웹뷰 이미지 업로드 시 페이지가 새로고침 되는 현상 디버깅 ​


진단하기 ​

iOS 웹뷰 환경에서 <input type="file" accept="image/*" capture="camera">를 사용해 이미지를 불러올 때, 정상적으로 파일 선택이 되지 않고 페이지 전체가 새로고침되는 버그가 발생했습니다.

문제는 iOS의 viewWillAppear 라이프사이클 메서드에서 웹뷰의 load 함수를 호출한 경우에만 발생했습니다. 이 버그로 인해 iOS 웹뷰 환경에서 이미지 업로드 기능이 전혀 작동하지 않았고, 사용자들은 파일 선택을 시도할 때마다 페이지가 새로고침되는 문제를 겪었습니다.

재현하기 ​

문제를 재현하기 위한 조건은 다음과 같았습니다

  1. iOS 환경에서 웹뷰 사용
  2. viewWillAppear 라이프사이클에서 웹뷰 load 함수 호출
  3. <input type="file" accept="image/*" capture="camera"> 엘리먼트로 이미지 선택 시도

원인을 찾기 위해 iOS 네이티브 코드와 웹 코드를 한 줄씩 제거해가며 어떤 코드가 문제를 일으키는지 파악했습니다. 이분 탐색 방식으로 코드를 제거해나가면서 문제의 범위를 점차 좁혀갔습니다.

수정하기 ​

웹뷰 load 코드를 viewWillAppear가 아닌 다른 라이프사이클 메서드에서 호출하도록 변경했습니다. 웹뷰 초기화 타이밍을 조정함으로써 이미지 업로드 기능이 정상적으로 동작하도록 수정할 수 있었습니다.

재미있는 점은 이 해결책을 찾은 과정입니다. 한참 디버깅을 하다가 잠들었는데, 꿈속에서도 버그를 수정하고 있었습니다. 꿈속에서 전 회사 기술팀장님이 나타나 "이렇게 이렇게가 문제인 거면 이 부분을 확인해보면 되지 않을까요?"라고 조언을 해주셨고, 새벽 4시에 잠에서 깨어 그 방법을 시도해보니 정말 동작했습니다.

새벽 4시에 버그 수정을 도와주셔서 감사하다고 팀장님께 문자를 보냈습니다.

재발방지하기 ​

이 경험을 통해 다음과 같은 교훈을 얻을 수 있었습니다

iOS 웹뷰 라이프사이클 이해의 중요성iOS 웹뷰의 라이프사이클과 웹 기능 간의 타이밍 이슈는 예상치 못한 버그를 만들 수 있습니다. 특히 파일 업로드와 같은 네이티브 권한이 필요한 기능은 웹뷰 초기화 시점에 민감하게 반응할 수 있으므로, iOS 웹뷰 환경에서 파일 업로드 기능 테스트를 필수 점검 항목으로 추가해야 합니다.

잠재의식의 힘 활용하기때로는 문제에서 잠시 벗어나 휴식을 취하는 것이 해결책을 찾는 데 도움이 될 수 있습니다. 이 사례처럼 잠재의식이 문제 해결에 기여할 수도 있으니, 막힐 때는 잠시 쉬어가는 것도 좋은 디버깅 전략이 될 수 있을 것 같아요.