Skip to content

runner-be/RunnerBe-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐝 러너비

프로젝트 소개

직장인 간 시간대/위치/직군/성별/나이 별로 러닝 모임을 결성하여 러닝을 뛸 수 있도록 돕는 서비스

Tech Stack

  • 언어 : Swift
  • UI: UIKit, 코드 방식(SnapKit)
  • 아키텍처 : MVVM + Coordinator + Clean Architecture
  • 비동기 처리 : RxSwift, DispatchQueue
  • 네트워킹 : Moya
  • 기타: Firebase Analytics/Crashlytics (유저 및 버그 리포트)
  • 협업: Slack, Figma, Zeplin

아키텍처

MVVM-C + Clean Architecture

(현재 앱스토어 버전에는 적용되지 않았기에 feature/refactor 브랜치에 적용되어있습니다.)


  • Common: 앱 공통적으로 쓰이는 모달과 같은 컴포넌트, 모델, CommonViews / 유용한 도구 모음 Util / Extension, Localization 등

    • 해당 그룹의 컴포넌트나 Common View, Extension, Util은 앱 공통적으로 사용하거나 자주 사용하는 코드 및 UI를 모듈화함으로써 코드 중복을 줄이고 재사용성을 높임
  • Base: 앱의 ViewController, ViewModel, Coordinator와 APIService에 공통적으로 사용되는 속성을 정의하며, Feature의 각 요소는 해당 Base 클래스를 상속함으로써 코드 재사용성을 높임

  • Feature: 회원가입 시 초기 진입하는 Onboarding 화면 / 탭바 기준으로 Home, BookMark, Message, MyPage로 분리

    • 각 Feature는 ViewController, ViewModel, Component, Coordinator를 가짐
    • 기존 MVVM 패턴에 Clean Architecture를 도입하여 Layer를 분리하고, ViewModel을 Solid의 SRP(단일 책임 원칙)에 맞게 역할을 분리함으로써 유지보수를 용이하게 함

    [Presentation Layer]

    • Component: 화면 별로 필요한 ViewController, ViewModel을 소유하며 화면 전환 가능성이 있는 Component를 생성 및 전달
    • Coordinator: ViewController의 화면 전환 및 전환에 따른 추가 작업 로직 분리, 화면 계층 관리
    • ViewModel: Moya 기반의 APIService에서 통신한 내용과 UserDefaults의 localDB에 의존하여 데이터를 획득하며, View는 ViewModel을 바인딩함 (RxSwift, RxCocoa)
      • Input/Output Modeling: ViewModel의 Nested Type으로 Input 및 Output 구조체를 추가하여 View에서 ViewModel로 입력이 들어오는 부분은 Input, ViewModel에서 View로 출력되는 부분은 Output으로 분리하여 코드 가독성을 높임

    [Domain Layer]

    • Entity: Data Model
    • UseCase: Data Layer 계층의 APIService, KeyChainService와 소통함으로써 데이터 제공자로부터 데이터를 제공받고, ViewModel에게 제공하기 위한 데이터 가공 및 비즈니스 로직 수행
    • Protocol: Clean Architecture의 의존성 방향에 따르기 위해 Data Layer의 각 Service Class를 모듈화 및 추상화한 protocol을 생성하여 의존성을 주입함으로써 의존성이 역전되도록 함

    [Data Layer]

    • APIService, KeyChainService: 직접적으로 Entity를 사용하여 네트워크 통신, KeyChain 값 얻어오기 등을 통해 데이터를 UseCase에 제공하는 역할 수행

주요 기능 설명

1) 회원가입

  • 직장인이 타겟이므로, 성인 여부와 직군 정보를 회원가입 시 입력받습니다.

2) 러닝 모임 개설 및 신청

  • 성별 / 나이대 / 위치 / 직군 별로 모임 개설 및 필터를 통한 신청이 가능합니다.

3) 러닝톡

  • 러닝 모임 참여자 간 실시간으로 소통할 수 있는 댓글 서비스입니다.

4) 러닝 모임 관리 및 현황 확인

  • 러닝 모임 주최자는 러닝 참여자의 출석을 관리할 수 있으며, 참여자는 출석 여부를 확인할 수 있습니다.

About

직장인 러닝 모임 플랫폼, 러너비 iOS

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •