[swift] Swift Moya에서 로컬 데이터베이스와 통합하기
Moya는 Swift에서 작성된 네트워킹 라이브러리로, Clean Architecture와 함께 사용될 때 매우 강력한 도구입니다. Moya는 네트워크 계층을 추상화하여 네트워킹 코드를 작성하는 것을 더욱 쉽게 만들어줍니다. 그러나 때로는 서버에서 데이터를 가져오는 대신 로컬 데이터베이스를 통해 작업하는 것이 필요할 수 있습니다.
이 글에서는 Swift Moya와 로컬 데이터베이스를 통합하는 방법에 대해 알아보겠습니다.
1. 로컬 데이터베이스 구성하기
먼저, 로컬 데이터베이스를 구성해야 합니다. Swift에서는 CoreData나 Realm과 같은 데이터베이스 프레임워크를 사용할 수 있습니다. 이 예시에서는 CoreData를 사용하도록 하겠습니다.
import CoreData
class LocalDatabase {
static let shared = LocalDatabase()
private init() {}
// Core Data stack 관련 코드 작성
// ...
func saveData(data: Data) {
// 데이터 저장 로직 작성
// ...
}
func fetchData() -> [Data] {
// 데이터 조회 로직 작성
// ...
return []
}
}
2. Moya 프로바이더 생성하기
이제 Moya 프로바이더를 생성하고, 네트워크 요청을 처리하는 데에 사용할 수 있습니다.
import Moya
enum API {
case getData
}
extension API: TargetType {
var baseURL: URL {
return URL(string: "https://api.example.com")!
}
var path: String {
switch self {
case .getData:
return "/data"
}
}
var method: Moya.Method {
return .get
}
var sampleData: Data {
return Data()
}
var task: Task {
return .requestPlain
}
var headers: [String: String]? {
return nil
}
}
let provider = MoyaProvider<API>()
3. 데이터 가져오기
이제 Moya를 사용하여 데이터를 가져오는 기능을 구현할 수 있습니다. 네트워크 요청이 성공하면, 받아온 데이터를 로컬 데이터베이스에 저장합니다.
provider.request(.getData) { result in
switch result {
case .success(let response):
do {
let data = try response.map(Data.self)
LocalDatabase.shared.saveData(data: data)
} catch {
print("Failed to parse response")
}
case .failure(let error):
print("API request failed: \(error.localizedDescription)")
}
}
4. 데이터 조회하기
로컬 데이터베이스에 저장된 데이터를 조회하는 기능을 추가할 수 있습니다.
let savedData = LocalDatabase.shared.fetchData()
for data in savedData {
// 데이터 처리 로직 작성
// ...
}
결론
이제 Swift Moya와 로컬 데이터베이스를 통합하는 방법을 알아보았습니다. Moya를 사용하여 서버에서 데이터를 가져오고, 가져온 데이터를 로컬 데이터베이스에 저장하는 방식으로 네트워킹 코드를 작성할 수 있습니다. 이를 통해 앱에서 로컬 데이터베이스와 서버 간의 데이터 흐름을 관리할 수 있습니다.
참고 문서: