Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

프로젝트 매니저 [STEP 1] Ari #65

Merged
merged 7 commits into from
Mar 2, 2022

Conversation

leeari95
Copy link
Member

@leeari95 leeari95 commented Mar 1, 2022

안녕하세요. 라이언(@ryan-son )~🦁 아리(@leeari95)입니다!
이번에 프로젝트 매니저 잘부탁드립니다 👍

일단 고민할 수 있는 부분들은 충분히 고민해보았다고 생각하는데,
혹시 부족한 점이 있다면 한번 더 짚어주시면 감사하겠습니다. 🙇🏻‍♀️

의존성 관리도구

  • Swift Package Manager

데이터 저장

  • 로컬 CoreData
  • 클라우드 Firebase-Cloud Firestore

UI 구현

  • RxCocoa

아키텍처

  • MVVM

그리고 코드 컨벤션을 맞추기 위해 라이브러리 SwiftLint를 추가했습니다.

적용 기술에 대해 고민해본 점

  • 하위 버전 호환성에는 문제가 없는가?
    • Firebase는 iOS 10 부터 지원, Coredata는 iOS 3 부터 지원
    • 두 기술 모두 하위 버전 호환성에 대해서는 문제 없다고 판단되었습니다.
  • 안정적으로 운용 가능한가?
    • CoreData는 First-party framework이므로 안정적으로 운용될 수 있습니다.
    • Firebase는 현재 Google이 지원하는 플랫폼이기도 하고, 많은 사람들이 프로젝트에서 사용하고 있는 기술인 만큼 안정적인 운용이 가능하다고 생각합니다.
  • 미래 지속가능성이 있는가?
    • CoreData는 First-party framework 이기 때문에 새로운 기술이 나온다고 해도 애플이 계속 지원할 것 이므로 미래 지속가능성이 보장된다고 생각합니다.
    • Firebase는 Third Party 이기 때문에 구글에서 서비스의 사용을 종료할 수도 있어 지속성을 보장할 수는 없을 것 같습니다. 하지만 아직도 수많은 곳에서 사용되고 있고, 서비스도 지속적인 유지보수가 이루어지고 있는 것으로 보아 구글에서 갑작스럽게 서비스를 종료할 것으로 예상되지는 않기 때문에, 미래 지속가능성이 있다고 판단했습니다.
  • 리스크를 최소화 할 수 있는가? 알고있는 리스크는 무엇인가?
    • CoreData는 Thread-safe하지 않다는 리스크가 있습니다.
    • Firebase의 경우 일일 사용량이 일정 수준을 초과하면 비용이 발생하는 것으로 알고있는데, 현 프로젝트의 경우에는 그럴 것 같지는 않다는 생각이 들었습니다.
  • 어떤 의존성 관리도구를 사용하여 관리할 수 있는가?
    • CoreData의 경우 의존성 관리도구가 필요없습니다.
    • Firebase는 pod 및 SPM으로 관리할 수 있습니다.
  • 이 앱의 요구기능에 적절한 선택인가?
    • Firebase의 경우 빠르고 간단하게 서버를 구현할 때 적합한 플랫폼이기 때문에 이번 프로젝트와 어울린다고 생각하였습니다.
    • 로컬 데이터 저장은 CoreData가 적합하다고 생각했습니다. 이유는 애플에서 제공하는 framework로 복잡한 User Data를 관리할 때, 취소기능 등의 부가 기능들을 SQLite보다 다양하게 제공해주기 때문에 선택했습니다.

의문점

  • 기술에 대해 조사를 하다보니 Firebase로 로컬/리모트 모두 관리해줄 수 있다는 사실을 알게되었는데, 이런 경우 CoreData가 불필요하다는 생각이 들었습니다. 안정적인 걸로 따지자면 CoreData는 First party이기 때문에 Firebase보다 안정성은 나은 것 같은데... 두개다 써야할지 Firebase 하나로 퉁쳐도 되는건지 의문이 드네요. 이 부분에 대한 라이언의 조언이 필요합니다~ 😁

이번 피드백 잘부탁드립니다~ 😁

- SPM을 통해 cloud firestore에 대한 라이브러리 추가
- Firebase API 정보가 들어가있는 info.plist 파일 gitignore에 추가
- gitignore에 Firebase 라이브러리 추가
- .swilftLint.yml 파일 추가해서 Rules 설정 추가
- 함수와 타입 길이 제한을 수정
@leeari95 leeari95 changed the title feat: Firebase sdk 추가#1 프로젝트 매니저 [STEP 1] Ari Mar 1, 2022
Copy link

@ryan-son ryan-son left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아리, 기술 조사하시고 비교하시느라 고생 많으셨습니다.

선택하신 기술 스택은 아래와 같다고 이해했어요. 다른 점이 있다면 말씀해주세요.

구분 기술 또는 분류
아키텍처 MVVM
데이터 및 UI 이벤트 처리 RxSwift/RxCocoa
UI UIKit
Cloud DB/데이터 구조 솔루션 Firebase/Firestore
Local DB CoreData
의존성관리도구 SPM

하위 버전 호환성, 향후 안정성 및 존속성 등 기술에 대해 고민해주신 내용은 저도 공감합니다.

의문점

  • 기술에 대해 조사를 하다보니 Firebase로 로컬/리모트 모두 관리해줄 수 있다는 사실을 알게되었는데, 이런 경우 CoreData가 불필요하다는 생각이 들었습니다. 안정적인 걸로 따지자면 CoreData는 First party이기 때문에 Firebase보다 안정성은 나은 것 같은데... 두개다 써야할지 Firebase 하나로 퉁쳐도 되는건지 의문이 드네요. 이 부분에 대한 라이언의 조언이 필요합니다~ 😁

이미 공부해보셔서 아시겠지만, Firebase의 오프라인 데이터베이스 관리 솔루션은 CoreData 또는 Realm과 같이 기기에 데이터를 영구적으로 보존하는 영속성 (Persistence)를 보장하기 위한 목적으로 설계되지 않았습니다. 다만, 오프라인 환경에서도 데이터의 변경이 가능하고, 변경 사항들을 모두 기록해두었다 다시 온라인 상태가 되었을 때 그 간의 변경사항을 모두 순차적으로 업로드하는 기능을 제공할 뿐입니다. 영속성을 보장하지 않는 만큼 지정된 저장 한계가 도래하면 자체 알고리즘 (접근한지 가장 오래된/가장 이용빈도가 적은 등)을 통해 알고리즘에 해당하는 대상부터 이전 기록들을 제거합니다. 그래서 오랫동안 온라인 환경에 노출되지 못하는 사용자에게는 Firebase의 오프라인 데이터베이스 관리 솔루션을 적용하기에는 적합하지 않습니다. 이러한 타입의 사용자까지 고려하기 위해서는 로컬 DB를 다루는 CoreData와 같은 별도의 솔루션을 병행해서 사용할 필요가 있는 것이죠.

추가적인 질문이 있으시면 언제든지 찾아주세요~ 이번 프로젝트도 화이팅입니다! 💪

@ryan-son ryan-son merged commit 00e8948 into yagom-academy:4_leeari95 Mar 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants