Skip to content

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

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

🖼️ 배경

🫠 트러블

  • 인증 토큰이 올바르지 않을 때에 대한 처리

🏃🏻 시도했던 방법

  • 별 다른 처리를 하지 않았지만 로그아웃 시키면 되겠다 생각을 했음
  • 싱글톤을 사용해야 하나? 생각이 들었고 테스트 가능하게 하려면 어떠한 방식으로 해야할 까 고민을 하였음

✅ 솔루션

  • NetworkProvider에 싱글톤을 주입시키자
    • 로그아웃 서비스에 대한 싱글톤 객체를 생성자로 의존성 주입시켰음
  • 로그아웃 서비스 기능을 나누자
    • 어떠한 곳은 로그아웃을 요청할 수 있는 기능이 필요하고 다른 곳은 로그아웃에 대한 결과만 받으면 되었음
    • 서비스를 프로토콜로 잘게 쪼개어 그 기능이 필요한 곳에 해당 프로토콜을 가지고 있도록 하여 특정 기능만 사용하도록 제한하였음
public protocol SignOutServiceInterface: AnyObject {
    
    var signOutCompleted: AnyPublisher<Bool, Never> { get }
    
}

public protocol SignOutRequestServiceInterface: AnyObject {
    
    func signOut()
    func signOut(type: AlertType)
    
}

public final class SignoutService: SignOutServiceInterface, SignOutRequestServiceInterface {
    
    public static let shared = SignoutService()
    
    public var signOutCompleted: AnyPublisher<Bool, Never> {
        return signOutCompletedSubject.eraseToAnyPublisher()
    }
    
    private var signOutCompletedSubject = PassthroughSubject<Bool, Never>()
    
    private init() {}
    
    public func signOut() {
        SecretManager.remove(type: .accessToken)
        signOutCompletedSubject.send(true)
    }
    
    public func signOut(type: AlertType) {
        presentAlert(type: type) { [weak self] in
            self?.signOut()
        }
    }
    
}

🔥 HeatPick

🔨 프로젝트 소개

🫠 트러블 슈팅

1주차

2주차

3주차

4주차

5주차

🤔 기획 회의록

🤷🏻 의사 결정록

🍎 iOS

🌐 Backend

🎯 주차별 목표

🏃🏻 데일리 스크럼

1주차

2주차

3주차

4주차

5주차

6주차

🙇🏻 멘토링 일지

👀 프로젝트 현황 공유

🙋🏻 팀 회고

💪 개인 회고

1주차

2주차

3주차

4주차

5주차

📇 템플릿

Clone this wiki locally