친구와 함께 뛰고, 인증하고, 피드로 응원하는 소셜 러닝 iOS 앱
[디프만(Depromeet) 17기 Team 6]의 iOS 프로젝트입니다.
두런두런은 혼자 뛰는 러닝을 "함께 뛰는 경험"으로 바꿔주는 소셜 러닝 메이트 앱입니다. 러닝 코스와 기록을 추적하고, 러닝이 끝나면 인증 셀카를 피드에 올려 친구들과 서로의 운동을 확인하고 응원할 수 있습니다.
- 지도 기반으로 실시간 경로 · 거리 · 페이스를 기록하는 러닝 트래커
- 러닝 종료 후 인증 셀카를 업로드하는 피드
- 친구 코드로 친구를 추가하고, 서로의 러닝 현황을 확인
- 친구의 피드 업로드 · 반응 · 러닝 독촉 등을 알려주는 푸시 알림
| 영역 | 설명 |
|---|---|
| Running | 네이버 지도 기반 실시간 경로 기록, 카운트다운 후 러닝 시작, 러닝 중 거리/시간/페이스 측정, 러닝 종료 후 상세 결과 확인 |
| Feed | 러닝 인증 셀카 업로드/수정/삭제, 친구 피드에 리액션, 오늘 인증한 친구 목록 확인, 과거 러닝 세션으로부터 피드 업로드 |
| Friend | 친구 코드 입력으로 친구 추가, 친구 목록/프로필 조회, 친구의 러닝 상태 확인 |
| My | 내 프로필, 내가 올린 피드/러닝 세션 모아보기, 프로필 수정 |
| Notification | 친구 반응, 피드 업로드, 러닝 독촉 등 알림 목록 및 푸시 알림(FCM) 수신 |
| Onboarding | 약관 동의, 휴대폰 본인 인증, 프로필 생성, 계정 찾기 |
| Setting | 계정 정보, 알림 설정, 로그아웃/회원 탈퇴 |
| 분류 | 사용 기술 |
|---|---|
| UI | SwiftUI |
| 아키텍처 | The Composable Architecture (TCA) |
| 네트워킹 | Moya + Alamofire |
| 지도/위치 | NMapsMap (Naver Map SDK) |
| 이미지 로딩 | Kingfisher |
| 푸시/분석 | Firebase (Analytics, Cloud Messaging) |
| 광고 | Google Mobile Ads (AdMob) |
| 프로젝트 관리 | Tuist |
| 최소 지원 버전 | iOS 16.0 |
Clean Architecture를 기반으로 레이어를 분리하고, 각 Presentation 화면은 TCA의 Reducer(Feature)로 구성합니다.
DoRunDoRun/Sources
├── App # 앱 진입점(DoRunDoRunApp), AppDelegate, 루트 AppFeature
├── Presentation # 화면별 Feature(View + Reducer) - Running/Feed/Friend/My/Notification/Onboarding/Setting/Splash
│ └── _Dependencies # 각 Feature에서 사용하는 TCA DependencyKey 정의
├── Domain # Entity, Repository 프로토콜, UseCase (화면/서버 구현에 독립적인 비즈니스 로직)
├── Data # API(Moya), DTO, Network, RepositoryImpl(실제 구현)/RepositoryMock(테스트용)
├── DesignSystem # 컬러, 폰트, 타이포그래피, 아이콘/그래픽 리소스, 공용 컴포넌트
├── Common # Analytics, Manager(토큰/FCM/광고 등), Extension, PropertyWrapper, Utility
└── Resources # Assets, Fonts, GoogleService-Info.plist
- 하나의 루트
AppFeature가 로그인 여부에 따라 온보딩 플로우와 메인 탭(Running / Feed / My)을 전환합니다. - 각 탭은 독립적인
StackState기반 네비게이션 스택(runningPath,feedPath,myPath)을 가지며, 화면 간 이동은delegate액션으로 상위 Feature에 위임합니다. - 서버 통신은
Domain의 UseCase/Repository 인터페이스를Data의RepositoryImpl이 구현하며, TCA@DependencyClient로 주입합니다.