Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/woowacourse-teams/2023-diggin-room
๐ต ์ฌ์ฉ์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ์์
์ ์ถ์ฒํ๋ ์ํผ ์ปจํ
์ธ ์๋น์ค
https://github.com/woowacourse-teams/2023-diggin-room
android kotlin spring spring-boot
Last synced: about 3 hours ago
JSON representation
๐ต ์ฌ์ฉ์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ์ถ์ฒํ๋ ์ํผ ์ปจํ ์ธ ์๋น์ค
- Host: GitHub
- URL: https://github.com/woowacourse-teams/2023-diggin-room
- Owner: woowacourse-teams
- Created: 2023-06-29T01:23:11.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-03-22T03:05:14.000Z (8 months ago)
- Last Synced: 2024-03-22T04:24:19.243Z (8 months ago)
- Topics: android, kotlin, spring, spring-boot
- Language: Kotlin
- Homepage:
- Size: 19.2 MB
- Stars: 39
- Watchers: 3
- Forks: 4
- Open Issues: 24
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Diggin' Room
์ฌ์ฉ์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ์ถ์ฒํ๋ ์ํผ ์ปจํ ์ธ ์๋น์ค ๐ต
![Kotlin](https://img.shields.io/badge/kotlin-%237F52FF.svg?style=for-the-badge&logo=kotlin&logoColor=white)
![Android](https://img.shields.io/badge/Android-3DDC84?style=for-the-badge&logo=android&logoColor=white)
![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=openjdk&logoColor=white)
![Spring](https://img.shields.io/badge/spring-%236DB33F.svg?style=for-the-badge&logo=spring&logoColor=white)
![MySQL](https://img.shields.io/badge/mysql-%2300f.svg?style=for-the-badge&logo=mysql&logoColor=white)# ๊ธฐ๋ฅ
**์์ ํ์**
- ์๋ก์ด ์์ ์ ์ฐพ๊ธฐ ์ํด ์๋๋ก ์ค์์ดํ ํด๋ณด์ธ์!
- ๋๊น์๋ ๋ถ๋๋ฌ์ด ์คํฌ๋กค๊ณผ ๋์์ ์ฌ์์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ํ์ํ ์ ์์ด์.**์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ**
- ์ธ์์ ๋ชจ๋ ์ฅ๋ฅด์์ ์ถ์ฒ๋๋ ์์ ์ ์ฆ๊ฒจ๋ณด์ธ์!**์คํฌ๋ฉ**
- ํ์ํ๋ค ๋ฐ๊ฒฌํ ์ข์ ์์ ์ ์คํฌ๋ฉํด์ ๋์ค์ ๋ ๋ค์ด๋ณด์ธ์!**๋๊ธ**
- ๋ค๋ฅธ ์น๊ตฌ๋ค๊ณผ ์์ ์ ๋ํ ์๊ฐ์ ๋๋ ๋ณด์ธ์!# ๊ตฌํ
## ์๋ฒ
**๊ธฐ์ ์คํ**
- Spring Boot
- Spring MVC
- ORM(Spring Data JPA)
- MySQL
- ๋จ์ ํ ์คํธ ๋ฐ ์ธ์ ํ ์คํธ(JUnit 5, RestAssured, Mockito ์ฌ์ฉ)
- ๋ก๊น ํ๋ ์์ํฌ ์ ์ฉ, ๋ชจ๋ํฐ๋ง ์์คํ ๊ตฌ์ถ (์์ฒด Filter ๋ฐ Logback ์ฌ์ฉ)
- DDL ํ์ ๊ด๋ฆฌ ๋๊ตฌ ์ ์ฉ(Flyway)
- ๋ฐฐํฌ ์๋ํ (Github Actions, ํ๋กํ์ผ ๋ณ ์ค์ ๋ถ๋ฆฌ)
- ์์ ์ฌ์ฉ์ ์ธ์ฆ(OAuth 2.0 OpenID Connect ๋ฐ ์์ฒด ๊ตฌ์กฐ ์ฌ์ฉ)
- Salting์ด ์ ์ฉ๋ DPE(DigginRoom Password Encryption)## ์๋๋ก์ด๋
**๊ธฐ์ ์คํ**
- MVVM
- AAC ViewModel
- Repository ํจํด
- UI State
- Retrofit
- MockK
- ์์ฒด ์๋ ์์กด ์ฃผ์**[RoomPager](https://github.com/DYGames/RoomPager)**
๋ฌธ์ ์
- ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ๋ฐ์์ ์ํ "์ซ์ด์" ์ ์ค์ฒ๋ฅผ ์ํด 4๋ฐฉํฅ ์คํฌ๋กค ์ง์์ด ํ์
- ๊ธฐ์กด์ ScrollView ์ค์ฒฉ์ผ๋ก๋ WebView ํธํ์ด ๋ถ๊ฐ๋ฅ (WebView์์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ)
- WebView ์บ์ฑ, ๋ทฐ ์ฌํ์ฉ ๋ฑ ๋ณต์กํ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ปค์คํ ๋ทฐ๋ฅผ ๋ง๋ค ํ์์ฑ ์ ๊ธฐ๊ธฐ๋ฅ
- 4๋ฐฉํฅ ์คํฌ๋กค
- ๋ถ๋๋ฌ์ด ํ์ด์ง
- ๋๊น์๋ ๋์์ ์ฌ์์ ์ํ ์ด์ , ๋ค์ ์์ ๋ฏธ๋ฆฌ ๋ก๋ฉ
- ์ต์ํ์ ๋ทฐ(3๊ฐ)๋ก 4๋ฐฉํฅ ์คํฌ๋กค ๊ฐ๋ฅํ๊ฒ ๋ทฐ ์ฌ์ฌ์ฉ
- RecyclerView์ ๋์ผํ๊ฒ Adatper์ ViewHolder ๊ตฌํ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ์๋ก์ด ๋์์ ๋ก๋, ์ฌ์ฌ์ฉ์ ๋ํ ์ฝ๋ฐฑ ์ ๊ณต**LogResult**
๋ฌธ์ ์
- ๋คํธ์ํฌ ์์ฒญ, ๋น์ฆ๋์ค ๋ก์ง์์ ์ฑ๊ณต๊ณผ ์คํจ ์ํฉ ๋ชจ๋ ๋ก๊ทธ ์ถ๋ ฅ์ด ํ์๊ธฐ๋ฅ
- kotlin์ Result ํด๋์ค์ ๋น์ทํ์ง๋ง ๋ก๊ทธ๋ฅผ ์๋์ผ๋ก ์ถ๋ ฅํ๋ LogResult ๊ตฌํ
- logRunCatching ์ ์ญ ํจ์ ์ ๊ณต
- ๋ก๊ทธ๋ฅผ ์ฌ๋ฌ ์ฑ๋์์ ์ถ๋ ฅ ํ ์ ์๋ Logger ์ธํฐํ์ด์ค ์ ๊ณต
- logRunCatching์ผ๋ก ์ฝ๋๋ฅผ ์คํํ๊ณ onSuccess, onFailure ์ฝ๋ฐฑ์ ํธ์ถํ๋ฉด์ ๋ฑ๋กํ Logger๋ค์ ์๋์ผ๋ก ๋ก๊ทธ ์ถ๋ ฅ
- ํ์ฌ ์ฑ์๋ ์ฝ์, ํ์ด์ด๋ฒ ์ด์ค ์ฑ๋ ๊ตฌํ**ํ ์คํธ**
- ViewModel Test
- Domain Test**ํ๊ฒฝ**
- Kotlin 1.8.20
- Android Target SDK 33
- Android Gradle Plugin 8.0.2## ํ์
**Git**
- GitHub Flow ๊ธฐ๋ฐ [DRF (DigginRoomFlow)](https://github.com/woowacourse-teams/2023-diggin-room/wiki/%EA%B9%83-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%A0%84%EB%9E%B5)**Github Wiki**
- ํ๊ณ
- ํ๋ก์ ํธ ์ด์ ๋ฐ ๊ณํ
- ๊ฐ๋ฐ ๋ฌธ์**Notion**
- ๋ฐ์ผ๋ฆฌ ๋ฏธํ
- ํ์๋ก
- ๊ธฐํ
- ์๋ฃ
- ๊ณ ๋ฏผํ๊ธฐ
- ํ ์ปจ๋ฒค์ **Slack**
- ์๋ฒ ์ฅ์ ์๋ฆผ
- ํ ๋ด ๊ณต์ง## ํ์ & ์ญํ
ํ์
์ญํ
์ฝ๊ฑด (๊น๋์ฝ)
์ด๊ธฐ ๊ธฐํ
4๋ฐฉํฅ ๋ทฐ ์ฌ์ฌ์ฉ ์คํฌ๋กค๋ทฐ RoomPager ๊ฐ๋ฐ
Android WebView ์์ Youtube IFrame API๋ฅผ ์ด์ฉํ ์์ ์ฌ์
RoomPager์ YoutubePlayer๋ฅผ ์ด์ฉํ ๋ถ๋๋ฌ์ด ์ํผ ๊ฒฝํ ์ ๊ณต
์ฐ๊ธฐ (๊น์ง์ฑ)
๋ก๊ทธ์ธ, ํ์๊ฐ์ ๊ธฐ๋ฅ
๋ฃธ ์ถ์ฒ์ ์ํ ์ฌ์ฉ์์ ์ด๊ธฐ ์ฅ๋ฅด ์ทจํฅ ์ ํธ๋ ์ ๋ ฅ
์คํฌ๋ฉ ๊ธฐ๋ฅ ๋ฐ ์คํฌ๋ฉ๋ ๋ชฉ๋ก์ ๋ํ ์ ํ๋ธ ์ฌ์๋ชฉ๋ก ์ถ์ถ
๋ฒ ๋ฆฌ (์ฐํ๊ฒฝ)
ViewPager2 ๋ฅผ ์ด์ฉํ ์ฑ ์ฌ์ฉ ๊ฐ์ด๋ ์ ๊ณต
์ถ์ฒ ์์ ์ ๋ํ ์ ๋ณด ํ์
์ํ๋ ์์ ์ ์คํฌ๋ฉํ๊ณ ๋๊ธ ๋ฌ ์ ์๋ ๊ธฐ๋ฅ ๊ตฌํ
๋ก์น (๋ฐ์ฑ์ฒ )
์์ ํ ๋น๋ฐ๋ฒํธ ์ ์ฅ์ ์ํด ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์์ ํ DDL ๊ด๋ฆฌ๋ฅผ ์ํด DDL ๊ฒ์ฆ ์๋ํ ๊ตฌํ
ํ์ ์ฉ ๋ฐ์ดํฐ ์์ง ํฌ๋กฌ ํ์ฅ ๊ฐ๋ฐ
์ง์ ์ฅ๋ฒฝ ๊ฐ์๋ฅผ ์ํด ๊ฒ์คํธ ๋ก๊ทธ์ธ ๋ฐ ์์ ๋ก๊ทธ์ธ ๊ตฌํ
์ฝฉํ๋ (์ตํ๋น)
๋ก๊ทธ์ธ, ํ์๊ฐ์ ๊ธฐ๋ฅ
๋๊ธ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ
๊ฐ์ค์น ๊ธฐ๋ฐ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ
ํ์ (์ก์ฌ๋ฐฑ)
OIDC๋ฅผ ํ์ฉํ ์์ ๋ก๊ทธ์ธ๋น๋ฐ๋ฒํธ ์ํธํ
์ ํ๋ธ ํ๋ ์ด๋ฆฌ์คํธ ์ถ์ถ ๊ธฐ๋ฅ
Flyway ๋์ ๋ฐ CI
๋ธ๋์บฃ (์ก์ฐ์)
์ปค์ ๋ฐฉ์ ๋ฌดํ ๋๊ธ ์กฐํ API ๊ตฌํ
๊ฐ์ค์น ๊ธฐ๋ฐ ๋ฃธ ์ถ์ฒ API ๊ตฌํ
๋ฃธ ์คํฌ๋ฉ ๋ชฉ๋ก ์กฐํ API ๊ตฌํ
๋ฃธ ์คํฌ๋ฉ ์ถ๊ฐ ์ญ์ API ๊ตฌํ
Flyway๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์