Skip to content

[iOS App] 내가 먹은 음식의 당 함량을 알려줍니다.

Notifications You must be signed in to change notification settings

SamsungTech/DangProject

Repository files navigation

DangProject

오늘 하루 당 몇 그램을 섭취하셨나요?

🗓 개발 기간: 2022.01.19 - 2022.10.16

👥 개발 인원: iOS 2명

📱 앱스토어: 당프로젝트



💻 Project Introduction

DangProjectPreviewShot



🐝 Team Member Introduction



🍎 Tech Stack



🌐 Main Features of the Project

🍎 애플 계정을 통해 회원가입, 로그인 할 수 있습니다.


🎯 목표 당을 설정하세요!


🍯 내가 먹은 음식의 당이 얼마나 들어가 있는지 검색 후 확인해보세요.


🍯 내가 먹은 음식을 추가하면 오늘 먹은 Section에서 확인가능합니다.


📅 Calendar로 이전 먹은 기록들 확인가능합니다.


⏰ 잊지 말고 알림 설정까지!



⚒️ Architecture

MVVM

  • MVVM은 뷰컨트롤러는 뷰를 그리는 것에만 집중하고, 그 외의 Object 관리나, UI 로직 처리는 뷰 모델에서 진행하도록 했습니다.

헥사고날 아키텍처

  • UI로직은 viewModel, 비즈니스 로직은 UseCase로, 네트워크나 외부 프레임워크 요청은 repository로 하여 각각 계층 별로 presentation Layer, domain Layer, Data layer 로 분리하였습니다.
  • 핵사고날 아키텍처의 구조는 비즈니스 로직을 다른 로직으로부터 보호하기위해 각 입출력 포트와 어댑터로 안쪽에 있는 유스케이스(비즈니스로직)가 속한 계층만 아예 분리하여 지키는 구조 입니다.

Coordinator

  • View가 어디에서 사용하더라도 화면 전환을 유연하게 할 수 있게 코디네이터 패턴을 사용하였습니다.
  • Parent Coordinator와 Child Coordinator 가지기 때문에 상위 코디네이터에 접근이 용이합니다.
  • 관리하기 쉽게 Coordinator와 ViewController 1:1 관계를 갖습니다.
  • View사이에 Object 데이터 전달도 담당합니다.

DIContainer

  • DIContainer로 의존성 객체 주입을 따로 가지게 했습니다.
  • Coordinator 안에 객체로 있으며(1:1) 모든 Layer의 의존성을 주입시키고 해당 viewController를 뱉어주는 팩토리로서 사용했습니다.


👨🏻‍💻 Technical Challenge

DeskCache 작업

  • 서버로 부터 받은 데이터들은 CoreData에 저장하고 불러오게 끔 캐시 작업 하였습니다.

Firebase를 활용한 데이터 스트리밍

  • firestore를 이용하여 저장하였습니다.
  • 뿐만아니라 Authentication, storage를 이용하여 회원정보 관리도 구현하였습니다.

RxSwift

  • 데이터가 발생하는 시점에서부터 뷰에 그려지기까지 하나의 큰 스트림으로 데이터를 바인딩해주었습니다.

Tuist

  • Tuist를 사용하여 프로젝트 및 라이브러리들 관리해주었습니다.