Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PLUB 네트워크 로직 리팩토링 #261

Merged
merged 4 commits into from
Apr 8, 2023

Conversation

WhiteHyun
Copy link
Member

@WhiteHyun WhiteHyun commented Apr 8, 2023

📌 PR 요약

🌱 작업한 내용

  • 기존 NetworkResult타입에 존재했던 Error를 PLUBError로 이관하였고, enum case도 일부 수정했습니다.
    • pathError 제거: path가 잘못되면 결국 requestError로 넘어가게 되므로 불필요한 Error라 판단하여 삭제했습니다.
    • decodingError 추가: API 모델을 잘못 구성하여 데이터가 제대로 파싱되지 못하는 경우, success임에도 data프로퍼티가 nil로 처리되었습니다. 이제는 이를 감지하여 디코딩하려 헀던 data값과 함께 Error로 넘겨주도록 구현하였습니다.
    • unknownedError 추가: PLUBError로 직접 해결할 수 없는 에러로, statusCode값을 받아오지 못했거나 statusCode가 비정상적인 값으로 받아졌을 때 해당 Error로 처리됩니다. 이 에러값은 불릴 일이 전혀 없을 것 같지만, 혹시 몰라 처리해두었습니다. 😅

🌱 PR 포인트

  • sendRequest와 evaluateStatus는 이제 레거시 코드가 되었습니다..! 새로운 메서드인 sendObservableRequest를 사용해 주세요.

    • sendObservableRequest를 사용하게 되면 sendRequest에서 항상 보내야했던 type 파라미터를 넣을 필요가 없습니다(1번 사진 참고).
    • sendObservableRequest를 사용하면, data값이 Observable로 그대로 리턴되어 보다 깔끔하게 코드를 구성할 수 있습니다.(2번 사진, 3번 사진 참고)
  • 에러는 이제 onError에서 처리할 수 있도록 수정했습니다. 기존에는 error도 success로 취급되어 들어갔으나, 이제 subscribe의 onError 클로저에서 처리하시면 됩니다.

// observable
.subscribe { _ in
} onError: { error in
  guard let plubError = error as? PLUBError<GeneralResponse<FeedsContent>> else { return }
  switch plubError {
    // 디코딩 미스인 경우
  case .decodingError(let rawData):
   // 여기서 rawData를 찍어서 어떻게 받아오는 지 확인할 수 있습니다. JSONSerialization을 애용해주세용
    print(rawData)
    
  case .requestError(let response):
    // 요청이 잘못된 경우, ex: statusCode: 9010
    print(response.statusCode)
  default: // 그 외 여러 에러들..
    // Log 처리
    break
  }
}

📸 스크린샷

1번 사진
image
2번 사진
image
3번 사진
image

📮 관련 이슈

새롭게 구성한 PLUBError를 이용하여 기존 레거시 코드를 개선하였습니다.
== 개선 사항 ==
1. 가끔씩 디코딩에 문제가 생기면 success임에도 data 프로퍼티가 nil이 되는 문제가 있었지만,
123, 125줄과 같이 data 값을 구분하여 decodingError 오류를 감지할 수 있도록 처리했습니다.
2. 기존에 처리했던 pathError와 networkError는 역할에 맞게 처리되지 못했습니다. 사실상 pathError는
requestError로 들어가고, networkError는 alamofire 단에서 인식하기 때문이었습니다. 이를 고려하여
개선된 코드에서는 pathError를 제거하였고, networkError는 역할에 맞게 alamofire 단에서 판단 후
처리하도록 구성하였습니다.
@WhiteHyun WhiteHyun added D+0 꼭 오늘 안에 PR 리뷰 해주세요 ♻️Refactoring labels Apr 8, 2023
@WhiteHyun WhiteHyun self-assigned this Apr 8, 2023
@dlrjswns
Copy link
Contributor

dlrjswns commented Apr 8, 2023

흥 어쩔티비

Copy link
Contributor

@soobin-k soobin-k left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 승현님!!👍😊

@WhiteHyun WhiteHyun merged commit 319bc65 into develop Apr 8, 2023
@WhiteHyun WhiteHyun deleted the feat/255-NetworkLogic/Refactoring branch April 8, 2023 13:28
@WhiteHyun
Copy link
Member Author

흥 어쩔티비

우우우우

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
D+0 꼭 오늘 안에 PR 리뷰 해주세요 ♻️Refactoring
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants