- iOS Developer[2]
- UI/UX Designer [2]
우리가 사랑하는 방법 🩷, MeloMeter
MeloMeter 하나로 연인과 위치를 공유하고, 기념일을 챙기고, 채팅과 백문백답도 즐겨보세요!
전화번호 인증을 통해 발급된 초대코드로, 상대방과 연결할 수 있습니다.
- 초기 MVC 패턴 구조로 개발하던 중, 기능을 추가하며 컨트롤러 비중이 높아져 가독성, 디버깅, 결합도 측면 문제가 발생했습니다. Extension을 사용해 코드를 분리하기 위해 노력했지만 부족했습니다.
- 사용자 입력 및 뷰의 로직과 비즈니스에 관련된 로직을 분리하고 싶었습니다.
- View의 Event로 부터 UI작업까지 단방향으로 관리할 수 있는 장점이 있었습니다.
- Input, Output으로 나누어 ViewModel에 전달받을 값과, 전달할 값을 직관적으로 인식할 수 있었습니다.
- ViewController가 ViewModel의 프로퍼티를 참조하는 의존성을 해결하고, 비중을 효과적으로 줄일 수 있었습니다.
- Firebase를 사용하면서 중첩된 비동기 처리가 많아졌고, Completion Handler를 이용해 처리하던 중 코드 가독성이 저하됐고, 실수가 잦아진 문제를 해결하고자 했습니다.
- 대안으로 Combine이 있었지만, 출시일이 빠른 RxSwift가 더 넓은 범위 버전까지 지원하고 레퍼런스가 많아 선택했습니다.
- Escaping Closure가 아닌 RxSwift의 Operator를 활용하여 코드 양이 감소해 깔끔해지고 실수를 방지할 수 있었습니다.
- 비동기 코드(DispatchQueue, OperationQueue)를 직접적으로 사용하지 않아 일관성 있는 비동기 코드로 작성할 수 있었습니다.
- 코드 베이스로 UI를 작성하면서 StoryBoard로 UI를 작성할 때 보다 View들의 계층과 Flow를 파악하기가 힘들다는 문제가 있었습니다.
- ViewController의 화면 전환 및 의존성을 주입하는 역할을 분리하고, 한눈에 보기 위해 적용했습니다.
- 동일한 인스턴스의 중복 생성을 막아 메모리 낭비를 막을 수 있었습니다.
- View의 계층과 Flow 및 의존성을 주입에 대한 정보를 한 눈에 파악할 수 있었습니다.
- 사용자 인증, 사용자 정보 저장, 실시간 채팅, 실시간 위치 공유, 백문백답, 기념일 등의 기능 구현을 위해 별도의 서버 구현없이 빠르게 개발하기 위해 사용하였습니다.
- Firebase Authentication을 사용하여 전화번호 인증 로그인을 구현했습니다.
- Firebase Firestore를 사용하여 사용자 데이터, 채팅 정보, 위치 정보, 백문백답, 공지사항 등을 저장했습니다.
- Firebase Storage를 사용하여 프로필 사진, 채팅 이미지를 저장했습니다.
- FireStore의 채팅 데이터, 위치 데이터를 옵저빙하여 변경되는 데이터를 앱에서 실시간으로 업데이트 할 수 있었습니다.