안녕하세요 제이븐입니다 😁
이번에 포스팅할 주제는 애플에서 제공하는 ATS란 기능에 대해서 알아보겠습니다

ATS는 iOS 9에서 도입된 네트워크 보안 기능으로 앱이 네트워크 통신을 사용할때 HTTPS를 사용하도록 요구합니다.
이는 앱이 보안되지 않는 HTTP로 통신을 하려고 할 때 사용자의 데이터를 보호하고 앱의 보안 수준을 높히기 위해 강제하는 역할을 합니다.
iOS에서는 HTTPS 통신을 기본으로 합니다.
암호화가 되지 않는 평문 데이터를 전송하는 HTTP 통신을 아무런 설정이 없이 사용한다면 ATS(App Transport Security)에 의해서 차단됩니다.
ATS는 URL Loading System에서 동작합니다.
URL Loading System은 iOS에서 네트워크 데이터 전송을 관리하는 프레임워크 입니다.
이 프레임워크에는 URLSession을 포함한 다양한 클래스를 제공하며 네트워크 요청과 응답을 처리하는 모든 작업을 관리합니다.
iOS에서는 통신을 할때 기본적으로 URL Loading System을 사용하는데 네트워크 요청을 하는 과정에서 자동으로 ATS가 동작하게되고 HTTP 같은 보안에 취약한 통신을 강제로 거부하기 때문입니다.
ATS는 iOS에서 Default로 활성화 되어있기 때문에 모든 통신에 관여하지만 일부 주소에 예외를 주어서 HTTP 통신을 가능하게 할 수 있습니다. 하지만 이 방법은 앱의 보안을 저하시키기에 가장 최후의 수단으로 사용해야 됩니다.
레거시 API 사용
레거시 시스템과 통신이 필요한 상황에는 HTTP 설정이 필요할 수 있습니다. 기존 HTTP 통신을 통해서만 접근 가능한 API를 제공하는 경우가 될 수 있겠지만 이런 상황은 거의 없다고 생각됩니다.
서드파티 API 사용
서드파티 API 제공자가 HTTPS를 지원하지 않는 경우 해당 API 통신을 위해서 HTTP 연결이 필요할 수 있습니다. 저는 개인적으로 이쪽 경험이 있습니다 회사에서 ‘스타플레이어’라는 업체의 보안 플레이어를 사용했는데 해당 업체에서 HTTP 서비스를 제공하여서 해당 주소에 대해서 부분적으로 예외 설정을 한 경험이 있습니다.
개발 및 테스트 환경
개발 또는 테스트 환경에서 HTTPS 통신을 지원하지 않는다면 해당 환경에 대해서 설정이 필요할 수 있을 것 같습니다.
프로젝트의 Info.plist 파일에서 설정할 수 있습니다.

App Transport Security Settings에서 Exception Domains에 ATS에 예외를 원하는 도메인 주소를 넣고 NSExceptionAllowsInsecureHTTPLoads를 YES로 설정해줍니다.
추가적으로 NSIncludesSubdomains는 해당 도메인에 하위 도메인도 예외에 포함 시킬 것인지 설정하는 것입니다.
예를 들어서 example.com을 ATS에서 예외 처리를 하고 NSIncludesSubdomains도 활성화 한다면 example.com/post/1 이런 하위 도메인도 허용한다는 의미입니다.
추가적인 옵션들에 대해서 간략하게 설명하겠습니다.
이번에는 애플에서 지원하는 네트워크 보안 강화 방법인 ATS에 대해서 알아보았습니다.
강제적으로 HTTP 통신을 방지하는 방법인데 안전한 통신을 지향하기 위해서 도입된 것이라고 생각합니다.
하지만 HTTP를 예외적으로 사용해야될 때가 있을텐데 이럴 경우에 모든 HTTP 통신을 허용하는 것이 아닌 예외적인 도메인 주소만 허용해서 사용하는 것이 좋을 것이라고 생각됩니다.
질문과 피드백은 언제나 환영합니다. 🤗