###### tags: `PR` # step2 PR 안녕하세요 지성! @LimJiseong step2가 완료되어 PR보냅니다. 🙇🏻‍♂️🙇🏿‍♂️🙇🏼‍♂️ ## 실행화면 ### 등록 화면 ![](https://i.imgur.com/XiWcFnD.gif) ### 수정 화면 ![](https://i.imgur.com/PcJUhGG.gif) ### Popover ![](https://i.imgur.com/sVPirgM.gif) ### 삭제 화면 ![](https://i.imgur.com/qRD7tVo.gif) ## 클린아키텍쳐 클린아키텍처를 적용해보기 위해 Presentaion, Domain, Data Layer를 사용해서 구현해보았습니다. ## MVVM 클린아키텍처와 찰떡이며 테스트를 진행하기 위해 MVVM을 사용해보았습니다. ## RxSwift MVVM을 사용하며 바인딩 부분을 옵저버 패턴을 사용해서 구현해보려 했으나 이번 프로젝트에서는 옵저버 패턴을 만드는데 힘을 덜 쏟고 아키텍처에 집중하기 위해서 RxSwift를 사용했습니다. ## Coordinator VC가 자꾸 거대해지는 문제와 ViewController가 화면전환에 대한 책임을 줄여주기 위해 coordinator 패턴을 사용해서 coordinator에서 화면전환을 담당하도록 했습니다. ## RxSwift textField subscribe가 안되는 부분 ViewController에서 UITextField의 이벤트를 옵저버 하기 위해 옵저버블을 만들고 ViewModel에 Input으로 넣어준 후 바인딩 하여 돌아오는 Output값을 체크했습니다 저희가 예상했던 결과로는 처음에 subscribe 하는 순간 값이 올 것이라 예상했는데 그렇지 않았습니다. ![](https://i.imgur.com/25qPZPO.gif) onNext를 이용해서 값을 할당해 보았는데도 이벤트가 전달되지 않았습니다. 이에 대해 왜 그런 현상이 일어나는지 알지 못했는데 혹시 지성이 알고 계시다면 가르쳐주시면 감사하겠습니다 # PR 안녕하세요 지성! @LimJiseong step1 기술스택을 정해서 PR보냅니다!! 3주동안 잘 부탁드립니다.🙇🏻‍♂️🙇🏿‍♂️🙇🏼‍♂️ ## 기술 스택 |UI|아키텍쳐|Local DB|Remote DB|의존성 관리도구| |:--:|:--:|:--:|:--:|:--:| |UIKit|MVVM + Clean Architecture|CoreData|FireBase|SPM| ## 아키텍쳐 ### MVVM - 장점 - View와 Model이 서로 독립적이다. - 유닛테스트가 가능하다. - 단점 - 간단한 UI의 경우 ViewModel설계의 어려움이 있다. - 데이터 바인딩이 필수적으로 요구된다. ### Clean Architecture - 장점 - 각 계층이 명확하게 분리되어 있어 테스트와 유지 보수가 용이하다. - 단점 - 구현이 어렵다. - 하위 레벨단의 컴포넌트가 상위 레벨의 컴포넌트를 참조해야 할 일이 생길 때 하위단으로 내려버리는 경우가 있다. ## Local DB ### CoreData - 장점 - 퍼스트파티라서 안정적으로 운용이 가능하다. - 라이브러리를 추가하지 않고 import 만으로 사용이 가능하다. - objectID를 이용해서 쉽게 조회, 수정, 삭제를할 수 있다. - 단점 - thread-safe하지 않다 - 메모리를 많이 사용한다. - DB가 숨겨져있고 직접 조회할 수 없다. ## Remote DB ### FireBase - 장점 - 별도 서버의 구성이 필요가 없다. - 원격으로 앱 환경 상태 구성을 지원한다. - 콘솔을 제공하여 접근이 쉽다. - 단점 - 쿼리의 사용이 조금 빈약한 점이 있다. - OR의 사용이 검색이 되지 않거나, LIKE문이 없다. - 서버의 응답속도가 조금 느린편이다. ## 의존성 관리 도구 ### Cocoapod - 장점 - 거의 대부분의 라이브러리를 지원한다. - 사용하기 쉽다. - 단점 - 라이브러리 설치가 오래 걸린다. - 프로젝트 빌드 할 때마다 빌드가 된다. ### SPM - 장점 - 애플이 지원한다.👍 - 빠르고 쉽게 라이브러리를 추가할 수 있다. - 별다른 설치가 필요없다. - 단점 - 지원하지 않는 라이브러리가 많다. --- - 하위 버전 호환성에는 문제가 없는가? - coreData는 iOS 8.0이상이고 firebase iOS 11.0 이상임으로 저희 프로젝트의 target인 iOS 14.0에서는 문제가 없습니다. - 안정적으로 운용 가능한가? - Coredata는 Apple이 지원하는 데이터 컨테이너고 Firebase는 Google의 Realtime Database 프레임 워크이기 때문에 잘 사용하면 안정적으로 운용할 수 있다고 생각합니다. - 미래 지속가능성이 있는가? - Apple과 Google이 지원하는 서비스 이기 때문에 문제 없다고 생각합니다. - 리스크를 최소화 할 수 있는가? 알고있는 리스크는 무엇인가? - Coredata - Coredata는 쓰레드 세이프하지 않는 리스크가 존재하는 것을 알고있고, 해당 문제점은 백그라운드에서 작업하는 단일 콘텍스트를 이용해서 해결이 가능한 것으로 알고 있습니다. - 어떤 의존성 관리도구를 사용하여 관리할 수 있는가? - `Firebase`는 SPM을 이용하여 관리할 수 있습니다. - 이 앱의 요구기능에 적절한 선택인가? - 현재 step에서는 적절한 요구기능이라고 생각됩니다.