Mobile Front/Android(kotlin)

Cleartext HTTP traffic to ... not permitted 문제 해결법(Glide error, Glide 오류, 사진 불러오기 실패 문제)

koh1018 2021. 2. 4. 02:58
반응형

며칠동안 해결되지 않던 문제가 있었다...

 

식품안전나라에서 공공데이터를 불러와 Glide 를 이용해서 사진을 넣는데 텍스트는 잘 들어가는 반면에 사진만 뜨지 않는 문제였다..

 

Placeholder에 설정한 이미지만 뜨고 본 이미지는 계속 나타나지 않았다

정말 며칠을 이 문제 해결을 위해 사진 자르기를 쓰려고 사용한 cropper api를 이용해 사진을 불러와도 보고 별의 별짓을 다 해봤지만 문제의 원인조차 알 수 없었다..

 

그동안 버그가 있을때는 보통 디버깅시에 빨간색으로 글씨가 떠 해당 코드를 수정하면 됐었지만 이번 경우는 그런 디버깅 메시지조차 없어 너무 답답했다..

 

그렇게 거의 반포기 상태로 다른 작업을 우선 이어나갔다.

 

근데 다른 문제를 해결하기 위해 디버그를 하던 중 디버깅 메시지에서 눈에 들어오는 메시지가 있었다.

바로 Glide가 보내는 메시지였는데, 자세히 읽어보니

Cleartext HTTP traffic to ... not permitted 이라는 메시지를 보내고 있었다.

 

심각한 문제가 아니기에 빨간색 디버깅 메시지가 오지 않았던 것이었다..

 

상황을 더 자세히 파악해 본 결과, 문제는 https가 아닌 http 주소를 통해 이미지 파일을 불러오기 때문이었다.

http는 https에 비해 보안 수준이 약하기 때문에 이 주소를 이용하기 위해선 별도의 permission이 필요했다.

 

http 주소를 허용하기 위해서는 다음과 같은 두가지 방법이 일반적으로 사용된다.

 

1. AndroidManifest.xml 파일의 <application> 부분을 android:usesCleartextTraffic="true" 로 설정 (모든 Http URL에 대해서 접근 허용)

AndroidManifest의 application 태그에서 android:usesCleartextTraffic를 true로 설정하면 모든 Http 주소에 접근할 수 있다.

<application
        android:label="@string/app_name"
        ...
        android:usesCleartextTraffic="true">

2.networkSecurityConfig 파일을 생성하고, AndroidManifest 에 등록 (일부 Http URL에 대해서 접근 허용)

android:usesCleartextTraffic는 모든 Http 사이트에 대한 접근을 허용한다. 만약에 몇몇 사이트에 대한 접근만 허용하고 싶으면 /res/xml/network_security_config.xml 파일을 만들어 예외 주소를 입력하면 된다.

등록된 주소는 https가 아니여도 허용이 된다.

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>

    <domain-config cleartextTrafficPermitted="true">

        <domain includeSubdomains="true">foodsafetykorea.go.kr</domain>

    </domain-config>

</network-security-config>

다 만들었으면 Manifest에 들어가 android:networkSecurityConfig 속성에 android:networkSecurityConfig="@xml/network_security_config"을 작성하면 끝난다.

<application
    android:label="@string/app_name"
    ...
    android:networkSecurityConfig="@xml/network_security_config" >

 

이번 삽질을 통해 정말 부족함을 많이 느꼈다..

또 개발에 있어서 디버깅 실력은 정말 중요한 부분임을 크게 느꼈다.

 

문제가 해결되어 너무 기쁘다..ㅜ

 

앞으로도 많이 삽질해보며 성장해야겠다.

반응형