스매싱 - 스포츠인을 위한 매칭은 계속된다
스매싱은 2030 세대의 스포츠 자아 완성을 돕는 게이미피케이션 기반 스포츠 매칭 플랫폼 입니다.
| 🏸공승준(LEAD) @seungjunGong |
🎮신형철 @ShinHyeongcheol |
🍑이지민 @vahkjsdf |
🐰한유빈 @oilbeaneda |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
매칭 관리,매칭 결과 작성,알림 |
홈,랭킹,지역 검색 |
온보딩,로그인,매칭 탐색 |
프로필,매칭 결과 확인 |
| 항목 | 기술 스택 |
|---|---|
| Architecture | Google Recommended Architecture |
| Pattern | MVVM |
| DI | Hilt |
| Asynchronous | Coroutine, Flow |
| Network | Retrofit2, OkHttp, OkHttp-SSE |
| Navigation | Single Activity Architecture (SAA), Jetpack Navigation |
| UI Framework | Jetpack Compose |
| Image Processing | Coil, Lottie |
| Logging | Timber |
📌 도입 기술 선정 이유
1️⃣ Architecture: Google Recommended Architecture
서비스의 규모나 복잡도를 고려했을 때 도메인 레이어까지 고정적으로 가져가기보다는
기본적인 아키텍처 구조는 따르되, 도메인 레이어는 필요한 경우에만 유연하게 추가할 수 있도록 구성했습니다.
초기에는 가볍게 시작하고, 기능이 확장될수록 자연스럽게 구조를 확장해갈 수 있다고 판단했습니다.
2️⃣ Pattern: MVVM (Model-View-ViewModel)
팀원 대부분이 익숙하게 사용해온 패턴이며, ViewModel을 중심으로 상태를 관리하기 때문에 Jetpack Compose와의 궁합이 좋아 선택하게 되었습니다.
UI와 로직을 명확히 분리할 수 있어서 협업 시 역할 구분이 쉬워지고, 테스트나 유지보수 측면에서도 유리합니다.
3️⃣ Dependency Injection: Hilt
구글에서 권장하는 DI 라이브러리로, 보일러플레이트 코드를 줄이면서 의존성 관리의 일관성과 재사용성을 확보할 수 있어 도입했습니다.
또한 내부적으로 제공하는 컴포넌트들의 라이프사이클을 자동으로 관리해주기 때문에, 초기 설정 부담을 줄이고 생산성과 유지보수 효율을 높일 수 있습니다.
- Github Convention
- Naming Convention
- Packaging Convention
Google Recommended Architecture
🗃️ smashing.app
├─ 🗃️ core
│ ├─ 🗃️ common
│ │ ├─ 📁 constant
│ │ ├─ 📁 di
│ │ ├─ 📁 navigation
│ │ ├─ 📁 state
│ │ └─ 📁 type
│ ├─ 🗃️ designsystem
│ │ ├─ 📁 component
│ │ ├─ 📁 mapper
│ │ ├─ 📁 state
│ │ ├─ 📁 style
│ │ └─ 📁 theme
│ ├─ 📁 extension
│ ├─ 🗃️ local
│ │ └─ 📁 datastore
│ ├─ 🗃️ network
│ └─ 📁 util
│
├─ 🗃️ data
│ ├─ 🗃️ di(feature 기반)
│ ├─ 🗃️ local
│ │ ├─ 📁 datasource
│ │ │ ├─ 📁 api
│ │ │ └─ 📁 impl
│ ├─ 🗃️ remote
│ │ ├─ 📁 datasource
│ │ │ ├─ 📁 api
│ │ │ └─ 📁 impl
│ │ ├─ 📁 dto
│ │ └─ 📁 service
│ ├─ 🗃️ mapper(dto ↔ model 변환)
│ ├─ 🗃️ model(feature 기반)
│ └─ 🗃️ repository
│ │ ├─ 📁 api
│ │ └─ 📁 impl
│ ├─ 🗃️type
├─ 🗃️ domain
│ ├─ 📁 model
│ ├─ 📁 usecase
│ └─ 📁 mapper
│
└─ 🗃️ presentation
├─ 📁 main
└─ 📁 home
...




