플러터 인터넷 접근 권한 설정하기
플러터 앱을 웹뷰로 개발하고 있는데 인터넷을 사용하기 때문에 인터넷 접근 권한을 설정해야 한다. 웹뷰 뿐만 아니라 대부분이 인터넷에 접근하는 기능이 필수다. 모바일 애플리케이션을 만들 때, 외부 API와 통신하거나 웹 서버와 데이터를 주고받는 일이 많기 때문이다. 이를 위해서는 플랫폼별로 인터넷 접근 권한을 설정해야 한다.
왜 인터넷 권한 설정이 필요한가?
앱이 인터넷에 접근하려면 반드시 권한 설정을 해야 한다. Android와 iOS 운영체제는 사용자의 보안과 개인정보 보호를 위해 앱이 무작위로 인터넷에 접근하는 것을 기본적으로 제한하고 있다. 이 덕분에 악성 앱이 사용자 데이터를 유출하는 것을 예방할 수 있다.
따라서 앱이 외부 네트워크와 통신하려면 명시적으로 허가를 받아야 한다는 점이 중요한 것 같다. 권한이 없으면 네트워크 관련 코드가 실행되지 않고, 앱의 기능이 제한될 수 있다.
Android에서 인터넷 권한 설정하기
Android 앱은 AndroidManifest.xml 파일에 인터넷 접근 권한을 추가하면 된다. 참고로 이 파일에 권한을 추가하지 않으면 네트워크 요청이 실패하게 된다.
내가 설정한 방법은 아래와 같다:
1. android/app/src/main/AndroidManifest.xml 파일을 열고, <manifest> 태그 안에 다음 코드를 추가했다.
<uses-permission android:name="android.permission.INTERNET"/>
다행히 권한 설정은 크게 어렵지 않다.
또한, 경우에 따라 일반 텍스트 트래픽(Cleartext HTTP)을 사용해야 할 때가 있다. Android 9(API 레벨 28) 이상부터는 보안상 이유로 기본적으로 HTTP 요청이 차단된다. 이 경우 usesCleartextTraffic를 사용해 HTTP 트래픽을 허용할 수 있다.
똑같이 AndroidManifest.xml 파일에서 다음과 같이 설정한다.
<application
android:usesCleartextTraffic="true"
... >
<!-- Other settings -->
</application>
이렇게 설정하면 이제 HTTP 프로토콜도 요청할 수 있다.
다만, 보안성이 낮아진다. 중요한 데이터를 주고 받는다면, 반드시 HTTPS를 사용하는 것이 좋다. 따라서 이 설정은 배포용 앱에서는 사용하지 않는 것이 좋고 개발 환경에서만 빠르게 설정하고 다시 HTTPS로 돌려 설정하는 것이 안전하다.
iOS에서 인터넷 권한 설정하기
iOS는 다소 다른 방식이다. iOS는 기본적으로 HTTPS만 허용해서 기본적으로 인터넷 접근 권한을 추가할 필요는 없지만, HTTP 요청을 하려면 설정을 추가해야 했다.
내가 추가한 설정은 다음과 같다:
1. ios/Runner/Info.plist 파일을 열고, 아래와 같이 입력했다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
이 설정을 통해 HTTP를 허용하니, 보안상 불안하다는 생각이 들었다. 가능하다면 항상 HTTPS를 사용하는 것이 좋을 거 같다.