최근 운영 중인 안드로이드 앱에서 간헐적으로 특정 기능들이 동작이 안되는 증상에 대한 문의가 있어서 증상을 확인해보니 웹뷰에서 서버통신을 할때 사용하는 xhr에서 cors 에러가 발생하고 있었다.
처음에는 상황을 전혀 이해할 수가 없었다. 최근 앱을 업데이트 한 적도 없었는데 모바일 웹과 같은 통신 방식을 사용하는데에 앱에서만 CORS가 발생하니 환장할 노릇이었다. 여러가지 테스트를 해보다가 알게된 사실인데
안드로이드 폰을 재시작하거나 앱을 강제종료하고 시작하면 정상적으로 동작이 된다는 사실이었다. 여기에 대해 여러가지 해석을 했다.
1. 특정 기종 따른 것?
- 처음에는 갤럭시 기종에 대해 여러가지 신고가 들어와서 확인해보니 OS도 다양하고 기종도 다양했다. 이 경우는 제외.
2. 코르도바를 사용하는 프로젝트에서 cors 설정이 실수로 빠져있었는지?
- 뭐... 최근 앱을 업데이트 한적이 없었으니 제외, 그래도 혹시 몰라 확인까지 해봄.
3. 웹서버 설정이 변경되었는지, 그리고 CORS 관련해서 임시적으로 Allow 속성을 '*'로 오픈.
- 오픈까지 해봤지만 웹서버 설정과 무관하여 다시 Allow 속성 제외.
4. 웹방화벽에서 차단되는 것이 없는지.?
- 보안팀에 확인해보니 이 역시 없었다.
여기까지 확인하다보니 OS와 크롬 웹뷰에 대한 의심이 들기 시작했다. 혹시나 해서 크롬 버전이 변경되었는지 확인해보니 최근 7월 30일 76 버전으로 업데이트 된 것이 확인되었고, 업데이트 된 버전을 제거해보고 앱을 동작시켜봤더니 문제가 사라졌다.
'유레카!'
일단 원인은 웹뷰였다. 구체적인 상황을 알기 위해 구글링을 했다. 검색어는 ''Chrome app 76 cors' 정도로 하니 바로 첫번째 검색 결과에 관련된 글이 나왔다. 글 내용중에 cordova 파일에서 xhr request를 할수 없단느 링크를 발견했고,
For information about Cordova specifically, follow the updates here:
Issue 991107: cordova app could not make XHR requests from a file any more
최종적으로 chromium 에 달린 이슈를 발견할 수 있었다.
https://bugs.chromium.org/p/chromium/issues/detail?id=991107
해당 이슈에 대한 전문을 보면 내용은 이렇다.
[Summary]
WebView 76 seems to take a wrong configuration only at the first launch time. As a workaround, once the
WebView reboots, it can continue to work correctly.
This issue will be fixed at the next update with other critical fixes if we had.
For WebView beta users:
If you are on beta channel, can you help us to confirm if your application can work with WebView 77 beta?
We have a plan to enable OOR-CORS on WebView 77. So, that helps very much to reduce a risk to cause regression issue on m77 stable promotion.
(Note: WebView 77 beta is not rolled out yet)
[개요] [구글 번역]
WebView 76은 처음 시작할 때만 잘못된 구성을하는 것 같습니다.
이 문제를 해결하기 위해 WebView가 다시 부팅되면 계속 올바르게 작동 할 수 있습니다.
이 문제는 다음 업데이트에서 다른 중요 수정 사항이있을 경우 수정 될 예정입니다. WebView 베타 사용자의 경우 : 베타 채널을 사용중인 경우 응용 프로그램이 WebView 77 베타에서 작동하는지 확인할 수 있습니까? WebView 77에서 OOR-CORS를 활성화 할 계획이 있습니다. 따라서 m77의 안정적인 프로모션에서 회귀 문제를 일으킬 위험을 크게 줄일 수 있습니다. (참고 : WebView 77 베타는 아직 출시되지 않았습니다)
결국 webview 77 버전을 출시하여 앱에 업데이트 되기 전까지는 해결이 어렵다는 소리다. 테스트 하면서 발견했던 해결방법인 폰 재시작이나 프로세스 종료 후에 재시작이 맞는 해결 방법이고.
크롬의 버그이지만 계속 이렇게 둘수 없어 웹뷰 76 버전에 대한 최초 실행인 경우 자체 재시작을 할수 있도록 앱을 고치려고 하고 있다. 그리고 크롬 홈페이지에 따르면 77 버전에 대한 업데이트는 9월 10일 예정이지만 ... 내 생각에 이 버그를 고치기 위해 좀 더 빠른 업데이트를 하지 않을까 생각이 된다.
https://www.chromium.org/developers/calendar
'dev' 카테고리의 다른 글
크롬 자바스크립트 링크 동작 에러 이슈(with target="_blank") (0) | 2019.08.19 |
---|---|
구글 애널리틱스(GA) 정의와 적용 방법 (1) | 2019.08.19 |
http https 차이 (0) | 2019.08.14 |
www 주소가 표시되지 않는 이유(feat.크롬) (4) | 2019.08.12 |
네트워크 스위치 종류(L2, L3, L4, L7 개념) 정리 (0) | 2019.08.06 |
웹 개발자 로드맵 2019 버전 (0) | 2019.08.04 |
SKT의 깃헙 어뷰징 사태에 대하여(github abusing) (0) | 2019.07.31 |
CORS 처리 시 options는 왜 부르는거지?(Simple, Pre-flight) (0) | 2019.07.30 |