ios
네트워크 통신 모듈화 with Alamofire
junsmustLim
2020. 7. 21. 19:15
들어가며
회사에서 앱을 개발하던 중, 네트워크 통신을 하는 로직이 항상 마음에 들지 않았습니다. 분명 같은 구조이고 요청할 때 들어가는 전달 변수만 달라지는데 왜 나는 왜 똑같은 코드를 반복하고 있는지 하고 있는 제 자신도 비참해 보였습니다. 그러던 중, 선배 개발자가 " Network Request 하는 건 하나만 만들고 바뀔 값만 전달 변수로 전달해라 " 이렇게 조언을 해주셨습니다. 선배의 말을 듣고 코드를 바꾸고 있는 찰나 좋은 정보는 함께 공유하면 좋을거 같아서 이렇게 글을 쓰기 시작했습니다.
본론
Problem -> RestApi Call With Overlapped Same Code diffrent Paraemters
잘못된 점
- App에서 Rest Api를 요청하면 이런 구조, 형식으로 같은 코드가 반복
- @escaping (Bool?,Error?)->()
- 성공시 (true,nil)
- 실패시 (nil,error)
- 이로 인해 실제 기능부에서 응답값을 사용할 때 적어도 두 번의 값을 확인해야 하며 , unwrapping을 해야한다는 점
Solution -> make only a Requester for REST API
먼저 응답 값을 한개의 객체로 관리하기 위해 enum을 생성했습니다.
response 객체는 enum 타입이며 Generic 타입제약을 사용하여 Codable을 채택한 객체만 올 수 있도록 하였다.

- request하기 위해서 필요한 파라미터들을 requestGeneralAPI(url:params:....) 정의
- T.Type 매개변수로 받아 <T> 타입 설정
- Alamofire.request 호출
- Json 객체 Decode
- NetworkResponse 에서 정의에 따라서
- 성공시 : completion(.success(responseVO))
- 실패시: completion(.error(error))
- 결과, api를 호출하는 Controller에서는 switch 구문으로 success인지 , failure인지 구분만 하면 됨
API CALL TEST
결론
위 코드는 제가 작성한 테스트 코드입니다. 제가 작성한 코드를 실제 기능부에서 호출할 때 어떻게 될지 확인하는 차원에서 작성해 봤습니다. 부족한 글이지만 읽어주셔서 갑사합니다. 이번 기회로 코드의 제가 처음에 작성했었던 불필요한 코드들을 더 이상 제 프로젝트에서 배제시키기 위해 노력하겠습니다 XD