[1주차 트러블 슈팅] 홍성준 (네트워크) - boostcampwm2023/iOS04-HeatPick GitHub Wiki
🖼️ 배경
🫠 트러블
- Moya/Alamofire 등 네트워크 라이브러리를 사용하지 못하는 조건
- 어떻게 하면 네트워크를 잘 활용할 수 있을까?
✅ 솔루션
- Network 프로토콜을 생성하였음
- Network 구현체는 URLSession을 주입 받도록 하였음
- URLProtocol을 활용하여 네트워크 모킹을 활용하였음
- 생성 메소드를 static 하게 만들어 Boolean 값 하나로 쉽게 모킹할 수 있는 구조로 만들었음
- 모킹을 하게 되면 로컬에 있는 네트워크 응답을 JSON 파일로 대체하게 되어 서버가 중단이 되어도 지속적으로 개발할 수 있는 환경을 구축하였음
static func generateNetworkProvider(isDebug: Bool, protocols: [AnyClass]) -> Network {
if isDebug {
let configuration = URLSessionConfiguration.ephemeral
configuration.protocolClasses = protocols
return NetworkProvider(session: URLSession(configuration: configuration), signOutService: SignoutService.shared)
} else {
return NetworkProvider(session: URLSession.shared, signOutService: SignoutService.shared)
}
}
let searchNetworkProvider = AppRootComponent.generateNetworkProvider(isDebug: false, protocols: [SearchURLProtocol.self])
self.searchUseCase = SearchUseCase(
repository: SearchRepository(session: searchNetworkProvider),
locationService: locationService,
clusteringService: ClusteringService()
)