Core Data (BookApp)

sonny·2025년 1월 5일
3

TIL

목록 보기
93/133

내가 겪은 문제와 해결하지 못한 것들

앱 개발에서 데이터 저장을 관리하기 위해 Core Data를 사용해야하는데 오늘까지 Core Data를 완전히 구현하지 못했고 그 과정에서 겪은 여러 문제들을 정리해보려 한다.


문제 1: BookEntityKakaoBook의 타입 불일치

프로젝트는 외부 API에서 책 데이터를 받아오는 구조로KakaoBook이라는 구조체를 사용하고 있었다.

반면에 Core Data는 NSManagedObject를 기반으로 데이터를 관리하기 때문에 BookEntity라는 클래스를 생성했는데 이 두 데이터 모델이 서로 다른 구조를 가지고 있어 변환 과정에서 문제가 발생한 것 같다.

그리고 thumbnail이라는 속성이 문제가 됐었는데,

KakaoBook에서는 thumbnail을 URL 문자열로 관리했지만, Core Data에서는 이미지를 Data 타입으로 저장하도록 설계를 했었다.

그래서 데이터 변환 중에 다음과 같은 오류가 발생했는데

Cannot assign value of type 'UIImage?' to type 'String?'

결국 KakaoBook 구조체를 확장하여 Core Data의 BookEntity에서 데이터를 변환할 수 있는 초기화 메서드를 작성해야 했다.

하지만 변환 과정에서 UIImageString 사이의 매핑 논리가 맞지 않아 시간을 허비했다.


문제 2: Core Data 모델의 미스매칭

Core Data 모델을 설계할 때, thumbnailURL이라는 속성을 추가하지 않은 것이 문제였다.

초기에 API에서 이미지를 URL로 받아오고 있었음에도 불구하고 Core Data에서는 이미지를 Data로 저장하려고 했다.

thumbnailURL 속성을 추가하기로 했지만 Core Data 모델을 변경한 뒤 기존 데이터를 삭제하거나 마이그레이션을 수행해야 했는데,

자동 마이그레이션을 활성화해봤지만.. 여전히 기존 데이터와 새 모델 간의 충돌이 발생했다.

이 과정에서 Core Data 저장소를 삭제하거나 다시 생성하는 방법을 여러 번 시도해봤지만

데이터가 제대로 저장되지 않거나, 기존 데이터가 손실되는 문제가 반복됐다.


문제 3: RxCocoa와의 충돌

RxSwift와 RxCocoa를 활용해 테이블 뷰의 데이터를 관리하려고 했다.

하지만 RxCocoarx.itemSelected를 사용하는 과정에서 오류가 발생했다.

Property 'itemSelected' requires that 'UITableView' inherit from 'UIPickerView'

이 오류는 RxCocoaUITableView 간의 확장이 제대로 적용되지 않은 경우에 발생하는 것으로 보였다.

계속 시간을 허비하다보니 그냥 프로젝트에서 RxCocoa를 사용하지 않고 UITableViewDelegateUITableViewDataSource를 직접 구현하는 방식으로 변경하면서 문제를 해결하려 했다.

이 과정에서 RxCocoa와의 결합도를 낮췄지만 결국 Core Data의 데이터 흐름과 UI 간의 연동이 원활하지 않아 최종적으로 구현에 실패했다..


문제 4: NSPersistentContainer 초기화 문제

Core Data를 초기화하는 과정에서도 문제가 발생했다.

NSPersistentContainer의 이름이 .xcdatamodeld 파일 이름과 일치하지 않아서 컨테이너가 로드되지 않는 오류가 있었다.

코드를 수정해보았지만 여전히 자동 마이그레이션 과정에서 충돌이 발생했다.

아래와 같은 오류는 데이터를 제대로 관리하지 못했음을 보여준다.

Thread 1: "An NSManagedObject of class 'BookEntity' must have a valid NSEntityDescription."

이 오류는 Core Data 모델과 BookEntity 클래스 간의 매핑이 올바르게 설정되지 않았기 때문에 발생한다고 하는데,

이걸 해결하려고 디버깅 로그를 추가해봤지만 문제를 완전히 해결하지 못했다.


음...

여러 시도에도 불구하고 구현은 하지 못했다.

그래도 다음부터 신경써야겠다는 점은,

  • 데이터 모델 설계는 프로젝트 초기에 신중하게 해야 한다는 것
  • 외부 API 데이터와 로컬 데이터 모델 간의 매핑 전략을 명확히 정해야 한다는 것
  • Core Data의 마이그레이션 과정을 충분히 이해하고, 충돌 시 대처 방안을 마련해야 한다는 것
  • RxCocoa와의 결합도를 낮춰 대안적인 구현 방법을 준비해야 한다는 것

앞으로 Core Data를 다시 도입하게 된다면, 더 나은 설계를 시도해봐야겠다고 생각했다.

profile
iOS 좋아. swift 좋아.

0개의 댓글

관련 채용 정보