본문 바로가기
감정일기(가칭)

🧩 Core Data 설계할 때, “나중에 쓸 속성”을 지금 넣어야 할까?

by 밤새는 탐험가89 2025. 10. 16.
728x90
SMALL

Core Data로 앱의 데이터 모델을 설계하다 보면
처음에 한 번쯤 이런 고민을 하게 됩니다.

 

“앞으로 위치, 태그 같은 속성이 필요할 것 같은데
지금 단계에서 미리 넣어두는 게 좋을까?”

 

결론부터 말하면 👇

✅ 지금 당장 쓰지 않는 속성은 절대 넣지 않는 게 좋다.


💡 1️⃣ Core Data는 단순한 ‘저장소’가 아니라 ‘데이터베이스 스키마’

Core Data는 단순한 딕셔너리 저장이 아니라,
데이터베이스(DB) 스키마 기반의 구조를 가지고 있습니다.

 

즉, Entity, Attribute, Relationship이 전부
SQLite 테이블 구조로 변환돼 저장되죠.

 

그 말은 곧 👉

“한 번 정의한 Entity 구조는
나중에 변경할 때마다 마이그레이션(migration) 작업이 필요하다.”


⚙️ 2️⃣ 스키마를 변경한다는 건 = DB 구조를 바꾸는 일

예를 들어 DiaryImageEntity에 나중에 사용할
latitude, longitude, tags 같은 속성을 미리 넣는다고 해봅시다.

 

지금 단계에서는 쓰지 않지만, 나중에 쓰려고 추가해두는 거죠.

그런데 이런 “미리 추가된 속성”은

 

코드에서 사용되지 않기 때문에

디버깅과 유지보수 시 혼란을 만들고,

관계가 걸려 있으면 불필요한 관리 포인트가 늘어나요.

 

그리고 만약 실제로 앱을 업데이트하면서 속성을 진짜 사용하기 시작하면,
어차피 다시 모델 버전을 올리고 마이그레이션을 해야 합니다.

 

즉, 미리 넣는다고 이득이 하나도 없습니다 ⚠️


✅ 3️⃣ 올바른 접근: 지금 필요한 구조만 유지하라

현재 개발 단계에서 필요한 구조만 남기고,
확실히 사용하는 속성만 정의하세요.

예를 들어 우리의 감정일기 앱이라면 👇

📘 EmotionDiaryEntity (감정일기)

속성 타입
id UUID
emotion String
content String
createdAt Date
images To-Many → DiaryImageEntity (Cascade)

📸 DiaryImageEntity (이미지)

속성 타입
id UUID
imagePath String
diary To-One → EmotionDiaryEntity (Nullify or Cascade)

 

이 정도로도 완전히 기능 구현이 가능합니다.


지금은 이미지 경로만 관리하고,
나중에 기능이 확장되면 그때 새로운 속성을 추가하면 됩니다.


🔁 4️⃣ 미래 확장은 “모델 버전 업그레이드”로 해결

Core Data는 나중에 기능이 늘어났을 때
새로운 속성을 추가할 수 있도록
버전 관리 시스템(model versioning) 을 지원합니다.

절차는 매우 간단합니다 👇

 

1️⃣ Xcode에서 .xcdatamodeld 파일을 선택
2️⃣ 상단 메뉴 → Editor → Add Model Version...
3️⃣ 기존 모델을 복사한 새 버전 생성
4️⃣ 필요한 속성(latitude, tags, locationName 등) 추가
5️⃣ 프로젝트 설정에서 새 버전을 Current Version 으로 지정
6️⃣ Lightweight Migration 옵션 활성화

 

이렇게 하면 기존 사용자 데이터는 유지된 채로
새 속성만 추가된 구조로 앱이 업그레이드됩니다. ✅


💬 결론

🎯 Core Data는 “지금 필요한 데이터만 정의”하는 것이 원칙이다.

 

사용하지 않는 속성을 미리 넣는 건 오히려 복잡도만 높인다.

나중에 확장할 땐 “모델 버전 업그레이드”로 자연스럽게 확장하라.

현재 기능에 집중한 단순한 구조가 장기적으로 훨씬 안전하다. ✅

 

728x90
LIST