새벽의 기록

[iOS] CoreData vs SwiftData vs Realm? 로컬 데이터베이스 비교 본문

[iOS]

[iOS] CoreData vs SwiftData vs Realm? 로컬 데이터베이스 비교

OneTen 2025. 9. 12. 20:37

현재 iOS 생태계에서는 Apple의 자체 프레임워크인 Core Data와 SwiftData, 그리고 서드파티 라이브러리인 Realm이 주로 사용된다. 직접 프로젝트에서 사용할 DB를 고르며 고민한 각 기술의 주요 특징과 장단점을 비교 분석하려고 한다.

 

요약

구분 Core Data Realm SwiftData
개발 주체 Apple MongoDB Apple
API 스타일 Objective-C 기반, 다소 장황함 현대적 Swift 객체 스타일 최신 Swift 매크로 기반, 선언적
스레드 관리 복잡함 (Context 격리 필요) 용이함 (스레드별 인스턴스) 용이함 (Swift Concurrency 기반)
사용 편의성 높음 (학습 곡선 가파름) 낮음 (가장 직관적) 낮음 (SwiftUI 환경)
의존성 내장 프레임워크 외부 라이브러리 내장 프레임워크
최소 지원 OS iOS 3+ iOS 11+ iOS 17+

 

 

1. Core Data

Core Data는 Apple이 제공하는 공식 프레임워크로, 단순한 데이터베이스가 아닌 객체 그래프 및 생명 주기 관리 솔루션이다.

SQLite 위에 추상화 계층을 제공하여 개발자가 SQL 쿼리 없이 객체 지향적인 방식으로 데이터를 다룰 수 있게 한다.

 

주요 특징

  • NSManagedObject: 데이터베이스의 레코드를 나타내는 객체로, 모든 모델은 이 클래스를 상속받는다.
  • NSManagedObjectContext: 객체를 생성, 수정, 삭제하는 작업을 위한 메모리상의 스크래치패드. 스레드에 안전하지 않아 각 스레드나 큐에서 별도의 Context를 관리해야 한다.
  • NSPersistentContainer: Core Data 스택(모델, 컨텍스트, 저장소)의 설정을 간소화하는 헬퍼 클래스.

장점

  • Apple 공식 프레임워크: 별도의 의존성 추가 없이 사용할 수 있으며, OS 업데이트에 따른 호환성 문제가 적다.
  • 강력한 기능: 데이터 변경 추적, 실행 취소(Undo/Redo) 매니저, 데이터 유효성 검사 등 정교한 객체 관리 기능을 내장하고 있다.

단점

  • 높은 복잡도: 학습 곡선이 가파르고, 초기 설정 및 운영에 많은 보일러플레이트 코드가 필요하다.
  • 까다로운 멀티스레딩: NSManagedObjectContext의 스레드 격리 정책으로 인해 백그라운드 스레드에서 데이터를 다루는 로직이 매우 복잡하고 오류 발생 가능성이 높다.

 

2. Realm

 

Realm은 모바일 환경에 최적화된 서드파티 데이터베이스 라이브러리다.

Core Data의 복잡함을 해결하고 개발자가 더 쉽고 빠르게 데이터를 다룰 수 있도록 하는 데 중점을 둔다.

 

주요 특징

  • 객체 지향 데이터베이스: 별도의 ORM(Object-Relational Mapping) 없이 Swift 객체를 그대로 저장한다. 모델 클래스는 Object를 상속받는다.
  • 라이브 객체 (Live Objects): 데이터베이스에서 데이터가 변경되면, 해당 데이터를 참조하는 모든 객체가 자동으로 업데이트된다. 이를 통해 데이터 동기화 및 UI 갱신 로직을 간소화할 수 있다.
  • Zero-Copy 아키텍처: 데이터를 메모리에 복사하지 않고 직접 접근하여 성능을 극대화한다.

장점

  • 직관적이고 간결한 API: Core Data에 비해 학습 곡선이 매우 낮고, 적은 코드로 CRUD(Create, Read, Update, Delete) 작업을 수행할 수 있다.
  • 우수한 성능: 내부적으로 C++ 엔진을 사용하여 데이터 처리 속도가 빠르다.
  • 안전한 스레드 관리: 스레드별로 Realm 인스턴스를 격리하는 정책을 통해 멀티스레딩 환경을 비교적 안전하게 다룰 수 있다.

단점

  • 외부 의존성: Swift Package Manager 등을 통해 프로젝트에 라이브러리를 추가해야 한다.
  • Realm 객체의 스레드 제약: Realm 객체는 생성된 스레드 내에서만 접근할 수 있어, 다른 스레드로 객체를 전달하려면 별도의 처리가 필요하다.

 

3. SwiftData

SwiftData는 WWDC 2023에서 발표된 Apple의 최신 데이터 퍼시스턴스 프레임워크다. Swift 언어의 현대적인 기능을 적극 활용하며, 특히 SwiftUI와의 완벽한 통합을 목표로 설계되었다. 내부적으로는 Core Data를 기반으로 동작한다.

 

주요 특징

  • @Model 매크로: Swift 클래스에 @Model 매크로를 추가하는 것만으로 모델 스키마가 자동으로 정의된다.
  • 선언적 API: SwiftUI와 유사한 선언적 구문을 사용하여 데이터를 가져오거나 필터링할 수 있다. (예: @Query 프로퍼티 래퍼)
  • Swift Concurrency 통합: Actor를 기반으로 설계되어 멀티스레딩 환경을 더욱 안전하고 직관적으로 처리할 수 있다.

장점

  • 최고의 생산성: Core Data 대비 보일러플레이트 코드를 획기적으로 줄여준다.
  • SwiftUI와의 완벽한 연동: @Query 등을 통해 데이터 변경이 UI에 자동으로 반영되는 과정이 매우 매끄럽다.

단점

  • 최소 지원 버전 제약iOS 17 이상에서만 사용 가능하다. 이는 현재 시점에서 상용 앱에 적용하기 가장 큰 장벽이다.
  • 초기 버전의 한계: 아직 프레임워크가 초기 단계이므로 복잡한 엣지 케이스에 대한 커뮤니티의 해결 사례나 자료가 부족하다.
  • UIKit 지원 미흡: SwiftUI 환경에 최적화되어 있어, UIKit 기반 프로젝트에서 사용하려면 추가적인 작업이 필요하다.

 

프로젝트 유형별 추천

 

1. UIKit 기반의 신규 또는 기존 프로젝트 (현재 진행 중인 프로젝트)

👉 Realm

이유: 낮은 학습 곡선, 직관적인 API, 우수한 성능을 바탕으로 빠른 기능 구현이 가능하다. Core Data의 복잡한 스레드 관리 문제를 피하면서 안정적으로 로컬 데이터베이스를 구축할 수 있는 가장 균형 잡힌 선택이다.

나는 UIKit 프로젝트를 진행 중이기도 하고 추후 안드로이드까지 확장할 생각이 있기에 Realm을 선택했다.

 

2. SwiftUI 기반의 신규 프로젝트 (최소 지원 OS: iOS 17 이상)

👉 SwiftData

이유: Apple이 제시하는 가장 현대적이고 Swift 친화적인 방식이다. SwiftUI와의 완벽한 시너지를 통해 개발 생산성을 극대화할 수 있다. 앞으로 iOS 데이터 관리의 표준이 될 기술이므로, 조건이 맞는다면 적극적으로 도입을 고려해야 한다.

 

3. 복잡한 데이터 모델링과 Apple 생태계 내 완결성이 중요한 프로젝트

👉 Core Data

이유: 외부 라이브러리 의존성을 피해야 하거나, 실행 취소(Undo) 관리 등 Core Data만이 제공하는 강력한 객체 그래프 관리 기능이 필수적인 경우 선택할 수 있다. 단, 복잡성을 감수할 준비가 되어 있어야 한다.

 

 

 

 

Comments