iOS 앱 HTTP 통신 오류 해결

알파관·2022년 12월 4일
0
post-thumbnail

문제상황

데이터 API를 가져와서 앱의 화면에 보여주는 실습을 하던 중 API 아래의 사진과 같이 데이터가 아예 불러와지지 않고 네트워크 관련 에러문구가 지속해서 뜨는 문제를 겪게 되었다.


원인찾기

처음에는 json 파일을 decode하는 과정에서 문제가 있다고 판단하고 정상적으로 작동했던 뷰의 코드를 가져와 그대로 사용해보았지만 문제는 해결되지 않았다.

그래서 나는 이 문제의 원인은 API Key의 문제 혹은 API의 URL 자체의 문제라고 판단했다.

1. API Key의 문제인가?

API Key의 문제인지 알아보기 위해서는 웹 상에서도 API 주소에 접속했을 때 데이터가 잘 뜨는지 확인하면 알 수 있다.

따라서, 나는 코드에서 사용한 API 주소를 즉시 웹 상에 cmd + C/V하여 접속해보았다.

첫 번째 사진에 나와 있는 API 주소로 접속했더니 두 번째 사진에 보이는 것처럼 데이터가 멀쩡히 출력된 것을 확인할 수 있었다.

이로써 API Key에는 문제가 없음이 확실해졌다.

2. URL 자체의 문제인가?

실습 코드에서 사용한 API 주소의 문제인지 확인해보기 위해, 본 json 코드를 바탕으로 mocki에서 임의 API 주소를 만들어서 코드에 적용시켜보았다.

mocki를 통해 위와 같은 API 주소를 발급받았고 코드를 돌려보았다.

바뀐 API 주소로 코드를 돌려보니까 위와 같이 정상적으로 동작하는 것을 확인할 수 있었다.

이를 통해, 처음에 사용했던 API 주소에 문제가 있었음을 알 수 있었다.


해결법 찾기

우선 Mocki에서 생성한 Mock API와 본래의 API는 분명 같은 데이터를 담고 있는데 어째서 차이를 보였던 것인지 먼저 알아볼필요가 있다고 생각해 이 둘의 차이점에 대해 알아보았다.

Mock API란?

Mock API는 실제로 REST API가 구축되어 있지 않더라도, 있는 것처럼 테스트 환경을 만들어줌

API의 흉내만 낼 뿐이기에 테스트 용이 아닌 프로덕션 레벨에서는 사용이 불가능하며 API 준비가 덜 된 상태에서 개발을 진행할 시에 사용하기 좋다는 장점이 있다고 한다.

실제 현업에서는 백엔드 팀이 API 서버를 아직 개발하지 못했을 때, 프론트 개발팀이 API로 뷰를 구성해야 할 때 임시용으로 사용한다고 한다.

Mocki외에도 Postman 등도 활용하여 Mock API를 생성하기도 한다.

ATS 정책 위반

https://www.hahwul.com/2019/03/11/ios-app-http-app-trasport-security/

끊임없는 구글링과 팀원들의 도움 덕에 위의 해결 링크를 찾아서 문제를 해결해냈다!!

현 문제의 ATS 정책 위반이라고 한다.

애초에 코드로 해결할 수 없는 문제였다는 점에서 뭔가 허무했다..
(코드에 쏟은 내 시간...)

ATS란?

iOS 9 버전 이후부터 적용된 개인정보보호 기능이고 Xcode7 버전 이상에서 앱 생성 시 기본값으로 가져가게 되는 보안 정책이다.

보안 이슈로 도입된 ATS 때문에 결과적으로 HTTP와의 통신이 Xcode에서는 기본적으로 불가능하다는 것이 위의 링크와 ATS의 정의에 대해 알아본 나의 생각이었다.

HTTP와의 통신을 위해서는 결국엔 Xcode상에서 특수한 조취를 취해야하며, 그 방법은 위 링크에 잘 나와 있어서 쉽게 문제를 해결해 나갈 수 있었다.


문제해결

  1. Info list에 들어가서 HTTP와의 통신을 위한 설정을 해준다.

Info list에서 App Transport Security Settings (ATS settings)를 key에 추가해주고 Allow Arbitary Loads를 YES로 값설정 해줌으로써 HTTP 통신이 가능해지게끔 해줌

  1. 본래 사용하고자 했던 API 주소를 다시 살려서 코드를 실행해본다

그 결과 위의 사진처럼 결과가 잘 나옴을 확인할 수 있었다.


API를 통해 데이터를 불러오는 것은 앱을 제작하는데에 있어서 매우매우 중요한 작업이다.

그런 의미에서 이번 문제 해결과정은 굉장히 의미있는 배움이라는 생각이든다.

API 호출에 대한 막연한 두려움이 있었는데 조금은 그 두려움이 사라진거 같아서 좋다!

profile
iOS🍎

0개의 댓글