이번 프로젝트 '메모라이징'에서는 데이터를 저장하고 관리하기 위해 내장 DB(CoreData)와 외부 DB(FireStore)를 모두 사용하였습니다. 이는 다음과 같은 이유로 결정되었습니다.
내장 DB(CoreData) 사용 이유
- 오프라인 상태에서도 데이터를 사용할 수 있습니다.
- 앱 자체에서 데이터를 관리하므로, 서버와의 통신이 필요하지 않습니다.
- 데이터를 빠르게 로딩할 수 있습니다.
외부 DB(FireStore) 사용 이유
- 추후 다양한 플랫폼에서 데이터를 공유할 수 있습니다.
- 서버에서 데이터를 관리하므로, 다른 기기에서도 동일한 데이터를 사용할 수 있습니다.
무엇보다 Firebase라는 Cloud 플랫폼을 사용하면서 무분별하게 사용량을 늘렸던 경험이 있었고, 이는 실제로 낭비에 가까운 비용 발생의 주원인이었습니다. 그렇기에 이번 프로젝트에서는 ‘어떻게 하면 네트워크 메서드를 한번이라도 덜 사용할 수 있을까?’ ‘어떻게하면 현재 갖고 있는 데이터만으로 또 다른 Fetch 없이 재활용할 수 있을까?’라는 고민을 많이 했습니다. 그렇게 다양한 해결책을 생각해본 결과 ios의 내장 DB인 CoreData까지 생각하게 되었습니다. 이는 실제로 앱 내부에 존재하던 상당히 많은 Network Fetch 함수들을 없애는 효과를 만들었습니다. 하지만 두 DB를 동시에 사용하면서 발생했던 문제점들 역시 존재했습니다.
마주한 문제점
동기화 문제
- 내장 DB에서 수정한 데이터를 서버와 동기화하는 과정에서, 불일치 문제가 발생했습니다.
생각했던 해결 방안들
- 처음으로 생각했던 해결 방안은 Profile Tab에 동기화 버튼을 만들어 주는 것이었습니다. 하지만 이런 수동적인 동기화 방식은 UX가 좋지 않다고 판단하였고, 사용자가 무분별한 서버 사용을 가능하게 하는 수단이기에 조심스러웠습니다.
- 두 번째 방안은 앱이 재실행될 때 서버와 동기화 하는 것이었습니다. 하지만 이 방식 역시 저희가 원하는 수준의 효과가 없다고 판단하였고, 이러면 굳이 내장 DB를 사용하여 앱의 볼륨을 키우는 것이 맞는가? 하는 고민을 만들었습니다.
- 마지막으로, 사용자가 로그인할 때 동기화 하는 방안으로 결정했습니다. 비록 이 방식으로 간다면 다중 기기 유저를 제한해야 하는 단점이 있었지만 평소 앱을 사용하며 로그아웃을 자주 하는 사용자가 없을 것이라 판단하여 선택하였습니다.
느낀점
여전히 해결하지 못 한 문제들이 존재하기에 대단히 만족스럽지는 않지만, 앱을 출시하고 지인분들이 앱을 사용할 때 사용량이 기하 급수적으로 올라가지 않는 것을 보면서 저희의 시도와 고민들이 의미있었구나라는 만족은 있었습니다.
'Architectural Pattern' 카테고리의 다른 글
MVVM 패턴이란? (ios) (0) | 2023.03.12 |
---|