# 프로젝트 매니저 ### 🖥️ 기술스택 Framework |Architecture| Network| LocalDB | RemoteDB | Concurrency | | --- | --- | --- | --- | --- | --- | | SwiftUI | MVVM | Alamofire | CoreData | firebase | Combine #### Framework: SwiftUI - SwiftUI를 선택한 이유는 iOS, macOS, watchOS, tvOS 등 애플의 모든 플랫폼에서 작동하기 때문에 코드의 재사용성이 높다는 점도 있고, 사용해보고 싶어서 선택하게 되었습니다. - SwiftUI는 iOS 13이상에서 호환되므로 하위 버전 호환성에 문제가 있을 수 있습니다. 그러나 2023년 현재 대부분(80%이상)의 사용자가 iOS 13 이상을 사용하고 있으므로 이는 크게 문제 되지 않을거라고 생각합니다. #### Architecture: MVVM - UI에 대한 비즈니스 로직을 분리하는데 좋습니다. 데이터 바인딩을 통한 UI업데이트가 간편하게 이루어질 수 있는점에서 선택하게 되었습니다. - 물론 TCA를 사용하거나 MVI를 선택하는 더 좋은 방법도 있겠지만 아직 저에게는 높은 진입장벽이 있다고 생각했고, SWiftUI 이해도 높이기 + MVVM을 먼저 사용한 뒤에 추후 적용시켜도 충분하다고 생각합니다. #### Network: Alamofire - URLSession을 기반으로 만들어진 라이브러리로 URLSession의 복잡함을 사용하기 쉽게 만들어준다고 생각했습니다. HTTP 네트워크 작업을 추상화하여 처리를 단순화하고, 여러 복잡한 네트워킹 작업을 쉽게 수행할 수 있도록 도와줍니다. #### LocalDB: CoreData - CoreData는 객체 그래프와 관계형 데이터 모델을 사용하고 복잡한 데이터 구조와 관계를 처리하는데 유용하다고 생각합니다. iOS 전용 프로젝트로 다른 플랫폼에 대한 호환성을 고려하지 않았기때문에 크로스 플랫폼을 개발하는데 유용한 Realm을 선택하지 않고 CoreData를 선택하게 되었습니다.또한 CoreData는 애플이 제공하는 iOS표준 라이브러리라 좋을거라고 생각했습니다. #### RemoteDB: firebase - Google에서 제공하는 클라우드 기반 데이터베이스로 실시간 데이터 동기화, 사용자 인증, 클라우드 메시지 등 다양한 기능을 제공합니다. iOS, Android, Web 모두 사용이 가능하고 미래지속성도 높습니다. - Firebase를 사용하면 클라우드에 데이터를 저장하고 동기화할 수 있고 이를 통해 여러 기기 간에 데이터 동기화를 쉽게 구현할 수 있습니다. #### Concurrency: Combine - 애플이 제공하는 함수형 프로그래밍라이브러리로 비동기 이벤트를 처리하는 코드를 간결하고 읽기 쉽게 만들 수 있다는 장점이 있습니다. - 새롭게 도입된 비동기 API Swift Concurrency를 사용하여 actor모델로 동시성을 쉽게 관리하는 방식, 기존 클로저 방식과도 비교를 했는데 Combine은 사용해보지 않았고 비동기 코드를 간결하게 작성하는 방법이라 최근에 배운 Combine에 익숙해지고 싶어서 선택하게 되었습니다.