iOS-Moya를 이용한 API통신처리

생공나온 개발자·2021년 6월 7일
1

앱개발을 하면 반드시 해야 하는 부분이 http통신으로 restful api 데이터를 받아와서 앱에 데이터를 표시해주거나 데이터를 보내주는 기능이다.

라이브러리 없이 순수 swift만으로도 개발이 가능하지만 개발안건에 따라 코드가 겁나 길어지고 데이터 모델도 많이 만들어야 하는 경우가 많다.(저도 회사에서 만든 기반으로 개발을 했지만 너무 복잡해서 다 이해하기가 힘들었네요....)

ios에서 HTTP 네트워킹 대표 라이브러리인 alamofire 가 있어서 그것을 쓰면 상대적으로 편하긴 하겠지만 엔드포인트가 많고 써야할 URL이 많으면 코드가 길어지고 정리하기가 복잡할 수도 있다.

이를 좀 더 간결하고 다양한 엔드포인트나 URL을 보기 좋게 정리할 수 있는 프레임워크가 Moya이다

Moya에 대해 간단하게 설명하자면

  • 스위프트 네트워크 추상화 라이브러리
  • Alamofire와 직접 대화하지 않고 네트워크할 수 있게 도와준다

정도로 설명할 수 있다

인터넷에 moya를 쳐보면 위의 그림이 가장 많이 나올텐데 moya를 설명해주는 아주 간결한 그림이다

Alamofire 라이브러리만 사용할 때는 왼쪽 그림과 같이 네트워크층을 통과하는 화살표도 있지만 통과하지 않는 화살표도 있다. 이는 네트워크층이 완전하게 추상화를 하지 못하였다는 것을 나타내며 moya를 사용하게 되면 오른쪽의 그림과 같이 moya라이브러리가 추상화 요소 url, parameter등을 잘 정리해서 alamofire에 전달 해주는 것을 볼 수 있다.

사용법

moya의 사용 예제를 보면서 사용법을 알아보면

pod init을 한 후 pod file을 열어 아래와 같이 pod 'Moya'를 추가해주고 pod install을 한다

그러면

자동적으로 alamofire와 함께 install되는 것을 확인 할 수 있다.

그 뒤 간단하게 테이블뷰를 준비하고 네비게이션 바에 +모양의 추가버튼을 하나 넣는다

그리고 아래와 같은 데이터 구조를 가진 User라는 모델 파일을 준비를 한다

그리고 난 뒤 UserServise라는 파일을 하나 추가해주고 Moya를 import해준다


위의 사진과 같이 코드를 입력하면 되는데 사진을 보면 알겠지만 각각의 필요한 상황의 처리가 보기 편하게 정리가 되어 있다

path부분에 endpoint를 넣고 method부분에 호출 되는 상황이 get, post, put, delete인지 명시해주고 api data처리, task, header부분이 알기 쉽게 정리가 되어 있다.

정리를 한 UserService를 ViewController에서 userProvider라는 변수로 호출을 해서 사용을 하면 되는데 위의 사진과 같이 readRequest함수와 didTapAdd함수에 userProvider로 get, post를 호출하는 예시가 들어 있다

*userProvider에서 사용한 MoyaProvider는 어떤 네트워크 서비스와 상호작용할 때 만들고 사용할 주 객체를 나타낸다.

위의 방법과 같이 update와 delete도 구현이 가능하다

Moya를 알기전엔 endpoint가 많아지면 많아질 수록 뭔가 스파게티 코드같은 느낌으로 굉장히 복잡하고 기능적으론 문제없었지만 보기가 불편했었는데 moya를 쓰면서 좀 더 코드를 간결하게 정리가 가능하고 필요없는 추상화 파일을 여러개 만들 필요가 없어서 개발하는데 시간절약도 될 것같고 여러모로 좋은 라이브러리인거 같다

위 사진 sample project 깃주소 : https://github.com/mujjing/moya_tutorial/tree/master/MoyaTutorial

profile
iOS앱개발, 웹개발을 공부중인 비전공 개발자입니다.

0개의 댓글