Skip to content

Commit 4d6e87c

Browse files
committed
docs: README.md 수정
1 parent 25d3617 commit 4d6e87c

1 file changed

Lines changed: 70 additions & 179 deletions

File tree

README.md

Lines changed: 70 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,84 @@
22

33
## 📱 프로젝트 개요
44

5-
**RunCombi**는 반려동물과 함께하는 운동을 기록하고 관리하는 Android 애플리케이션입니다. 사용자와 반려동물의 운동 데이터를 실시간으로 추적하고, 건강한 라이프스타일을 지원합니다.
5+
**RunCombi**는 반려동물과 함께하는 운동을 기록하고 관리하는 Android 애플리케이션입니다.
66

77
### 주요 기능
8-
- 🚶‍♂️ 실시간 운동 추적 (걷기, 뛰기)
98
- 🐕 반려동물과 함께하는 운동 기록
10-
- 📊 운동 통계 및 칼로리 계산
119
- 🗺️ GPS 기반 경로 추적
12-
- 🔄 백그라운드 운동 기록 (ForegroundService)
1310
- 👥 사용자 프로필 및 반려동물 관리
1411

15-
## 🏗️ 프로젝트 아키텍처
12+
## 🛠️ 프로젝트 기술 스택
1613

17-
### Clean Architecture + MVVM 패턴
14+
<div align="center">
1815

