Skip to content

Latest commit

 

History

History
110 lines (68 loc) · 7.05 KB

README.md

File metadata and controls

110 lines (68 loc) · 7.05 KB

Jumak

주막타이틀

내 주변의 막걸리 주막 찾기 🍶, Jumak

v1.0.0 개발기간: 2023.09.26 ~ 2023.10.23

지속적인 업데이트: 2023.10.23 ~ (진행중)

✨ 프로젝트 주요 기능

🔑 내 위치 근처 혹은 내가 검색하고 싶은 위치에서 막걸리 주막을 찾을 수 있어요.

Simulator Screen Recording - iPhone 14 Pro - 2023-11-02 at 19 05 37 Simulator Screen Recording - iPhone 14 Pro - 2023-11-02 at 19 07 03

🔑 막걸리지도에서 찾은 주막을 선택해 상세 정보를 얻으세요. 주막까지의 길찾기 기능과 즐겨찾기 및 평점 등록이 가능합니다.

Simulator Screen Recording - iPhone 14 Pro - 2023-11-02 at 19 35 00

🔑 해당 주막에서 있었던 에피소드를 등록하세요. 에피소드 조회와 삭제도 가능합니다.

Simulator Screen Recording - iPhone 14 Pro - 2023-11-02 at 19 43 26 Simulator Screen Recording - iPhone 14 Pro - 2023-11-02 at 19 39 30

🔑 평점, 즐겨찾기, 에피소드 등록을 통해 나만의 주막 리스트를 만들어보세요. 다양한 필터 기능으로 최적화된 주막을 선정 할 수 있습니다.

Simulator Screen Recording - iPhone 14 Pro - 2023-11-02 at 19 53 56 Simulator Screen Recording - iPhone 14 Pro - 2023-11-02 at 19 46 58

⚙️ 개발환경 및 기술스택

  • Minimum Deployments: iOS 15.5
  • Dependence Manager : SPM & CocoaPod(NaverMap)
  • Swift Version: 5.8.1
  • UIKit CoreLocation DiffableDataSource CompositionalLayout PHPickerViewController propertyWrapper

라이브러리

  • RxSwift RxCocoa RxDataSources RxGesture
  • Alamofire RxReachability
  • SnapKit
  • NaverMap
  • RealmSwift

🫡 TroubleShooting

🔥 기술적 도전

Clean Architecture

스크린샷 2023-11-02 오후 3 46 22

Why

  • 약 4주라는 기간 안에 앱스토어 출시라는 목표를 잡았습니다. 디자인, 기획 등이 개발 중에도 수정되어, 서비스의 방향과 스펙, UI 등이 변경될 수 있다고 생각했습니다. 핵심 비즈니스 로직과 변경이 자주 발생하는 외부의 레이어를 명확하게 분리하여 결합도를 낮출 수 있는 구조 설계를 고민했고, Clean-Architecture을 채택하게 되었습니다.

Result

  • ViewModel의 비즈니스 로직들을 UseCase로, 네트워크나 외부 프레임워크에 대한 요청은 Repository로 분리해 각 레이어의 역할을 분명하게 나누어, 코드의 결합도를 낮추고, 의존성이 Domain Layer를 향하도록 구현할 수 있었습니다.

  • MVVM 구조에서 ViewModel이 모든 비즈니스 로직을 처리하는 것을 피할 수 있었습니다.

  • 각각의 레이어를 역할에 따라 분리하여 방대한 양의 코드를 쉽게 파악할 수 있었습니다.


MVVM + Input Output Patten

스크린샷 2023-11-02 오후 5 55 40

Why

  • 뷰가 화면을 그리는 역할만 담당하고, 비즈니스 로직에 대한 분리를 위해 MVVM 패턴을 도입했습니다.
  • iOS MVVM은 표준이 없고 구현하는 사람마다 패턴이 다를 수 있습니다. MVVM 패턴을 정형화하고, 데이터 흐름을 단방향으로 관리하기 위해 Input/Output 패턴을 활용했습니다.

Result

  • 화면에서 일어나는 모든 이벤트를 Input으로 정의하여 비즈니스 로직을 요청하고, 결과로 갱신되는 값들을 Output에 바인딩해 뷰 컨트롤러는 Ouput을 보고 화면을 그리도록 구현할 수 있었습니다.

  • Input/Output 패턴을 활용해 일관성 있는 구조의 뷰모델 코드를 만들 수 있어, 가독성을 높일 수 있었습니다.


RxSwift

Why

  • 각 객체에서 연속된 escaping closure으로 인한 연속된 콜백의 데이터 흐름을 피하고 싶었습니다.
  • Notification Center, GCD등 복합적이고 다양한 비동기 API를 활용하기 보단, 일관된 비동기 프레임워크 활용하고 싶었습니다.

Result

  • escaping closure가 아닌 RxSwift의 Operator를 활용하여 코드 양이 감소하고, 이해하기 쉬워졌습니다. 코드의 방대해짐과 실수를 방지할 수 있었습니다.

  • 오로지 RxSwift만 활용해 하나의 비동기 코드로 개발할 수 있었고, 기존의 복합적인 비동기코드의 가독성을 올리고 유지보수를 쉽게 만들 수 있었습니다.

  • RxTraits를 활용해 Thread 관리를 쉽고 간편하게 할 수 있었습니다.


주막 서비스의 주차별 개발 일지를 보고 싶으시다면! 🍶 주막 프로젝트 Iteration