ํ๋ ์ด์คํ ์ด์ ์๋๋ก์ด๋ ์ฑ์ ๋ฐฐํฌํ๊ณ ์ด์ํ ๊ฒฝํ์ด ์์ต๋๋ค.
Jetpack Compose์ Coroutine์ ****๋ค๋ฃจ๋ ๊ฒ์ ์ข์ํ๋ฉฐ, ํ์ ์ฑ์ ๋์ด๋ ์ฑ ์ํคํ
์ฒ์ ๊ด์ฌ์ด ๋ง์ต๋๋ค. ํ์ฌ๋ ํ์ด๋น์ค์ ๊ทผ๋ฌดํ๋ฉฐ React Native ์ฑ์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค.
์ฐจํธ, ํด๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฐํ์ฌ ์คํ์์ค ์ ์ฅ์์ ๋ฐฐํฌํ ๊ฒฝํ์ด ์์ต๋๋ค. ๊ทธ ์ค ํ๋์ธ Time Chart๋ ์ข์์ 70๊ฐ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.
๐ป Works
ํ์ด๋น์ค
2023.12 ~ ํ์ฌ
- **๊ฒ์์ฌ๋ง ํ๋ฌ์ค ์ฑ(React Native, MAU 10๋ง, 10๊ฐ๊ตญ ์ง์) ์ ์ง๋ณด์ ๋ฐ ๋ ๊ฑฐ์ ๊ฐ์ **
- API ํธ์ถ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋๋ก ์์ ํ์ฌ ๋๋ฒ๊ทธ ๋ชจ๋ ๊ธฐ์ค Cold Start ์๋ 7.3์ด์์ 6์ด๋ก ๊ฐ์
- Axios, Zod๋ฅผ ๋์
ํ์ฌ HTTP ํต์ ์ฝ๋ ์ ์ง๋ณด์์ฑ ํฅ์ ๋ฐ ์์ ์ฑ ๊ฐ์
- Typescript any ํ์
์ ๊ฑฐ ๋ฐ Eslint ๋์
์ผ๋ก ์ฑ ์์ ์ฑ ๊ฐ์
- ์ฌ์ฉ์๊ฐ ํ๋ ์ด์คํ ์ด๋ก ๋ณด๊ณ ํ โ๋ณด์ค ์๋ฆผ์ด ๊ฐ๋์ฉ ์ธ๋ฆฌ์ง ์๋๋คโ๋ ์ด์ ํด๊ฒฐ
- ๋์ฆ๋ชจ๋๋ฅผ ๊ฐ์ ํ๋ ADB ๋ช
๋ น์ด์ ๋ฐฐํฐ๋ฆฌ ์ต์ ํ ์ต์
์ผ๋ก ์ด์ ์ฌํ
AlarmManager
์ ์๋ ์ต์
์ SET_ALARM_CLOCK
์ผ๋ก ์์ ํ์ฌ ํด๊ฒฐ
ํ์ด๋น์ค ์ธํด
2023.10.10 ~ 2023.12.01 (8์ฃผ)
- OTP ์ธ์ฆ ๊ธฐ๋ฅ Android ์ํ ์ฑ ๊ตฌํ
- Coroutine SharedFlow๋ก OTP ์ฝ๋ ๊ฐ 30์ด๋ง๋ค ๊ฐฑ์ ํ๋ ๋ก์ง ๊ตฌํ
- FCM ํธ์ ์๋ฆผ์ ์ด์ฉํ์ฌ ์ธ์ฆ ์์ฒญ์ด ์์ ๋ ์ฑ์ ๋ค๋ฅธ ์ฑ ์์ ํ์ํ๋ ๊ธฐ๋ฅ ๊ตฌํ
- ๊ฒ์์ฌ๋ง ํ๋ฌ์ค ์ฑ์ ์ฑํ
๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ณผ์
- WebSocket ์๋ฒ, API ์๋ฒ์ ๋คํธ์ํฌ ํต์
- ์คํ๋ผ์ธ ์ฐ์ (Offline-first) ๊ธฐ๋ฅ ๊ตฌํ
๐ป Projects
๊ณต๋ถํ๋ ๋๋ถ
์๊ฐ: ์บ ์ ์ผ๊ณ ๊ณต๋ถํ๋ ๋ชจ์ต์ ๊ณต์ ํ๋ฉฐ ๋ชฐ์
๋๋ฅผ ํฅ์ํ๋ ํ์ ํตํ ์๋น์ค
๋งํฌ: GitHub
- ์กธ์
์ํ 70ํ ์ค ์ฐ์์
- Compose 100% UI ๊ฐ๋ฐ
- ๋์์ธ ์์คํ
๋ชจ๋์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ ํฅ์ ๋ฐ ๊ฒฐํฉ๋ ๊ฐ์
- ์ํ ํธ์ด์คํ
์ ํตํด Stateless ์ปดํฌ์ ๋ธ ํจ์ ์์ฃผ๋ก ๊ตฌํํ์ฌ ์ฌ์ฌ์ฉ์ฑ ํฅ์
- UI State Holder ํจํด์ ๋์
ํ์ฌ ํ์ ํตํ UI ์ฝ๋ ๋ณต์ก๋ ๊ฐ์
- **๋ชจ๋ํ๋ฅผ ๋์
**ํ์ฌ ํ๋ก์ ํธ ๊ฒฐํฉ๋ ๊ฐ์ ๋ฐ ๋น๋ ์๋ ๊ฐ์
- ํ๋ก์ ํธ๋ฅผ app, feature, core ๋ชจ๋๋ก ๋ถ๋ฆฌ
- feature ๋ชจ๋์ ui, domain(optional), data ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ ํฅ์
- Kotlin๊ณผ Coroutine์ ํ์ฉํ์ฌ ํ์ ํตํ ์ฝ๋ ํ์ง ๊ฐ์
- ์ปดํ์ผ ํ์ ์์ ์ฑ์ ์ํด sealed class๋ก ์์ผ ์ด๋ฒคํธ ๊ฐ์ฒด ๊ตฌํ
- ViewModel์ด SocketService์ ์์ผ ์ด๋ฒคํธ Flow๋ฅผ ๊ตฌ๋
ํ๋ ๋ฐฉ์์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์์ผ ํต์ ์ฝ๋ ๋ถ๋ฆฌ
- ํ์
๋์์ด๋์ ํ์
ํ๋ฉฐ 1px ๋จ์๊น์ง ๋ฌธ์ ์์ด ๊ตฌํํ๊ธฐ ์ํด ๋
ธ๋ ฅ
Android
Kotlin
Compose
Coroutine
MVI
Hilt
SocketIO
Retrofit2
OkHttp3
JUnit4
POCS ๋ธ๋ก๊ทธ ์ฑ
์๊ฐ: ํ์ฑ๋ํ๊ต POCS ์๋ชจ์ ๋ธ๋ก๊ทธ Android ์ฑ
๋งํฌ: GitHub, Play Store
- Retrofit๊ณผ Coroutine์ ์ด์ฉํ์ฌ ๋น๋๊ธฐ HTTP ํต์ ์ฝ๋ ๊ตฌํ
- Coroutine async ํจ์๋ฅผ ์ด์ฉํ์ฌ API ์๋ต ์๊ฐ ๋จ์ถ
- OkHttp์ Interceptor๋ก ์์ธ์ค ํ ํฐ ๊ด๋ฆฌ
- ๋ชจ๋ฐ์ผ์์ ํธ๋ฆฌํ๊ฒย ๋งํฌ๋ค์ด ํ์์ ๊ธ ์์ฑ์ ๋์์ฃผ๋ ๋งํฌ๋ค์ด ํด๋ฐ **๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ ๋ฐ maven central์ ๋ฐฐํฌ**
- GitHub Actions๋ก CI/CD๋ฅผ ๊ตฌ์ถํ์ฌ ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๋ ํ๊ฒฝ ์ ๊ณต
- ํจ๊ป ์ฑ์ฅํ๊ธฐ ์ํด ์ ๊ทน์ ์ผ๋ก ์ฝ๋ ๋ฆฌ๋ทฐ์ ํ์ด ํ๋ก๊ทธ๋๋ฐ ์งํ
Android
Kotlin
Coroutine
MVVM
Hilt
Retrofit2
OkHttp3
ViewBinding
JUnit4
Esspresso
ํ์ฑ๋ํ๊ต ๊ณต์ง์ฌํญ ์ฑ
์๊ฐ: ๋ชจ๋ฐ์ผ์์ ํธ๋ฆฌํ๊ฒ ํ์ฑ๋ํ๊ต ๊ณต์ง์ฌํญ์ ์ด๋ํ๋ ์ฑ
๋งํฌ: GitHub, Play Store
- ํค์๋๋ฅผ ํฌํจํ ๊ณต์ง๊ฐ ์๋ก ๊ฒ์๋๋ฉด ์๋ฆผ์ ์ ์กํ๋ ๊ธฐ๋ฅ ๊ตฌํ
- ์คํฌ๋ํ ์๋ฒ๊ฐ 10๋ถ๋ง๋ค ํ๊ต ๊ณต์ง์ฌํญ ๋ชฉ๋ก ํ์ธ
- ์๋ก์ด ๊ณต์ง์ฌํญ์ด ๋ฑ๋ก๋ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ค์ ํค์๋๋ฅผ ๋น๊ตํ์ฌ FCM ํ ํฝ๊ธฐ๋ฐ push ์๋ฆผ ์ ์ก
- MVVM ํจํด์ ๋์
ํ์ฌ ๋ทฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌ
Android
Kotlin
Coroutine
MVVM
Hilt
Retrofit2
OkHttp3
ViewBinding
JUnit4
๋ญ๋จน์๊น ์ฑ
์๊ฐ: ํ์ฌ ์์น ๊ธฐ๋ฐ ์ฃผ๋ณ ์๋น ์๋์ปต, ๋๋ค ์ถ์ฒ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ฑ
๋งํฌ: Play Store
-
Naver Map SDK๋ฅผ ์ด์ฉํ์ฌ ์๋น ์ถ์ฒ ๋ฐ์ ์์น ์ ํ ๊ธฐ๋ฅ ๊ตฌํ
-
Kakao ๊ฒ์ API์์ ์๋น ๊ฒ์ ๊ฒฐ๊ณผ ์์ ์ด๋ฏธ์ง๊ฐ ์๋ ๊ฒฐ๊ณผ๋ค์ด ๋ง์ด ํฌํจ๋จ
โ 5,000์ฅ์ ์์ ์ฌ์ง์ผ๋ก Tensorflow Lite ๋ชจ๋ธ์ ๋ง๋ค์ด ์ด๋ฏธ์ง๋ฅผ [์์/์์์๋]์ผ๋ก ๋ถ๋ฅ
โ Dart Isolate๋ก ์ด๋ฏธ์ง ๋ถ๋ฅ๋ฅผ ๋ณ๋ ฌ ์ํํ์ฌ ์ํ์๋ ๋จ์ถ
โ โ์์ ์๋โ ์ฌ์ง์ ์ ์ธํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์
-
Flutter
Dart
Provider
Tensorflow Lite
Firebase
๊ฟ๋ฐค ์ฑ
์๊ฐ: ๋ ๋์ ์๋ฉด์ ์ํ ๊ฑด๊ฐ ์ฑ(๋ณ์ 4.9์ , ๋ค์ด๋ก๋ 8์ฒํ ์ด์)
๋งํฌ: Play Store
- Android์์ ๋์ํ๋ Flutter ์๋ ์ฑ์ ๊ฐ๋ฐ
- ์ฌ์ฉ์๊ฐ ์๊ตฌํ ๊ธฐ๋ฅ(ex: ์๋์์ ์ฌ์ฉ์ ์์
์ผ๋ก ์ค์ ํ๋ ๊ธฐ๋ฅ, ์๋ฉด ์๋์ ์ทจ์นจ ์๋ ๋นํ์ฑํ ๊ธฐ๋ฅ ๋ฑ)์ ์ถ๊ฐํ๋ฉฐ ์ง์์ ์ผ๋ก ์ฑ์ ์ ์ง๋ณด์ํ ๊ฒฝํ
- ์๋ฉด ์๊ฐ์ ๋ณด์ด๊ธฐ ์ํ ์๊ฐ ์ฐจํธ๋ฅผ canvas๋ก ****๊ฐ๋ฐํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์คํ ์์ค๋ก ๋ฐฐํฌ
Flutter
Dart
Provider
Android
Kotlin
Firebase
โ๏ธ Open Sources
GitHub
์ฌ์ฉ์๊ฐ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ๊ธ์ ์์ฑํ ๋ ์ฝ๊ฒ ๋งํฌ๋ค์ด ํ๊ทธ๋ฅผ ์
๋ ฅํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์๋ชจ์ ์ปค๋ฎค๋ํฐ ์ฑ์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๋ฐ
- Unit ํ
์คํธ๋ฅผ ์์ฑํ์ฌ ์์ ์ฑ ๊ฒ์ฆ ๋ฐ Parameterized๋ก ํ
์คํธ ์ฝ๋ ๊ฐ์
Android
Kotlin
Compose
JUnit4