Android WebView에서 이미지나 스크립트가 안 나올 때 (Mixed Content, Cleartext Traffic 오류 해결)
Android WebView로 하이브리드 앱을 만들거나 기존 웹 서비스를 앱으로 감싸서 운영하다 보면 꼭 한 번씩 겪는 문제가 있습니다. "PC나 모바일 브라우저에서는 잘 열리는데, 앱 WebView 안에서만 이미지나 스크립트가 안 보입니다." 하는 상황입니다. 저의 경우도 예전에 운영 서버와 테스트 서버를 오가며 세팅하다가 이 문제로 한참 헤맨 적이 있어서, 나중에도 참고하려고 깔끔하게 정리해 둡니다. 단순 화면 깨짐으로 넘기기에는 보안상 중요한 부분이라 제대로 짚고 넘어가야 합니다. 원인 및 차이점 간단 정리 원인은 크게 Mixed Content(혼합 콘텐츠)와 Cleartext Traffic(일반 텍스트 트래픽) 두 가지로 나뉩니다. 둘 다 HTTP 통신 보안 정책 때문에 발생하는 문제인데, 확인해야 하는 위치가 다릅니다. Mixed Content: 메인 페이지는 https:// 로 안전하게 열렸는데, 그 안에서 불러오는 이미지, JS, CSS, 동영상 등의 주소가 http:// 로 되어 있는 경우입니다. WebView가 보안상 이 리소스 로드를 차단해 버립니다. ( WebView 설정 영역 ) Cleartext Traffic: 앱이 암호화되지 않은 생짜 http:// 통신 자체를 시도하는 것을 말합니다. Android 9 (API 28) 이상부터는 기본적으로 이 통신이 전부 차단됩니다. ( Network Security Config, Manifest 영역 ) 가장 좋은 해결책은 당연히 모든 리소스를 HTTPS로 바꾸는 것입니다. 하지만 개발 중이거나 부득이한 예외 상황이 있다면 아래처럼 안전하게 도메인을 제한해서 풀어야 합니다. 안전한 WebView 설정 (Kotlin 코드) 화면이 깨진다고 해서 운영 앱의 WebView 설정을 MIXED_CONTENT_ALWAYS_ALLOW 로 막 열어버리면 절대 안 됩니다. 중간에서 데이터가 변조될 위험이 크고 구글 플레이 심사에서도 거절 사유가 될 수 있습니다. 운영 앱에서는 MIXED_C...