19-
```
20-
┌─────────────────────────────────────────────────────────────┐
21-
│ Presentation Layer │
22-
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
23-
│ │ Screens │ │ ViewModels │ │ Composables│ │
24-
│ └─────────────┘ └─────────────┘ └─────────────┘ │
25-
└─────────────────────────────────────────────────────────────┘
26-
27-
┌─────────────────────────────────────────────────────────────┐
28-
│ Domain Layer │
29-
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
30-
│ │ UseCases │ │ Entities │ │ Repositories│ │
31-
│ └─────────────┘ └─────────────┘ └─────────────┘ │
32-
└─────────────────────────────────────────────────────────────┘
33-
34-
┌─────────────────────────────────────────────────────────────┐
35-
│ Data Layer │
36-
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
37-
│ │ Repositories│ │ DataSources │ │ Models │ │
38-
│ └─────────────┘ └─────────────┘ └─────────────┘ │
39-
└─────────────────────────────────────────────────────────────┘
40-
```
16+
![Kotlin](https://img.shields.io/badge/Kotlin-100%25-purple?style=for-the-badge&logo=kotlin)
17+
![Android](https://img.shields.io/badge/Android-API%2026+-green?style=for-the-badge&logo=android)
18+
![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-blue?style=for-the-badge)
19+
![Clean Architecture](https://img.shields.io/badge/Architecture-Clean%20Architecture-orange?style=for-the-badge)
20+
21+
</div>
22+
23+
### 📱 Android & Kotlin
24+
25+
| 항목 | 내용 | 버전 |
26+
|------|------|------|
27+
| **언어** | Kotlin | 100% |
28+
| **최소 SDK** | Android 8.0 | API 26 |
29+
| **타겟 SDK** | Android 15 | API 35 |
30+
| **UI 프레임워크** | Jetpack Compose | 최신 |
31+
32+
### 🏗️ 아키텍처 & 패턴
33+
34+
| 패턴 | 설명 | 적용 범위 |
35+
|------|------|-----------|
36+
| **Clean Architecture** | 계층별 관심사 분리 | 전체 프로젝트 |
37+
| **MVVM** | Model-View-ViewModel 패턴 | UI 계층 |
38+
| **Repository Pattern** | 데이터 접근 추상화 | 데이터 계층 |
39+
| **UseCase Pattern** | 비즈니스 로직 캡슐화 | 도메인 계층 |
4140

42-
### 아키텍처 특징
43-
- **Clean Architecture**: 관심사 분리와 의존성 역전 원칙 적용
44-
- **MVVM**: ViewModel과 StateFlow를 통한 반응형 UI
45-
- **Repository Pattern**: 데이터 접근 추상화
46-
- **UseCase Pattern**: 비즈니스 로직 캡슐화
47-
- **Dependency Injection**: Hilt를 통한 의존성 관리
41+
### 🔧 주요 라이브러리
42+
43+
<div align="center">
44+
45+
![Hilt](https://img.shields.io/badge/DI-Hilt-red?style=flat-square&logo=android)
46+
![Coroutines](https://img.shields.io/badge/Async-Coroutines%20%2B%20Flow-green?style=flat-square&logo=kotlin)
47+
![Navigation](https://img.shields.io/badge/Navigation-Jetpack%20Navigation-blue?style=flat-square&logo=android)
48+
![StateFlow](https://img.shields.io/badge/State-StateFlow-orange?style=flat-square&logo=kotlin)
49+
![DataStore](https://img.shields.io/badge/Storage-DataStore%20%2B%20Room-purple?style=flat-square&logo=android)
50+
![Retrofit](https://img.shields.io/badge/Network-Retrofit%20%2B%20OkHttp-blue?style=flat-square&logo=square)
51+
![Coil](https://img.shields.io/badge/Image-Coil-green?style=flat-square&logo=android)
52+
53+
</div>
54+
55+
| 카테고리 | 라이브러리 | 용도 |
56+
|----------|------------|------|
57+
| **의존성 주입** | Hilt | DI 컨테이너 |
58+
| **비동기 처리** | Kotlin Coroutines + Flow | 비동기 작업 |
59+
| **네비게이션** | Jetpack Navigation Compose | 화면 전환 |
60+
| **상태 관리** | StateFlow, MutableStateFlow | UI 상태 |
61+
| **데이터 저장** | Proto DataStore, Room | 로컬 데이터 |
62+
| **네트워크** | Retrofit, OkHttp | API 통신 |
63+
| **이미지 처리** | Coil | 이미지 로딩 |
64+
| **권한 관리** | Accompanist Permissions | 권한 처리 |
65+
66+
### 📊 외부 서비스
67+
68+
<div align="center">
69+
70+
![Firebase](https://img.shields.io/badge/Analytics-Firebase%20Analytics-orange?style=flat-square&logo=firebase)
71+
![Crashlytics](https://img.shields.io/badge/Crash%20Reporting-Firebase%20Crashlytics-red?style=flat-square&logo=firebase)
72+
![Google Maps](https://img.shields.io/badge/Maps-Google%20Maps%20API-blue?style=flat-square&logo=google-maps)
73+
![Kakao](https://img.shields.io/badge/Login-Kakao%20SDK-yellow?style=flat-square&logo=kakao)
74+
75+
</div>
76+
77+
| 서비스 | 용도 | 통합 방식 |
78+
|--------|------|-----------|
79+
| **Firebase Analytics** | 사용자 행동 분석 | SDK 통합 |
80+
| **Firebase Crashlytics** | 크래시 리포팅 | SDK 통합 |
81+
| **Google Maps API** | 지도 및 위치 서비스 | API 키 |
82+
| **Kakao SDK** | 소셜 로그인 | SDK 통합 |
4883

4984
## 📁 프로젝트 모듈 트리
5085

@@ -82,115 +117,6 @@ RunCombi_Android/
82117
└── walk/ # 운동 추적
83118
```
84119

85-
## 🔧 프로젝트 모듈별 설명
86-
87-
### 📱 App Module
88-
- **역할**: 메인 애플리케이션 진입점
89-
- **주요 구성**: Application 클래스, AndroidManifest
90-
- **특징**: 모든 모듈을 통합하고 의존성 주입 설정
91-
92-
### 🏗️ Build-Logic Module
93-
- **역할**: 커스텀 Gradle 플러그인 및 빌드 로직
94-
- **주요 구성**:
95-
- `runcombi.android.application.gradle.kts`
96-
- `runcombi.android.compose.gradle.kts`
97-
- `runcombi.android.feature.gradle.kts`
98-
- `runcombi.android.library.gradle.kts`
99-
100-
### 🎯 Core Module
101-
#### Analytics
102-
- **역할**: 사용자 행동 분석 및 이벤트 추적
103-
- **기술**: Firebase Analytics, 커스텀 이벤트 로깅
104-
105-
#### Data Layer
106-
- **역할**: 데이터 접근 및 관리
107-
- **구성**:
108-
- **Auth**: 사용자 인증 및 권한 관리
109-
- **Common**: 공통 데이터 모델 및 유틸리티
110-
- **History**: 운동 기록 데이터 관리
111-
- **Setting**: 사용자 설정 데이터
112-
- **User**: 사용자 프로필 및 정보
113-
- **Walk**: 운동 추적 데이터
114-
- **Datastore**: 로컬 데이터 저장 (Proto DataStore)
115-
- **Network**: API 통신 및 네트워크 처리
116-
117-
#### Domain Layer
118-
- **역할**: 비즈니스 로직 및 엔티티 정의
119-
- **구성**: 각 데이터 모듈에 대응하는 도메인 모듈
120-
- **특징**: UseCase 패턴으로 비즈니스 로직 캡슐화
121-
122-
#### Design System
123-
- **역할**: 일관된 UI/UX 컴포넌트 제공
124-
- **구성**: 테마, 색상, 타이포그래피, 공통 컴포넌트
125-
126-
#### Navigation
127-
- **역할**: 화면 간 네비게이션 관리
128-
- **기술**: Jetpack Navigation Compose
129-
130-
#### UI
131-
- **역할**: 공통 UI 컴포넌트 및 유틸리티
132-
- **구성**: 재사용 가능한 Compose 컴포넌트
133-
134-
### ⚡ Feature Modules
135-
#### History
136-
- **역할**: 운동 기록 조회 및 통계
137-
- **기능**: 운동 히스토리, 통계 차트, 필터링
138-
139-
#### Login
140-
- **역할**: 사용자 인증 및 로그인
141-
- **기능**: 카카오 로그인, 자동 로그인
142-
143-
#### Main
144-
- **역할**: 메인 화면 및 네비게이션
145-
- **기능**: 하단 네비게이션, 홈 화면
146-
147-
#### Setting
148-
- **역할**: 사용자 설정 및 프로필 관리
149-
- **기능**: 개인정보 수정, 알림 설정
150-
151-
#### Signup
152-
- **역할**: 회원가입 및 초기 설정
153-
- **기능**: 사용자 정보 입력, 반려동물 등록
154-
155-
#### Walk
156-
- **역할**: 운동 추적 및 기록
157-
- **기능**: GPS 추적, 실시간 기록, ForegroundService 연동
158-
159-
## 🛠️ 프로젝트 기술 스택
160-
161-
### 📱 Android & Kotlin
162-
- **언어**: Kotlin 100%
163-
- **최소 SDK**: API 26 (Android 8.0)
164-
- **타겟 SDK**: API 35 (Android 15)
165-
- **Jetpack Compose**: UI 프레임워크
166-
167-
### 🏗️ 아키텍처 & 패턴
168-
- **Clean Architecture**: 계층별 관심사 분리
169-
- **MVVM**: Model-View-ViewModel 패턴
170-
- **Repository Pattern**: 데이터 접근 추상화
171-
- **UseCase Pattern**: 비즈니스 로직 캡슐화
172-
173-
### 🔧 주요 라이브러리
174-
- **의존성 주입**: Hilt
175-
- **비동기 처리**: Kotlin Coroutines + Flow
176-
- **네비게이션**: Jetpack Navigation Compose
177-
- **상태 관리**: StateFlow, MutableStateFlow
178-
- **데이터 저장**: Proto DataStore, Room
179-
- **네트워크**: Retrofit, OkHttp
180-
- **이미지 처리**: Coil
181-
- **권한 관리**: Accompanist Permissions
182-
183-
### 📊 외부 서비스
184-
- **분석**: Firebase Analytics
185-
- **크래시 리포팅**: Firebase Crashlytics
186-
- **지도**: Google Maps API
187-
- **소셜 로그인**: Kakao SDK
188-
189-
### 🚀 빌드 도구
190-
- **빌드 시스템**: Gradle (Kotlin DSL)
191-
- **모듈화**: Feature-based 모듈 구조
192-
- **커스텀 플러그인**: 자체 Gradle 플러그인
193-
194120
## 🏭 Flavor 시스템
195121

196122
### Product Flavors
@@ -250,7 +176,6 @@ app/
250176
### 📱 Slack 빌드 알림 예시
251177
![RunCombi Android 빌드 성공 알림](./docs/images/slack_notification.png)
252178

253-
### 🔄 QA 중심 CI/CD 파이프라인 흐름
254179

255180
```
256181
1. 개발자 코드 Push/PR 생성
@@ -268,13 +193,7 @@ app/
268193
├── Firebase 콘솔에서 APK 다운로드
269194
├── 테스트 환경에서 기능 검증
270195
└── 피드백 수집 및 이슈 등록
271-
272-
6. QA 피드백 반영 및 재배포
273-
├── 이슈 수정 및 코드 개선
274-
├── 재빌드 및 재배포
275-
└── 최종 QA 승인
276-
277-
7. 스토어 배포 준비 완료
196+
278197
```
279198

280199
## 🎨 뷰모델 및 UI 로직 패턴
@@ -286,7 +205,6 @@ app/
286205
@HiltViewModel
287206
class ExampleViewModel @Inject constructor(
288207
private val useCase: ExampleUseCase,
289-
private val repository: ExampleRepository
290208
) : ViewModel() {
291209

292210
private val _uiState = MutableStateFlow(ExampleUiState())
@@ -375,30 +293,3 @@ fun ExampleScreen(
375293
}
376294
```
377295

378-
#### 컴포넌트 구조
379-
```kotlin
380-
@Composable
381-
fun ExampleContent(
382-
uiState: ExampleUiState,
383-
onAction: (ExampleAction) -> Unit
384-
) {
385-
Column(
386-
modifier = Modifier.fillMaxSize(),
387-
horizontalAlignment = Alignment.CenterHorizontally
388-
) {
389-
when {
390-
uiState.isLoading -> LoadingIndicator()
391-
uiState.error != null -> ErrorContent(
392-
error = uiState.error!!,
393-
onRetry = { onAction(ExampleAction.Load) }
394-
)
395-
else -> DataContent(
396-
data = uiState.data,
397-
onItemClick = { item ->
398-
onAction(ExampleAction.SelectItem(item))
399-
}
400-
)
401-
}
402-
}
403-
}
404-
```

0 commit comments

Comments
 (0)