클린 아키텍처로 cloutKit과 SwiftData 연결하기

여러분의 iOS 앱 개발 경험이 더욱 흥미롭게 느껴질 준비되셨나요? 오늘은 CloudKit과 SwiftData를 클린 아키텍처에 통합하는 방법에 대해 알아보겠습니다. 이번 포스트는 특히 클린 아키텍처를 이용하여 코드를 모듈화하고 유지보수성을 높이는 방법을 중점적으로 설명할 겁니다.


## CloutKit과 SwiftData란?


먼저 cloutKit과 SwiftData가 무엇인지 간단히 알아봅시다.


### CloutKit

CloudKit은 애플의 강력한 백엔드 서비스로, iCloud를 이용해 데이터를 저장하고 동기화할 수 있습니다. 주로 사용자의 데이터가 로컬과 서버 간에 원활하게 공유되도록 합니다. 특히 iOS 앱에서 많이 사용되며, 공통적인 데이터 동기화 문제를 해결해줍니다.


### SwiftData

SwiftData는 현대적인 스위프트 기반 ORM(Object-Relational Mapping) 라이브러리입니다. 간단한 인터페이스로 데이터베이스를 처리할 수 있게 해줍니다. Swift의 강력함과 결합해 더 간결하고 오류가 적은 코드를 작성할 수 있습니다.


## 클린 아키텍처란?


클린 아키텍처(Clean Architecture)는 코드의 유지보수성과 확장성을 높이기 위해 사용되는 설계 패턴입니다. 주로 의존성 역전 원칙에 따라 계층을 분리하여 핵심 비즈니스 로직을 보호하고, 외부 의존성을 최소화합니다.


## 클린 아키텍처에서의 CloudKit 적용


### 1. 인터페이스 정의하기

클린 아키텍처에서는 인터페이스를 통해 데이터 소스와의 의존성을 제어합니다.


```swift

protocol PersistanceProtocol {

func saveLastSyncDate(_ date: Date, with key: String)

func loadLastSyncDate(key: String) -> Date?

}


class CloudKitPersistance: PersistanceProtocol {

func saveLastSyncDate(_ date: Date, with key: String) {

// 여기에 CloudKit 저장 로직 구현

}

func loadLastSyncDate(key: String) -> Date? {

// CloudKit에서 날짜 로드하는 로직 구현

return nil

}

}

```


여기서는 PersistanceProtocol 프로토콜을 정의하고, 이를 준수하는 CloudKitPersistance 클래스를 만들었습니다. 이로써 나중에 의존성 주입을 통해 다양한 데이터 소스를 쉽게 교체할 수 있습니다.


### 2. CloudKit 레이어 모듈화

CoreData와 같이 Data 레이어를 모듈화하여 CloudKit을 추가합니다. 애플리케이션 로직과 데이터 저장소의 분리를 유지합니다.


```swift

class CloudKitController {

func fetchRecords(completion: @escaping ([CKRecord]?) -> Void) {

let container = CKContainer.default()

let publicDatabase = container.publicCloudDatabase

let query = CKQuery(recordType: "User", predicate: NSPredicate(value: true))

publicDatabase.perform(query, inZoneWith: nil) { results, error in

guard error == nil else {

completion(nil)

return

}

completion(results)

}

}

// 기타 CloudKit 관련 함수들 구현

}

```


위 예제에서는 CloudKitController를 통해 CloudKit 데이터베이스에 직접 액세스하는 예를 보여줍니다. 이렇게 하면 데이터베이스 액세스 코드를 애플리케이션 로직과 분리할 수 있습니다.


### 3. UseCase 구현하기

UseCase는 애플리케이션의 비즈니스 로직을 구현하는 데 사용됩니다.


```swift

class FetchUserUseCase {

private let cloudKitController: CloudKitController

init(cloudKitController: CloudKitController) {

self.cloudKitController = cloudKitController

}

func execute(completion: @escaping ([User]) -> Void) {

cloudKitController.fetchRecords { records in

// records를 User 모델로 변환하는 로직

let users = records?.map { record in

return User(name: record["name"] as! String)

}

completion(users ?? [])

}

}

}

```


여기서 FetchUserUseCase는 CloudKit에서 데이터를 가져와 비즈니스 로직에 맞게 변환하는 일을 맡습니다.


### 4. 데이터베이스 초기화와 의존성 주입


애플리케이션 초기화 단계에서 필요한 컨트롤러와 UseCase를 초기화하고 의존성을 주입합니다.


```swift

let cloudKitController = CloudKitController()

let fetchUserUseCase = FetchUserUseCase(cloudKitController: cloudKitController)


fetchUserUseCase.execute { users in

users.forEach { user in

print(user.name)

}

}

```


여기서 볼 수 있듯이 클린 아키텍처를 통해 모듈 간의 결합도를 낮추고, 서로 독립적으로 테스트할 수 있는 구조를 유지합니다.


## 결론


클린 아키텍처는 코드베이스의 유지 보수성과 확장성을 높이는 데 매우 유용합니다. 특히 CloudKit과 같은 외부 서비스와 통합할 때는 인터페이스와 레이어 분리를 통해 코드의 재사용성과 모듈화를 더욱 강화할 수 있습니다. 이러한 원칙을 바탕으로 앱을 설계하면 이후 추가적인 기능 추가나 수정이 훨씬 덜 고통스럽게 될 것입니다.


그럼, 여러분도 이제 CloudKit을 클린 아키텍처에 통합해보세요! Happy Coding! 🎉

사용자가 공유한 콘텐츠

-

사용자가 공유한 콘텐츠

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 7월 10일 오전 7:21

댓글 0

    함께 읽은 게시물

    이력서에 쓰는 경험

    

    ... 더 보기

    [일터의 근육] 컬리 일잘러들의 공통점

    '

    ... 더 보기

    내 옆 일 잘하는 동료가 가진 것

    Brunch Story

    내 옆 일 잘하는 동료가 가진 것

    < 쿠팡의 창업자를 직접 보며 배운 것: 리더의 크기가 전부다 >

    1

    ... 더 보기

     • 

    댓글 1 • 저장 21 • 조회 1,679


    스트레스를 잘 관리하면서 건강하게 살아가고 싶다면, 우선 살아있는 한 우리가 해야 할 일들은 영원히 없어지지 않을 것이므로, 해야 할 일을 100% 해내면서 할 일 목록을 완전히 없애는 데 많은 노력을 들이기보다는 70% 정도만 해내도 만족할 필요가 있다.

    ... 더 보기

    [박진영의 사회심리학]스스로 만들어 내는 스트레스

    m.dongascience.com

    [박진영의 사회심리학]스스로 만들어 내는 스트레스

    ‘똑부(똑똑하고 부지런하기)보다 똑게(똑똑하지만 게으른) 리더가 되라.’ 리더십 코칭에서 빠지지 않는 훈수다. 현장 리더들의 말을 들어보면 실행이 쉽지 않다.

    ... 더 보기

    [김성회의 고사성어 리더십] `똑게 리더십` 3가지 법칙 - 매일경제

    매일경제

    [김성회의 고사성어 리더십] `똑게 리더십` 3가지 법칙 - 매일경제

     • 

    저장 2 • 조회 651


    테헤란로 소진언니 커리어 코칭 l 직장생활 13년차, 30대 환승이직!

    ... 더 보기