아요 개발 일기

[iOS] Moya가 뭐야?! 본문

iOS

[iOS] Moya가 뭐야?!

소진이 2023. 1. 6. 17:35

안녕하세요!

오늘은 새로운 API 통신 방법인 Moya에 대해서 공부해보겠습니다!!


What Is Moya? 🧐

iOS에서는 네트워킹을 구현하는 가장 기본적인 방법으로 URLSessoion을 사용합니다.

URLSession은 로우레벨의 코드를 작성할 수 있고, 다른 프레임워크를 사용할 필요가 없다는 장점이 있지만, 사용이 복잡하고 코드의 가독성이 좋지 않아서 Foundation Networking을 기반으로한 인터페이스를 제공해 네트워킹 작업을 단순화 해주는 라이브러리인 Alamofire를 많이 사용합니다.

 

즉, URLSession을 한 단계 추상화시킨 방식이 우리가 많이 사용하고 있는 Alamofire 라이브러리입니다.(URLSession 기반)

Alamofire는 iOS 앱 개발할 때 가장 보편적으로 많이 사용되는 방법이지만, 유지 보수와 유닛 테스트가 힘들다는 단점이 있습니다.

 

그래서 등장한 Moya는 URLSession을 추상화한 Alamofire를 다시 추상화한 프레임워크로 NetWork Layer를 템플릿화 해서 재사용성을 높히고, 테스트가 용이하며 개발자가 request,response에만 신경쓰도록 해줍니다.

 

 

Moya framework dependencies (프레임워크 의존성)

 

https://github.com/Moya/Moya 왼쪽은 일반/ 오른쪽은 Moya

왼쪽은 Network Layer를 통해서 API를 관리하고, 자유로운 방식을 통해서 네트워킹을 구현한다면

Moya는 오른쪽 그림처럼 깔끔한 레이어를 가지며 자체적으로 네트워킹을 수행하지 않고 Alamofire를 통해서 수행합니다.

(Network Layer를 템플릿화 시켜서 재사용할 수 있게 만들어준다는 점이 장점)

 

그렇기 때문에 Moya는 기존 네트워킹 수행 방식이 가지고 있던 다양한 문제들을 해결해줍니다.

  • Makes it hard to write new apps ("where do I begin?")
  • Makes it hard to maintain existing apps ("oh my god, this mess...")
  • Makes it hard to write unit tests ("how do I do this again?")

Moya의 훌륭한 세가지 특징

  • Compile-time checking for correct API endpoint accesses.
  • Lets you define a clear usage of different endpoints with associated enum values.
  • Treats test stubs as first-class citizens so unit testing is super-easy.

 

Moya와 Alamofire의 차이는 뭘까?

Moya는 직접적인 네트워킹을 수행하지 않습니다. (자체적 네트워킹을 수행 X)

Alamofire는 직접적인 네트워킹을 수행합니다.

 

즉,  Moya Alamofire 네트워킹 기능을 사용하고, Alamofire을 추상화하기 위한 수단!

통신 부분을 보고 싶다면 Moya를 이용한 네트워킹 글을 참고해주세요!