WebView 앱에서 Native Bridge가 자주 깨지는 구조적 원인
Bridge는 REST가 아니라 비동기 메시지 큐입니다. JS→Native→JS 왕복에서 한쪽이 준비되지 않으면 조용히 실패합니다.
깨지는 설계
- 요청 ID 없이 fire-and-forget만 사용
- 페이지 전환 중 동일 채널명 호출 → 핸들러 해제됨
- JSON 직렬화 실패를 catch하지 않음
- iOS
messageHandlers주입 타이밍 레이스 - Android
@JavascriptInterface에서 UI 직접 조작
안정화 패턴
correlation id, timeout(8~15초), 명시적 error code, visibility 기반 큐 flush. 로그에 bridge_call / bridge_ack / bridge_timeout을 남기세요.
버전 호환: 앱은 올렸는데 웹만 안 올린 경우
Bridge 메시지 스펙에 min_app_version / feature_flags가 없으면, 구앱+신규 웹 조합에서 필드 누락으로 조용히 실패합니다.
보안
Bridge로 임의 URL 열기 · 토큰 exfiltration이 가능하면 심사 · 보안 감사에서 걸립니다. allowlist 도메인, 메시지 서명, 민감 API는 Native에서만 호출하는 원칙을 지키세요.
릴리즈 전 테스트
- 오프라인 호출 UX
- 백그라운드 30분 후 연속 호출 20회
- 저메모리 킬 후 WebView 재생성
운영 중인 앱에서 WebView · Bridge · SDK · Crash 이슈가 반복된다면 앱 운영 진단으로 원인을 정리해 드릴 수 있습니다.
앱 운영 진단 신청 →