Skip to content

[3주차 트러블 슈팅] 홍성준

SungJun Hong edited this page Dec 11, 2023 · 1 revision

🖼️ 배경

🫠 트러블

  • (트러블은 아니지만) 네트워크 요청 방식이 1회만 발생할 수 있도록 하기

🏃🏻 시도했던 방법

  • 기존에는 Combine을 사용하였음
    • RxSwift에서는 Single을 이용하면 해결되는데 Combine은 적합한 것을 찾았지만 굳이 이렇게 해야 하는가 하는 생각이 들었음

✅ 솔루션

  • async/await 을 활용
    • 1회 호출만 필요한 단순한 요청은 async/await을 활용하고 스트림이 필요하면 Combine을 사용하기로 선택
  • Task로 감싸서 실행하므로 메인 스레드 이슈를 쉽게 해결하기 위해 Result 타입에 스레드에 대한 코드와 여러 슈가 코드를 추가하였음
    • onSuccess/onFailure을 추가하여 가독성을 올림
    • on을 추가하여 onSuccess/onFailure 에서 어떠한 스레드에서 동작할 지 추가하여 가독성을 올림
// 적용하기 전
Task { [weak self] in
    guard let self else { return }
    let result = await dependency.authUseCase
        .requestSignUp(userName: userNameSubject.value)
    switch result {
    case .success(let value):
         DispatchQueue.main.async { [weak self] in
               self?.listener?.signUpDidComplete()
         }
    case .failure(let error):
          print(error.localizedDescription)

}

// 적용한 후
Task { [weak self] in
    guard let self else { return }
    await dependency.authUseCase
        .requestSignUp(userName: userNameSubject.value)
        .onSuccess(on: .main, with: self, { this, token in
            this.listener?.signUpDidComplete()
        })
        .onFailure { error in
            print(error.localizedDescription)
        }
}

🔥 HeatPick

🔨 프로젝트 소개

🫠 트러블 슈팅

1주차

2주차

3주차

4주차

5주차

🤔 기획 회의록

🤷🏻 의사 결정록

🍎 iOS

🌐 Backend

🎯 주차별 목표

🏃🏻 데일리 스크럼

1주차

2주차

3주차

4주차

5주차

6주차

🙇🏻 멘토링 일지

👀 프로젝트 현황 공유

🙋🏻 팀 회고

💪 개인 회고

1주차

2주차

3주차

4주차

5주차

📇 템플릿

Clone this wiki locally