์ฃผ๋ณ์ ์๋ฌผ์ ์ดฌ์ํ๊ณ ์๋ณํ์ฌ ๋๋ง์ ์๋ฌผ ๋๊ฐ์ ๋ง๋ค๊ณ , ์๋ฌผ ์ง๋๋ฅผ ์น๊ตฌ๋ค๊ณผ ๊ณต์ ํ ์ ์๋ ์ฑ ์๋น์ค
- ์ฃผ๋ณ ์๋ฌผ์ ์ดฌ์ํด ๋๊ฐ์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
- ์๋ฌผ ๋๊ฐ ๋ฟ๋ง์๋๋ผ ์๋ฌผ ์ง๋์๋ ๋ฑ๋ก๋ฉ๋๋ค.
- ๋นํ์์ผ๋ก ๋คํธ์ํฌ ์์ด ์ด๋์๋ ์๋ฌผ์ ์ดฌ์ํด ๋๋ง์ ์๋ฌผ ๋๊ฐ์ ๋ง๋ค์ด๋ณด์ธ์~!
- ์ถ๊ฐ๋ก ๋ก๊ทธ์ธ์ ํ๋ฉด ์น๊ตฌ๋ค์ ์๋ฌผ ์ง๋๋ฅผ ํจ๊ป ๋ณผ ์ ์๋ต๋๋ค ๐ ํจ๊ป ์ฆ๊ฒจ๋ณด์๋ ๊ฒ๋ ์ถ์ฒ๋๋ฆฝ๋๋ค.
- ๐ธ ์๋ฌผ ์ดฌ์ : ์นด๋ฉ๋ผ๋ก ์ฃผ๋ณ์ ์๋ฌผ ์ดฌ์
- ๐ผ๏ธ ์๋ฌผ ๋๊ฐ ๋ฑ๋ก : ๋ผ๋ฒจ๋งํ์ฌ ๋๊ฐ์ ์ ์ฅ ๋ฐ ๋๊ฐ ํ์ธ
- ๐บ๏ธ ์๋ฌผ ์ง๋ ํ์ธ : ์๋ฌผ ๋๊ฐ์ ์์น ๋ณ๋ก ํ์๋๋ ์ง๋ ํ์ธ
- ๐คผ ์น๊ตฌ์ ์๋ฌผ ์ง๋ ๋ณด๊ธฐ : ๋ก๊ทธ์ธ ํ์ฌ ์น๊ตฌ ์ถ๊ฐํ ์น๊ตฌ๋ค์ ์๋ฌผ ์ง๋ ํจ๊ป ๋ณด๊ธฐ
Nature.Album.-.HD.mp4
๋ง์ดํ์ด์ง ๋ก๊ทธ์ธ ๋ฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ฒ๋ฆฌ
๋ง์ดํ์ด์ง ์น๊ตฌ ๊ธฐ๋ฅ
๋ถ์ผ | ๊ธฐ์ ์คํ |
---|---|
OS | Android |
Launguage | Kotlin |
UI | Compose |
Network | Retrofit |
Asynchronous | Coroutine , Flow |
image | Coil |
DI | Hilt |
Background | WorkManager |
Database | Room , FireStore |
Map | Naver Map |
Firebase | Firebase Storage , Firebase Cloud Messaging , Cloud Functions |
AI | Gemini , Green-Eye |
Tooling | Notion , Figma , Figjam , Github , Git , Zep |
๋๊ธฐํ๋ ๋ก๊ทธ์ธ ์ํ์์ ๋งค์ผ ์์ ์ WIFI ์ฐ๊ฒฐ ์ํ์์๋ง ์คํ์ด ๋ฉ๋๋ค.
๋๊ธฐํ๊ฐ ํ์ํ ์ํฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋นํ์์ผ๋ก ์ฌ์ฉํ๋ค ๋ก๊ทธ์ธํ๋ ๊ฒฝ์ฐ
- ๋คํธ์ํฌ ์์ด ์ฌ์ฉํ์ฌ ์๋ฒ์ ๋ก์ปฌ์ ๋ฐ์ดํฐ๊ฐ ์์ดํ ๊ฒฝ์ฐ
- ์ฑ์ ์ฌ์ค์นํ๊ฑฐ๋ ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ์ฌ ๋ก์ปฌ ๋ฐ์ดํฐ๊ฐ ๋ ์๊ฐ ๊ฒฝ์ฐ
- ๋คํธ์ํฌ๊ฐ ์๋ ์ํ์์ ๋๊ฐ์ ์ญ์ ๋๋ ์ถ๊ฐํ ๊ฒฝ์ฐ
๋ฐ๋ผ์ ์๋ฒ์ ๋ก์ปฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ ๋น๊ตํ์ฌ ์๋ฒ์ ํ์ํ ๋ฐ์ดํฐ, ๋ก์ปฌ์ ํ์ํ ๋ฐ์ดํฐ, ์์ดํ ๋ฐ์ดํฐ๋ก ๋ถ๋ฅํ ๋ค ์ ์ฅ ๋ฐ ์์ ์ด ์ด๋ฃจ์ด์ง๋๋ก ๊ตฌํํ์์ต๋๋ค.
- ๋ชจ๋ ๊ฐ์ ธ์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ๊ทธ๋งํผ ์ค๋๊ฑธ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
- ๋ํ ์ง๊ธ์
์๋ฒ์ ํ์ํ ๋ฐ์ดํฐ
,๋ก์ปฌ์ ํ์ํ ๋ฐ์ดํฐ
,์์ดํ ๋ฐ์ดํฐ
์ธ ๊ฐ์ง ๋ชจ๋ ๊ฐ๊ฐ ํ์ํ์ฌ ์ถ์ถํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ๋ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- ํ์ ๋ฐฉ๋ฒ ์ต์ ํ
- ํ์ฌ ํ์ ๋ฐฉ๋ฒ์ Filter์ none, any ํ์ฅ ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ์ด๋ for๋ฌธ์ผ๋ก ํ๋์ฉ ํ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ ๋ฒ ํ์ํ ๋๋ง๋ค O(N)์ ์๊ฐ ๋ณต์ก๋๊ฐ ์์๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ์ด์ง ํ์์ผ๋ก ํ์ํ์ฌ ํ์ ์๊ฐ์ ์ค์ด๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ >> ๋ค๋ง ํ์ฌ ๋ฐ์ดํฐ ๋ฆฌ์คํธ๋ ๊ฐ๊ฐ์ ๊ฐ์ฒด ํ์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ด ์ด๋ฅผ ์ด๋ป๊ฒ ์ด์ง ํ์์ผ๋ก ๊ตฌํํ ์ง ๊ณ ๋ฏผ์ด ํ์ํฉ๋๋ค.
- Local DB ์์ฑ ์ถ๊ฐ
- ์๋น์ค์ ํน์ฑ์ ์๋ฒ๋ ๋ก์ปฌ ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ต์ง๋ง ๋ก์ปฌ์ ์๋ฒ์ ์ ์ฅ ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ ํ ์ ์์ต๋๋ค. Local DB์ ์๋ฒ ์ ์ฅ ์ ๋ฌด์ ๋ํ ์์ฑ์ ์ถ๊ฐํ์ฌ ๋ฏธ๋ฑ๋ก ๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐ ๋จ์ถ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- ํ ๋ฒ์ ํ์์ผ๋ก ๋ฐ์ดํฐ ๋ถ๋ฅ
- ํ ๋ฒ์ ํ์์ผ๋ก
์๋ฒ์ ํ์ํ ๋ฐ์ดํฐ
,๋ก์ปฌ์ ํ์ํ ๋ฐ์ดํฐ
,์์ดํ ๋ฐ์ดํฐ
๋ฅผ ์ถ์ถ, ํ์ฌ ๊ฐ์ ํ์์ 3๋ฒ ๋ฐ๋ณตํ์ฌ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์๋๋ฐ ์ด๋ฅผ ํ ๋ฒ์ 3๊ฐ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ ์๊ฐ ๋จ์ถ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
๊ธฐ์กด ํ์ ์ปดํฌ์ ๋ธ์ด ๊ฐ์ง ์ํ๋ฅผ ํธ์ด์คํ ํจ์ผ๋ก์จ ๊ณต์ ํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ statelessํ ์ปดํฌ์ ๋ธ๋ก ๋ง๋ค์์ต๋๋ค.
ํธ์ด์คํ
๋ ์ํ๋ฅผ ํ์ ์ปดํฌ์ ๋ธ์๊ฒ ์ฃผ๊ธฐ ์ํด by remember
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ก ๊ฐ์ ์ ๊ทผํ์ฌ ๊ฐ ์์ฒด๋ฅผ ์ํ๋ฅผ ํ์๋กํ๋ ์ปดํฌ์ ๋ธ์๊ฒ ๋๊ฒจ์ฃผ์์ต๋๋ค.
ํ์ง๋ง ์ ์ด๋ฏธ์ง์ฒ๋ผ by remember
๋ฅผ ํตํด ๊ฐ ์์ฒด๋ฅผ ๋๊ฒจ์ค ๋ ์ํ๋ฅผ ๋์ด์ฌ๋ฆฐ ์์น๊น์ง ์ ๋ถ ๋ฆฌ์ปดํฌ์ง์
์ด ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํ์ง๋ง ๋ฐ๋๋ก = remember
๋ฅผ ์ฌ์ฉํด State
ํ์
์ ๋๊ฒจ์ฃผ์์ ๋, ์ค์ ์ํ๋ฅผ ์ด์ฉํ๋ ์ปดํฌ์ ๋ธ๋ง ๋ฆฌ์ปดํฌ์ง์
์ด ๋ฐ์ํ์ต๋๋ค.
๋ ์ ์ธ ๋ฐฉ์์ ์ด๋ค ์ฐจ์ด๊ฐ ์๊ธธ๋ ๋ฆฌ์ปดํฌ์ง์ ์ธก๋ฉด์์ ์ ํ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋์ง ์์๋ณด๊ธฐ ์ํด ๋ค์ด๊ฐ ๋ด๋ถ ์ฝ๋์ ์ค๋ช ์์ ์ ๋ต์ ์ฐพ์ ์ ์์์ต๋๋ค.
๋ด๋ถ ์ฝ๋์์๋ ์๋์ ๊ฐ์ ์ค๋ช ์ ํตํด ์๋ดํ๊ณ ์์์ต๋๋ค.
A mutable value holder where reads to the value property during the execution of a Composable function, the current RecomposeScope will be subscribed to changes of that value.
When the value property is written to and changed, a recomposition of any subscribed RecomposeScopes will be scheduled.
์ปดํฌ์ ๋ธ ํจ์๊ฐ ์คํ๋๋ ๋์ .value(getValue)
๋ฅผ ์ฝ์ผ๋ฉด ํ์ฌ ์คํ์ค์ธ ์ปดํฌ์ ๋ธ์ ํด๋น ์ํ์ ๋ณ๊ฒฝ์ฌํญ์ ๊ตฌ๋
(subscribed)ํ๋ค.
value
์์ฑ์ด ์์ฑ๋๊ณ ๋ณ๊ฒฝ๋๋ฉด ํด๋น ์ํ๋ฅผ ๊ตฌ๋
ํ ์ปดํฌ์ง์
์ ๋ฆฌ์ปดํฌ์ง์
์ ๋์์ด๋๋ค.
์ฆ, ์์ ์ปดํฌ์ ๋ธ์์ by remember
๋ฅผ ํตํด ๊ฐ์ ์ ๊ทผํ ๋๋ ๋ด๋ถ์ ์ผ๋ก getValue
๋ฅผ ํตํด value
์์ฑ์ ์ ๊ทผํ๊ธฐ์ ๋ฆฌ์ปดํฌ์ง์
์ด ๋์์ด ๋์๋ ๊ฒ์ด๊ณ , = remember
๋ฅผ ์ฌ์ฉํ์ฌ State
ํ์
์ ๋๊ฒจ์ฃผ์์ ๋๋ value
์์ฑ์ ์ ๊ทผํ ๊ฒ์ด ์๋๊ธฐ์ ๋ฆฌ์ปดํฌ์ง์
๋์์ด ๋์ง ์์๋ ๊ฒ์ด์์ต๋๋ค.
๋ฐ๋ผ์, ์ํ๋ฅผ ๋์ด์ฌ๋ฆฐ ์์น์ ์ปดํฌ์ ๋ธ์์๋ = remember
๋ฅผ ์ฌ์ฉํ๊ณ , ์ํ๋ฅผ ํ์๋กํ๋ ํ์ ์ปดํฌ์ ๋ธ๊น์ง State
ํ์
์ ๋๊ฒจ์ฃผ๋ ๊ฒ์ผ๋ก ๋ฆฌ์ปดํฌ์ง์
์ต์ ํ๋ฅผ ํ ์ ์์์ต๋๋ค.
FCM(Firebase Cloud Messaging)์ผ๋ก ์น๊ตฌ ์์ฒญ ์๋ฆผ์ ๊ตฌํํ๋ ค ํ์ผ๋, ์๋ฒ๊ฐ ํ์ํ๊ณ , ํ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ์๋ ์ํฉ์ด์๋ค.
- Firebase Cloud Functions ํ์ฉ
- Spring ์๋ฒ ๋์ Firebase Cloud Functions๋ก ์๋ฒ ์ญํ ๋์ฒด.
- Firestore ํธ๋ฆฌ๊ฑฐ(onCreate)๋ฅผ ํ์ฉํด ์น๊ตฌ ์์ฒญ ๋ฌธ์ ์์ฑ ์ FCM ์๋ฆผ ์ ์ก ๋ก์ง ๊ตฌํ.
- ๋ฌธ์ ํด๊ฒฐ
- Firebase ์ค์ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ฉฐ, ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ ์ข ๋ฃ ์ํ์์๋ ์ ์ ์๋ ํ์ธ.
- Firebase Functions์ Firestore ํธ๋ฆฌ๊ฑฐ๋ฅผ ํตํด ์น๊ตฌ ์์ฒญ ์๋ฆผ ์๋ ์ ์ก ์ฑ๊ณต.
- ๋ฐฑ์๋ ํ์ต์ ํตํด ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๋ก์ ๊ธฐ์ ์ ํ๊ณ๋ฅผ ๊ทน๋ณต.
- ๊ธฐ์ ๊ฒฝ๊ณ๋ฅผ ๋๋ ํ๋: ๋ฐฑ์๋ ๋ฌธ์ ๋ฅผ ์ง์ ํด๊ฒฐํ๋ฉฐ ๋์ ์ ์ ๊ณผ ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ์ ํค์.
- ๊ธฐ์ ํ์ฅ ๊ฒฝํ: Firebase Cloud Functions์ Firestore ํธ๋ฆฌ๊ฑฐ๋ฅผ ํ์ฉํด ํด๋ผ์ด์ธํธ-์๋ฒ ์ฐ๋ ์ดํด๋ ํฅ์.
- Marker์ ์์ด์ฝ์ ๋ทฐ๋ก ์์ฑํ ๋ attach๋ฅผ ํ์ง ์๊ณ ๋ฐ๋ก ๋นํธ๋งต์ผ๋ก ๋ณํํด์ ๋ด๋ถ์ ์ด๋ฏธ์ง ๋น๋๊ธฐ ๋ก๋ฉ์ด ๋์ํ์ง ์์.
- Compose์์ MapView์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํด์ผํจ.
- Marker - Coil ์ด๋ฏธ์ง ๋ก๋
- ๋ง์ปค์ ์์ด์ฝ์ผ๋ก ์ฌ์ฉํ ์ปค์คํ ๋ทฐ ์ ์.
- ์ปค์คํ ๋ทฐ์ uri๋ฅผ ์ค์ ํ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด coil๋ก ์ด๋ฏธ์ง ๋ก๋.
- ๋ง์ปค๋ฅผ invisible์ธ ์ํ๋ก ๋งต๋ทฐ์ add
- ImageView.load์ ์ด๋ฏธ์ง ๋ก๋ ์ํ ๋ฆฌ์ค๋์์ ๋ง์ปค์ ์์ด์ฝ์ ์ ๋ฐ์ดํธํ๋ ์ฝ๋ฐฑ ์คํ
- Compose-View ๋ผ์ดํ์ฌ์ดํด ๋๊ธฐํ
- DisposableEffect์ LifecycleObserver๋ฅผ ํ์ฉํด MapView์ Compose ์๋ช ์ฃผ๊ธฐ๋ฅผ ํตํฉ ๊ด๋ฆฌ.
- onDispose์์ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ
- Coil๋ก Marker์ ์ ์์ ์ผ๋ก ์ด๋ฏธ์ง ๋ก๋ฉ.
- ๋ง์ปค์ ์ด๋ฏธ์ง ๋ก๋ ์์, ์คํจ์ ์์ด์ฝ ๋ณ๊ฒฝ
- Compose์ MapView๋ฅผ ์์ ์ ์ผ๋ก ํตํฉ ๊ด๋ฆฌ.
- ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ์ดํด: Compose์ View์ ๋ ๋ฆฝ์ ๋ผ์ดํ์ฌ์ดํด์ ํตํฉ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ ํ์ต.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ต์ ํ: ์ ์ ์ธ UI์ ๋น๋๊ธฐ๋ก ๋์๋๋ UI์ ์ฐ๋๋ฐฉ๋ฒ ํ์ต.
- ํตํฉ ๊ด๋ฆฌ ๊ฒฝํ: Compose์ ๊ธฐ์กด View๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ธฐ์ ์ ์์ ๊ฐ ํ๋ณด.
Nature Album Wiki์์ ์ฐ๋ฆฌ์ ๋ชจ๋ ์ฌ์ ์ ํ์ธํ์ธ์!
์์ด๋์ด๋ถํฐ ๊ฐ๋ฐ, ๊ทธ๋ฆฌ๊ณ ํด๊ฒฐ ๊ณผ์ ๊น์ง, ๋ชจ๋ ์ด์ผ๊ธฐ๊ฐ ๋ด๊ฒจ ์์ต๋๋ค. ๊ถ๊ธํ์๋ค๋ฉด ์ง๊ธ ๋ฐ๋ก ํ์ธํด๋ณด์ธ์! ๐
์ ์ ์ง | ์ํ์ค | ๊น๋์ค | ๋ ธ์งํ | ๊น์ ํธ |