iOS 웹뷰 이미지 업로드 시 페이지가 새로고침 되는 현상 디버깅
진단하기
iOS 웹뷰 환경에서 <input type="file" accept="image/*" capture="camera">를 사용해 이미지를 불러올 때, 정상적으로 파일 선택이 되지 않고 페이지 전체가 새로고침되는 버그가 발생했습니다.
문제는 iOS의 viewWillAppear 라이프사이클 메서드에서 웹뷰의 load 함수를 호출한 경우에만 발생했습니다. 이 버그로 인해 iOS 웹뷰 환경에서 이미지 업로드 기능이 전혀 작동하지 않았고, 사용자들은 파일 선택을 시도할 때마다 페이지가 새로고침되는 문제를 겪었습니다.
재현하기
문제를 재현하기 위한 조건은 다음과 같았습니다
- iOS 환경에서 웹뷰 사용
viewWillAppear라이프사이클에서 웹뷰 load 함수 호출<input type="file" accept="image/*" capture="camera">엘리먼트로 이미지 선택 시도
원인을 찾기 위해 iOS 네이티브 코드와 웹 코드를 한 줄씩 제거해가며 어떤 코드가 문제를 일으키는지 파악했습니다. 이분 탐색 방식으로 코드를 제거해나가면서 문제의 범위를 점차 좁혀갔습니다.
수정하기
웹뷰 load 코드를 viewWillAppear가 아닌 다른 라이프사이클 메서드에서 호출하도록 변경했습니다. 웹뷰 초기화 타이밍을 조정함으로써 이미지 업로드 기능이 정상적으로 동작하도록 수정할 수 있었습니다.
재미있는 점은 이 해결책을 찾은 과정입니다. 한참 디버깅을 하다가 잠들었는데, 꿈속에서도 버그를 수정하고 있었습니다. 꿈속에서 전 회사 기술팀장님이 나타나 "이렇게 이렇게가 문제인 거면 이 부분을 확인해보면 되지 않을까요?"라고 조언을 해주셨고, 새벽 4시에 잠에서 깨어 그 방법을 시도해보니 정말 동작했습니다.
새벽 4시에 버그 수정을 도와주셔서 감사하다고 팀장님께 문자를 보냈습니다.
재발방지하기
이 경험을 통해 다음과 같은 교훈을 얻을 수 있었습니다
iOS 웹뷰 라이프사이클 이해의 중요성iOS 웹뷰의 라이프사이클과 웹 기능 간의 타이밍 이슈는 예상치 못한 버그를 만들 수 있습니다. 특히 파일 업로드와 같은 네이티브 권한이 필요한 기능은 웹뷰 초기화 시점에 민감하게 반응할 수 있으므로, iOS 웹뷰 환경에서 파일 업로드 기능 테스트를 필수 점검 항목으로 추가해야 합니다.
잠재의식의 힘 활용하기때로는 문제에서 잠시 벗어나 휴식을 취하는 것이 해결책을 찾는 데 도움이 될 수 있습니다. 이 사례처럼 잠재의식이 문제 해결에 기여할 수도 있으니, 막힐 때는 잠시 쉬어가는 것도 좋은 디버깅 전략이 될 수 있을 것 같아요.