์ฌ์ฉ์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ์ถ์ฒํ๋ ์ํผ ์ปจํ ์ธ ์๋น์ค ๐ต
์์ ํ์
- ์๋ก์ด ์์ ์ ์ฐพ๊ธฐ ์ํด ์๋๋ก ์ค์์ดํ ํด๋ณด์ธ์!
- ๋๊น์๋ ๋ถ๋๋ฌ์ด ์คํฌ๋กค๊ณผ ๋์์ ์ฌ์์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ํ์ํ ์ ์์ด์.
browse-cut.webm
์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ
- ์ธ์์ ๋ชจ๋ ์ฅ๋ฅด์์ ์ถ์ฒ๋๋ ์์ ์ ์ฆ๊ฒจ๋ณด์ธ์!
์คํฌ๋ฉ
- ํ์ํ๋ค ๋ฐ๊ฒฌํ ์ข์ ์์
์ ์คํฌ๋ฉํด์ ๋์ค์ ๋ ๋ค์ด๋ณด์ธ์!
scrap-cut.webm
๋๊ธ
- ๋ค๋ฅธ ์น๊ตฌ๋ค๊ณผ ์์ ์ ๋ํ ์๊ฐ์ ๋๋ ๋ณด์ธ์!
๊ธฐ์ ์คํ
- 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
- ์์ฒด ์๋ ์์กด ์ฃผ์
๋ฌธ์ ์
- ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ๋ฐ์์ ์ํ "์ซ์ด์" ์ ์ค์ฒ๋ฅผ ์ํด 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)
Github Wiki
- ํ๊ณ
- ํ๋ก์ ํธ ์ด์ ๋ฐ ๊ณํ
- ๊ฐ๋ฐ ๋ฌธ์
Notion
- ๋ฐ์ผ๋ฆฌ ๋ฏธํ
- ํ์๋ก
- ๊ธฐํ
- ์๋ฃ
- ๊ณ ๋ฏผํ๊ธฐ
- ํ ์ปจ๋ฒค์
Slack
- ์๋ฒ ์ฅ์ ์๋ฆผ
- ํ ๋ด ๊ณต์ง
ํ์ | ์ญํ |
---|---|
์ฝ๊ฑด (๊น๋์ฝ) | ์ด๊ธฐ ๊ธฐํ 4๋ฐฉํฅ ๋ทฐ ์ฌ์ฌ์ฉ ์คํฌ๋กค๋ทฐ RoomPager ๊ฐ๋ฐ Android WebView ์์ Youtube IFrame API๋ฅผ ์ด์ฉํ ์์ ์ฌ์ RoomPager์ YoutubePlayer๋ฅผ ์ด์ฉํ ๋ถ๋๋ฌ์ด ์ํผ ๊ฒฝํ ์ ๊ณต |
์ฐ๊ธฐ (๊น์ง์ฑ) | ๋ก๊ทธ์ธ, ํ์๊ฐ์ ๊ธฐ๋ฅ ๋ฃธ ์ถ์ฒ์ ์ํ ์ฌ์ฉ์์ ์ด๊ธฐ ์ฅ๋ฅด ์ทจํฅ ์ ํธ๋ ์ ๋ ฅ ์คํฌ๋ฉ ๊ธฐ๋ฅ ๋ฐ ์คํฌ๋ฉ๋ ๋ชฉ๋ก์ ๋ํ ์ ํ๋ธ ์ฌ์๋ชฉ๋ก ์ถ์ถ |
๋ฒ ๋ฆฌ (์ฐํ๊ฒฝ) | ViewPager2 ๋ฅผ ์ด์ฉํ ์ฑ ์ฌ์ฉ ๊ฐ์ด๋ ์ ๊ณต ์ถ์ฒ ์์ ์ ๋ํ ์ ๋ณด ํ์ ์ํ๋ ์์ ์ ์คํฌ๋ฉํ๊ณ ๋๊ธ ๋ฌ ์ ์๋ ๊ธฐ๋ฅ ๊ตฌํ |
๋ก์น (๋ฐ์ฑ์ฒ ) | ์์ ํ ๋น๋ฐ๋ฒํธ ์ ์ฅ์ ์ํด ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ์์ ํ DDL ๊ด๋ฆฌ๋ฅผ ์ํด DDL ๊ฒ์ฆ ์๋ํ ๊ตฌํ ํ์ ์ฉ ๋ฐ์ดํฐ ์์ง ํฌ๋กฌ ํ์ฅ ๊ฐ๋ฐ ์ง์ ์ฅ๋ฒฝ ๊ฐ์๋ฅผ ์ํด ๊ฒ์คํธ ๋ก๊ทธ์ธ ๋ฐ ์์ ๋ก๊ทธ์ธ ๊ตฌํ |
์ฝฉํ๋ (์ตํ๋น) | ๋ก๊ทธ์ธ, ํ์๊ฐ์ ๊ธฐ๋ฅ ๋๊ธ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ๊ฐ์ค์น ๊ธฐ๋ฐ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ |
ํ์ (์ก์ฌ๋ฐฑ) | OIDC๋ฅผ ํ์ฉํ ์์ ๋ก๊ทธ์ธ ๋น๋ฐ๋ฒํธ ์ํธํ ์ ํ๋ธ ํ๋ ์ด๋ฆฌ์คํธ ์ถ์ถ ๊ธฐ๋ฅ Flyway ๋์ ๋ฐ CI |
๋ธ๋์บฃ (์ก์ฐ์) |
์ปค์ ๋ฐฉ์ ๋ฌดํ ๋๊ธ ์กฐํ API ๊ตฌํ |