Moya에서 테스트 API 만들기


swieeft | 2020. 11. 10. 10:20

안녕하세요. 정말 오랜만에 블로그에 글을 작성하게 됬네요. 블로그를 시작할 때 한달에 한번 이상은 꼭 써야지 다짐 했었는데 막상 시작하고 나니 한달에 한번 글 쓰는 것도 어렵구나라고 많이 느낍니다.

오늘은 Moya 라이브러리를 이용해서 API 개발 전 테스트 API를 만들어 실제 API를 호출하는 것처럼 개발을 할 수 있게 하는 방법에 대해 알려드리려고 합니다.

개발을 하다보면 API 개발이 되기 전에 UI가 먼저 개발 되서 마냥 API가 개발되기만을 기다린 적이 있는데요.

이 때 미리 정의 된 데이터 모델이 있다면 Moya 라이브러리에서 지원하는 테스트를 통해 API 개발 전에 실제 API 통신하듯이 테스트를 해볼 수 있는 방법이 있습니다.

우선 이 글은 Moya 사용법을 아신다는 전재로 작성이 되었습니다. 만약 Moya를 잘 모르신다면 아래 Moya 공식 깃헙 주소를 링크 해드렸으니 먼저 참고하신 후에 진행해주세요.

Moya Github

사전 준비 작업


저는 테스트를 위한 새로운 프로젝트를 만들었기 때문에 사전에 테스트 준비 작업을 진행하였습니다.

  1. Moya 설치하기

    Moya Github으로 이동해서 가이드대로 라이브러리를 자신의 프로젝트에 설치합니다.

  2. 테스트 데이터 만들기

    테스트에 사용할 데이터를 만들어 줍니다. 저는 서버에 등록 된 버전 정보에 대한 데이터를 만들었습니다.

데이터 모델 만들기


자 사전 준비 작업은 끝났습니다. 이제 본격적으로 프로젝트에서 데이터를 받아 오도록 개발을 해보도록 하겠습니다.

우선 만들어 준 테스트 데이터에 맞춰 데이터 모델을 하나 구현해줍니다.

API Service? API Manager?


저는 Moya를 사용할 때 API Service와 API Manager를 만들어서 사용합니다.

이게 정석적인 방법이라고 할수는 없고 저도 다른 블로그에서 이렇게 사용하는 것을 보고 좀 더 코드를 명확하게 분리할 수 있을 것 같아서 사용하게 되었습니다.

  • API Service : 호출할 API 리스트를 enum으로 정의하고 TargetType을 위임 받아 API에서 사용되는 정보(ex. baseURL, path, method, parameter, header 등)를 담고 있습니다.

  • API Manager : API Service에서 정의한 API들을 호출하는 곳으로 각각의 API들을 호출 후 데이터 처리, 에러 처리 등의 역할을 수행하는 곳입니다.

API Service 만들기


저는 따로 서버를 두지 않고 깃헙에서 Json을 만들어서 호출하는 방식으로 구현했습니다.

API Manager 만들기


API Manager를 만들어서 받아온 json을 파싱하고, 만약 에러가 났으면 에러 메시지를 던져줍니다.

UI 구성


받아온 데이터를 보여줄 UI를 만들어 줍니다.

moyatest1.png

API 호출하기


  • 코드

  • 결과화면

moyatest2.png

위에 만들어진 테스트 데이터에 맞게 각각의 항목이 잘 표시 되는 것을 확인 할 수 있습니다.

테스트 API 만들기


지금까지는 이제 API 개발이 완료 되었을 때 호출하는 방법에 대해 알아보았습니다.

그럼 지금부터 본격적으로 테스트 API를 만들어보려고 하는데요. 지금 했던 작업에서 조금만 수정하면 테스트 API로 호출해서 사용할 수 있습니다.

  • Custom endpointClosure 만들기

    테스트 API를 사용하기 위해서는 우선 Custom endpointClosure를 만들어주어야 합니다.

    하나씩 코드를 살펴보면 우선 target으로 만들어준 API Service를 설정해줍니다.

    그 후에 url, method, task, header 등을 API Service에 설정된 값으로 가져오도록 합니다.

    여기서 중요한 값은 sampleResponseClosure인데요. .networkResponse(200, target.sampleData) 이것이 의미하는 것은 앞에 200은 API 호출 후에 받는 StatusCode이고, 뒤에 sampleData는 테스트 API에서 사용할 테스트 데이터입니다.

    StatusCode를 400이나 500 등으로 바꿔서 에러 처리를 미리 테스트 해볼 수도 있겠죠?

  • 테스트용 Provider 만들기

    이제 endpointClosure를 만들었으니 테스트용 Provider를 만들어주도록 하겠습니다.

    이 코드는 위에 만들어둔 API Manager에 추가해줍니다.

  • API 호출을 테스트 API로 호출하기

    이제 아까만든 API Manager의 버전 메소드에서 provider 대신에 testingProvider로 바꿔서 API를 호출하도록 합니다.

  • Sample Data 만들기

    자 호출까지 했는데 아무런 데이터가 내려오지 않을텐데요. 이제 아까 만들어둔 API Service로 이동합니다.

    API Service에 가보면 sampleData라고 만들어둔 곳에 그냥 빈 데이터만 리턴하고 있었는데요. 여기에 이제 테스트 API에서 사용할 테스트 데이터를 만들어 주면 됩니다.

테스트 API 호출하기


테스트 API를 호출할 준비가 완료되었습니다. 그럼 이제 우리가 만든 테스트 API가 잘 동작하는지 확인을 해볼텐데요.

API 호출하는 코드는 아까 호출할 때와 동일합니다. 아무것도 건드릴 필요 없이 바로 실행을 해보면 됩니다.

  • 결과화면

    moyatest3.png

짠! 결과가 나왔습니다. 우리가 만든 테스트 API를 잘 호출해서 Sample Data에 만들어준 데이터로 잘 받아오는 것을 확인할 수 있습니다.

마무리


지금까지 Moya로 테스트 API를 만드는 법을 알아보았습니다. 생각보다 테스트하는데 어렵지 않은데요.

저는 이번에 프로젝트를 진행하면서 일정이 부족해서 API와 앱 개발을 동시에 진행하게 되었습니다.

동시에 개발을 진행하다보니 UI를 다 만들어 놓아도 API가 나오지 않아 손 놓고 기다리는 시간이 많았는데요.

Moya에 테스트 기능을 써서 해보면 API가 나오지 않아도 미리 데이터 모델만 정의 된다면 충분히 작업을 할 수 있을 것 같아서 자료를 찾아서 해보게 되었습니다.

이렇게 미리 작업을 해놓으니깐, 나중에 API 개발이 완료 되었을 때 provider만 원래 서버를 호출하게끔 바꿔버리니 바로 적용이 되어서 API가 나오자마자 몇번의 검증 테스트만으로 개발을 완료 할 수 있었습니다.

미리 API 개발자와 모델만 잘 정의 해놓으면 개발 시간을 크게 단축 할 수 있으니 여러분도 잘 활용해보세요!

그럼 달콤한 코딩 되세요!

참고자료


Moya

Testing with Moya 101