본문 바로가기

Project/30MinRead

드디어 앱 스토어 출시 완료! (꾸독!)

앱 출시 완료! 꾸독!!!!

 

 

앱 다운로드 링크 주소: https://apps.apple.com/kr/app/%EA%BE%B8%EB%8F%85/id6743909470?l=en-GB

 

‎꾸독

‎** 꾸준히 독서하기, 꾸독!은 무료 앱입니다. ============================== 우리나라 성인 10명 가운데 약 6명이 1년 간 책을 단 한권도 읽지 않는 것으로 나타났습니다. 우리나라 국민의 하루 평균 독

apps.apple.com

 

 

 

📘 ReadAloudDaily – 나만의 독서 기록 앱 만들기

(UIKit + CoreData + Combine + MVVM)

 

1. 프로젝트 소개

ReadAloudDaily는 사용자가 매일의 독서 기록을 남기고, 각 계획별로 독서 메모를 추가할 수 있는 iOS 앱입니다. 간단한 타이머와 함께 독서 활동을 관리하며, Core Data를 기반으로 로컬에 데이터를 저장하고 Combine을 활용하여 실시간 데이터 변경을 반영합니다.

 

 

2. 기술 스택

  • UIKit: 전반적인 UI 구성
  • Core Data: 독서 계획 및 독서 메모 저장 (1:N 관계)
  • Combine: ViewModel과 View 간 데이터 바인딩
  • MVVM 패턴: 뷰와 모델의 역할 분리

 

3. 프로젝트 폴더 구조

ReadAloudDaily/
├── AppDelegate.swift
├── SceneDelegate.swift
├── Model/
│   ├── ReadPlan+CoreDataClass.swift
│   └── ReadMemo+CoreDataClass.swift
├── View/
│   └── (UIViewController들)
├── ViewModel/
│   └── (각 ViewController에 대응하는 ViewModel)
├── CoreData/
│   └── CoreDataManager.swift
└── Resource/

 

4. 핵심 기능 정리

✅ Core Data의 관계 구성 (1:N)

이번 프로젝트에서 처음으로 Core Data의 관계(Relationship) 를 사용했습니다.

  • ReadItem (독서 계획): 상위 엔티티
  • ReadMemo (독서 메모): 하위 엔티티
  • 관계: ReadItem → ReadMemo (1:N)

 

🔁 Combine + MVVM 패턴: 실시간 UI 업데이트

Combine을 통해 ViewModel과 View 간 실시간 통신이 가능하도록 구성했습니다.
특히 ViewModel 내부에서 @Published로 선언된 프로퍼티를 감지하고, 자체적으로 변경사항을 반영하는 self-binding 구조를 적용했습니다.

 

5. MVVM 패턴 적용 방식

  • Model: CoreData의 ReadItem, ReadMemo 엔티티
  • ViewModel: Combine을 활용해 데이터 로직 처리 및 바인딩
  • View: UIKit의 UIViewController, ViewModel과 바인딩 

이 구조를 통해 View에서는 비즈니스 로직 없이 UI 표현에 집중할 수 있었고,
ViewModel은 데이터를 독립적으로 관리하며 테스트가 용이해졌습니다.

 

6. 배운 점 & 트러블슈팅

  • Core Data의 관계 설정 시, NSManagedObject 서브클래스에서 옵셔널/비옵셔널 여부와 관계 타입 설정에 유의해야 함.
  • NotificationCenter + Combine 조합을 통해 MVVM 구조에서도 실시간 UI 반영이 가능함을 배움.
  • UIKit에서도 Combine을 적극 활용하면 깔끔한 비동기 데이터 흐름을 구현할 수 있음.