๐ ๋ชฉ์ฐจ
์๋๋ก์ด๋ ์คํ์์ค ์ฑ์ ๋ถ์ํ๋ ์๋ฆฌ์ฆ๋ ๊ฐ๋ฐ์๋ ์ ๋ฌธ์ ๋ชจ๋์๊ฒ ์ ์ตํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์. ์คํ์์ค์ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ฉด ๊ธฐ์ ์ ์ธ ์ง์์ ๋ฌผ๋ก ์ค๋ฌด์์ ํ์ํ ๊ตฌ์กฐํ๋ ์ฌ๊ณ ๋ ฅ๋ ํค์ธ ์ ์๋ต๋๋ค. ์์ฆ์ฒ๋ผ ๋ชจ๋ฐ์ผ ์ฑ ์์ฅ์ด ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๋ ์๋์๋ ์ค์ง์ ์ด๊ณ ๊ตฌ์ฒด์ ์ธ ์์ค ๋ถ์์ด ๊ผญ ํ์ํ์ฃ .
์ด๋ฒ ์๋ฆฌ์ฆ์์๋ ๊นํ๋ธ์ ๊ณต๊ฐ๋ ์ธ๊ธฐ ์๋๋ก์ด๋ ์ฑ๋ค์ ์ ์ ํด ๊ตฌ์กฐ, ๊ธฐ๋ฅ, UI/UX, ๊ธฐ์ ์คํ ๋ฑ์ ๊ผผ๊ผผํ๊ฒ ํด๋ถํด๋ณผ ๊ฑฐ์์. ์ ๊ฐ ์๊ฐํ์ ๋ ์ด๋ฐ ์ค์ ๋ถ์์ ์ทจ์ ์ค๋น, ํฌํธํด๋ฆฌ์ค ์ ์, ์ค๋ฌด ์ญ๋ ๊ฐํ์๋ ์ ๋ง ํฐ ๋์์ด ๋๋๋ผ๊ณ ์. ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐ๋ผ์ค๋ฉด ๋ถ๋ช ์ฑ์ฅํ๋ ์์ ์ ๋ณด๊ฒ ๋ ๊ฑฐ์์! ๐
์๋๋ก์ด๋ ์คํ์์ค๋?
์๋๋ก์ด๋ ์คํ์์ค ํ๋ก์ ํธ(AOSP)๋ ๊ตฌ๊ธ์ด ๋ง๋ ์๋๋ก์ด๋ ์ด์์ฒด์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ ๊ทผํ๊ณ ์์ ํ ์ ์๋๋ก ์ ๊ณต๋๋ ํ๋ซํผ์ด์์. ์ ์ธ๊ณ ์๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ด ์คํ์์ค ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ์ฑ์ ๋ง๋ค๊ณ ๊ณต์ ํ๊ณ ์์ด์.
์ด๋ฐ ์คํ์์ค ์ฑ๋ค์ ๊นํ๋ธ(GitHub) ๊ฐ์ ์ ์ฅ์์ ๊ณต๊ฐ๋์ด ์์ด ๋๊ตฌ๋ ๋ค์ด๋ก๋ํ๊ณ ๋ถ์ํ ์ ์๋ต๋๋ค. ํนํ ์ต๊ทผ์๋ MVP, MVVM, Clean Architecture ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋์ ํ ์คํ์์ค ์ฑ๋ค์ด ๋ง์์ง๊ณ ์์ด์. ์ด ๊ตฌ์กฐ๋ฅผ ํตํด ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๊ณ ํ ์คํธ ์์ฑ๋ ํจ์ฌ ์ฉ์ดํด์ง๋ต๋๋ค.
์คํ์์ค ์ฑ์ ๊ฐ์ธ ํ์ต๋ฟ ์๋๋ผ ํ ํ๋ก์ ํธ, ํด๋ผ์ด์ธํธ ํ๋ก์ ํธ, ์คํํธ์ ํ๋กํ ํ์ ์ ์์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ๊ณณ์์ ํ์ฉ๋๊ณ ์์ด์. ์ฝ๋๋ฅผ ๋จ์ํ ‘์ฝ๋ ๊ฒ’์ ๋์ด์ ‘์ดํดํ๊ณ ๋ค์ ์ ์ฉํ๋ ๊ฒ’์ด ์ ๋ง ์ค์ํ์ฃ .
์๋๋ก์ด๋๋ ์์ ๋ก์ด ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํด์, ๋ค์ํ ๋์์ธ๊ณผ UX ๊ตฌํ์ด ๊ฐ๋ฅํ ์ฅ์ ๋ ๊ฐ์ง๊ณ ์์ด์. ๋ฐ๋ผ์ ์คํ์์ค๋ฅผ ํตํด ์ด๋ค ๋ฐฉ์์ผ๋ก UI์ ๊ธฐ๋ฅ์ด ์ฐ๊ฒฐ๋๋์ง๋ ๋ฐฐ์๋ณผ ์ ์์ด์.
์ด ์๋ฆฌ์ฆ์์๋ ๋จ์ํ ์ฝ๋๋ฅผ ๋์ดํ๋ ๊ฒ ์๋๋ผ, ๊ตฌ์กฐ์ ์ค๊ณ ์๋, ๊ฐ๋ฐ์์ ๊ณ ๋ฏผ๊น์ง ํด์ํ๋ ๋ฐ ์ด์ ์ ๋ง์ถ ๊ฑฐ์์. ๊น์ด ์๋ ๋ถ์์ ํตํด ์ค๋ ฅ์ ์ ๊ทธ๋ ์ด๋ํด๋ณผ๊น์?
๐ฑ ์คํ์์ค ๊ธฐ๋ฐ ์๋๋ก์ด๋ ์ฑ ์์ ๐งฉ
์ฑ ์ด๋ฆ | ์ฃผ์ ๊ธฐ๋ฅ | ๊ธฐ์ ์คํ |
---|---|---|
Signal | ๋ณด์ ๋ฉ์ ์ | Kotlin, Jetpack, Protobuf |
Amaze File Manager | ํ์ผ ํ์๊ธฐ | Java, MVVM, Material Design |
Tusky | ๋ง์คํ ๋ ํด๋ผ์ด์ธํธ | Kotlin, Room, Retrofit |
๋ถ์ ๋์ ์ฑ ์ ์ ๊ธฐ์ค
์๋๋ก์ด๋ ์คํ์์ค ์ฑ์ ๋ถ์ํ๊ธฐ ์ํด์ ๋ฌด์์ ๊ณ ๋ฅด๋ ๊ฒ๋ณด๋ค ๋ช ํํ ๊ธฐ์ค์ด ํ์ํด์. ๊ทธ๋์ผ ์๊ฐ ๋ญ๋น ์์ด ๊ตฌ์กฐ์ ํจํด์ ํจ์จ์ ์ผ๋ก ํ์ ํ ์ ์๋ต๋๋ค. ์ฐ์ ๊ฐ์ฅ ์ค์ํ ๊ธฐ์ค์ ‘์ต์ ๊ธฐ์ ์คํ’์ ์ฌ์ฉํ๋ ์ฑ์ธ์ง ์ฌ๋ถ์์. ์ฝํ๋ฆฐ, Jetpack Compose, Hilt, Coroutine, MVVM ๊ตฌ์กฐ ๋ฑ์ด ํฌํจ๋ ์ฑ์ ์ฐ์ ์ ์ ํ์ด์.
๋ ๋ฒ์งธ ๊ธฐ์ค์ '์ ์ง๋ณด์ ์ํ'์์. ์ต๊ทผ๊น์ง ์ปค๋ฐ์ด ํ๋ฐํ๊ฒ ์ด๋ฃจ์ด์ง๊ณ ์๋์ง๋ฅผ ๋ด์ผ ์ค๋ฌด์์ ์ฐธ๊ณ ํ๊ธฐ ์ข์์. ์ค๋๋ ์คํ์์ค๋ ๊ตฌ์ API๋ฅผ ์ฌ์ฉํ ์๋ ์์ด์ ํ์ต์ฉ์ผ๋ก๋ ์ ํฉํ์ง ์๊ฑฐ๋ ์. ๊ทธ๋์ ์ปค๋ฐ ๋ ์ง, ์ด์ ๊ด๋ฆฌ ์ํ, ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ๋ฐ์ ๋ฑ์ ์ข ํฉ์ ์ผ๋ก ๊ฒํ ํ์ด์.
์ธ ๋ฒ์งธ ๊ธฐ์ค์ ‘์ค์ฉ์ฑ’์ด์์. ๋จ์ํ ์์ ์ฑ๋ณด๋ค ์ค์ ์ฌ์ฉ์๊ฐ ๋ง์ ๊ธฐ๋ฅ ์ค์ฌ ์ฑ์ ๋ถ์ํด์ผ ์ค์ ๊ฐ๋ฐ์ ๋์์ด ๋์ฃ . ์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ ์ฑ, ๋ด์ค ์ฑ, ๋ ์จ ์ฑ, ๋ฉ์์ง ์ฑ์ฒ๋ผ ์ผ์์์ ์์ฃผ ์ฐ์ด๋ ์ฑ์ ์ค์ฌ์ผ๋ก ๊ณจ๋์ด์. ์ด๋ฐ ์ฑ๋ค์ ํ๋ฉด ๊ตฌ์ฑ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฌ์ฉ์ ์ธํฐ๋์ ๋ฑ์ ๋ค์ํ ์์๊ฐ ๋ค์ด๊ฐ ์์ด์ ๋ฐฐ์ธ ๊ฒ ๋ง์์.
๋ค ๋ฒ์งธ๋ ์คํ์์ค ๋ผ์ด์ ์ค์์. ๋ถ์ํ๊ณ ๋์ค์ ์ฐธ๊ณ ํ๊ฑฐ๋ ๋ณํํด์ ์ฌ์ฉํ ์๋ ์์ผ๋๊น, ๋ฐ๋์ Apache 2.0, MIT, GPL์ฒ๋ผ ๋ช ํํ ๋ผ์ด์ ์ค๋ฅผ ๊ฐ์ถ ์ฑ์ ์ค์ฌ์ผ๋ก ์ ๋ณํ์ด์. ํนํ Apache๋ MIT๋ ์์ ์ฉ์ผ๋ก๋ ์์ ๋กญ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ ์ฐธ๊ณ ํ ๋ ๋ถ๋ด์ด ์ ์ด์.
๋ง์ง๋ง์ผ๋ก๋ ‘๊ตฌ์กฐํ๋ ์ฝ๋ ์ฌ๋ถ’์์. ์๋ฌด๋ฆฌ ๊ธฐ๋ฅ์ด ์ข์๋ ์ฝ๋๊ฐ ๋์กํ๊ฑฐ๋ ์ฃผ์์ด ์์ผ๋ฉด ๋ถ์์ด ์ด๋ ต์์์. ๊ทธ๋์ ์ต๋ํ ViewModel, Repository, UseCase ๋ฑ์ ๊ณ์ธต์ด ์ ๋๋ ์ง ์ฑ์ ์ฐ์ ์ ์ผ๋ก ๊ณจ๋์ด์. ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์ค๋ฌด์์ ์ด๋ป๊ฒ ์ค๊ณํด์ผ ํ ์ง๋ ๊ฐ์ด ์กํ๊ฒ ๋๊ฑฐ๋ ์.
๐ง ์ฑ ์ ์ ๊ธฐ์ค ์์ฝํ ๐
์ ์ ๊ธฐ์ค | ์ค๋ช |
---|---|
์ต์ ๊ธฐ์ ์คํ | ์ฝํ๋ฆฐ, Compose, MVVM ๋ฑ ์ฌ์ฉ |
์ ์ง๋ณด์ ํ๋ฐ | ์ต๊ทผ ์ปค๋ฐ๊ณผ ์ด์ ๊ด๋ฆฌ ํ์ธ |
์ค์ฉ์ฑ ์ค์ฌ | ์ค์ ์ฌ์ฉ์ ๊ธฐ๋ฐ ์ฑ ์ค์ฌ |
์คํ์์ค ๋ผ์ด์ ์ค | Apache, MIT, GPL ๋ฑ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ |
๊ตฌ์กฐํ๋ ์ฝ๋ | ๊ณ์ธตํ๊ฐ ์ ๋์ด ์์ด์ผ ํจ |
์ฑ ๊ตฌ์กฐ์ ๊ธฐ์ ์คํ ๋ถ์
์คํ์์ค ์๋๋ก์ด๋ ์ฑ์ ํ์ง์ ๊ฒฐ๊ตญ ๊ตฌ์กฐ์ ๊ธฐ์ ์คํ์์ ๊ฒฐ์ ๋ผ์. ๋จ์ํ ์๋ํ๋ ์ฝ๋๋ณด๋ค ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์ค๊ณ๊ฐ ์ค์ํ์ฃ . ์ต๊ทผ ๋ง์ด ์ฌ์ฉ๋๋ ์ํคํ ์ฒ๋ MVVM(Model-View-ViewModel)์ด๋ฉฐ, ์ด ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ ์ํ ๊ด๋ฆฌ์ ๊ฐ๋ ฅํ ์ฅ์ ์ ๋ณด์ฌ์ค์.
์๋ฅผ ๋ค์ด, View๋ UI ์ฒ๋ฆฌ๋ง ๋ด๋นํ๊ณ ViewModel์ด ๋ก์ง๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์. ์ด ๊ณผ์ ์์ LiveData ๋๋ StateFlow๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ๋ณํ๋ฅผ UI์ ๋ฐ์ํ์ฃ . ์ด๋ฐ ๊ตฌ์กฐ ๋๋ถ์ ์ฝ๋์ ์์กด์ฑ์ด ์ค์ด๋ค๊ณ ํ ์คํธ๊ฐ ์ฌ์์ง๋ต๋๋ค. ๋จ์ ํ ์คํธ๋ UI ํ ์คํธ๋ ๋ช ํํ๊ฒ ๋๋ ์ ์์ฑํ ์ ์์ด์.
๊ทธ ์ธ์๋ ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ ์ฑ์ UseCase ๊ณ์ธต์ ๋์ ํด์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํด์. ์ด๋ ๊ฒ ํ๋ฉด UI๊ฐ ๋ณ๊ฒฝ๋ผ๋ ํต์ฌ ๋ก์ง์ด ์ํฅ์ ๋ฐ์ง ์์์. ์ด ๊ตฌ์กฐ๋ ๋๊ท๋ชจ ์ฑ์์๋ ์ฝ๋ ์ ์ง๊ฐ ์ฌ์ด ์ด์ ์ค ํ๋์์. ๊ฐ๋ฐ์๊ฐ ์ฌ๋ฌ ๋ช ์ธ ํ ํ๋ก์ ํธ์์๋ ์์ ์ ์ธ ๊ตฌ์กฐ์ฃ .
๊ธฐ์ ์คํ์ผ๋ก๋ Jetpack Compose๊ฐ ์ ์ ๋ณดํธํ๋๊ณ ์์ด์. UI ์ ์ธ ๋ฐฉ์์ด ๊ฐ๋จํ๊ณ ์ฝ๋๋๋ ์ค์ด๋๋ ์ฅ์ ์ด ์์ด์ ๋ง์ ์ต์ ์คํ์์ค ์ฑ๋ค์ด Compose๋ก ์ ํ ์ค์ด์์. ๋ DI(Dependency Injection)๋ Hilt๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, Retrofit์ผ๋ก API ํต์ , Room์ผ๋ก ๋ก์ปฌ ๋ฐ์ดํฐ ์ ์ฅ์ ์ฒ๋ฆฌํด์.
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์ฝ๋ฃจํด(Coroutine)์ด ๋์ธ์์. ์ด์ ์๋ RxJava๊ฐ ์ฃผ๋ฅ์์ง๋ง, ์ต๊ทผ์ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ฑ๋ฅ ๋ฉด์์ ์ฝ๋ฃจํด์ด ์ ํธ๋๊ณ ์์ด์. ViewModelScope์ lifecycleScope๋ก UI ์๋ช ์ฃผ๊ธฐ์ ๋ง์ถ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ต๋๋ค. ์ด๋ฐ ํ๋์ ์ธ ๊ธฐ์ ์กฐํฉ์ด ์ฑ์ ํจ์ฌ ์ค๋งํธํ๊ฒ ๋ง๋ค์ด์ค์.
๐ ๏ธ ์ฃผ์ ๊ธฐ์ ์คํ ์ ๋ฆฌํ โ๏ธ
๊ธฐ์ ์์ | ์ฌ์ฉ ๋ชฉ์ | ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
---|---|---|
UI ๊ตฌ์ฑ | ๋ชจ๋ UI ์ ์ธ ๋ฐฉ์ | Jetpack Compose |
๋น๋๊ธฐ ์ฒ๋ฆฌ | ๋คํธ์ํฌ, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ | Kotlin Coroutine |
DI | ๊ฐ์ฒด ์ฃผ์ ์๋ํ | Hilt |
API ํต์ | ์๋ฒ์ ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๊ธฐ | Retrofit |
๋ก์ปฌ DB | ๊ธฐ๊ธฐ ๋ด๋ถ ๋ฐ์ดํฐ ์ ์ฅ | Room |
UI/UX ๊ตฌ์ฑ ์์ ํด๋ถ
UI/UX๋ ์ฌ์ฉ์๊ฐ ์ฑ์ ๊ฒฝํํ๋ ์ฒซ์ธ์์ ๊ฒฐ์ ํด์. ์๋ฌด๋ฆฌ ๊ธฐ๋ฅ์ด ์ข์๋ ๋์์ธ์ด ๋ณต์กํ๊ฑฐ๋ ๋ถํธํ๋ฉด ๊ธ๋ฐฉ ์ฌ์ฉ์๊ฐ ์ดํํ์ฃ . ์คํ์์ค ์ฑ ๋ถ์์์๋ UI/UX๋ ๊ฐ์ฅ ์ค์ํ ํํธ ์ค ํ๋์์. ํนํ ์์ฆ์ Material You ๋์์ธ์ด๋ ๋คํฌ ๋ชจ๋ ์ง์์ด ๊ธฐ๋ณธ์ฒ๋ผ ์ฌ๊ฒจ์ง๊ธฐ ๋๋ฌธ์ ์ ๊ฒฝ ์จ์ผ ํ ๋ถ๋ถ์ด ๋ง์์.
Jetpack Compose๋ฅผ ํ์ฉํ UI ์ค๊ณ๋ ์ฝ๋๋์ ์ค์ด๋ฉด์๋ ์ ์ฐํ๊ฒ UI๋ฅผ ๊ทธ๋ฆด ์ ์๊ฒ ํด์ค์. Composable ํจ์๋ก ๋ ์ด์์์ ๊ตฌ์ฑํ๊ณ ์ํ์ ๋ฐ๋ผ UI๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ๊ตฌ์กฐ๋ ์ ๋ง ํจ์จ์ ์ด์์. ๊ธฐ์กด XML ๋ฐฉ์๋ณด๋ค ๋๋ฒ๊น ๋ ์ฝ๊ณ ์ ์ง๋ณด์๋ ํจ์ฌ ํธํ๋ต๋๋ค.
UX ์ธก๋ฉด์์๋ ํ์ ๊ตฌ์กฐ๊ฐ ๋ช ํํ๊ณ , ํผ๋๋ฐฑ์ด ์ฆ๊ฐ์ ์ผ๋ก ์ ๊ณต๋๋์ง๊ฐ ํต์ฌ์ด์์. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์ ๋๋ฉ์ด์ , ๋ก๋ฉ ์คํผ๋, ์ค๋ต๋ฐ ๋ฉ์์ง ๊ฐ์ ํผ๋๋ฐฑ ์์๊ฐ ์ ์๋ํด์ผ ํด์. ์ด๋ฐ ์์ ํ๋ํ๋๊ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ํ์ง์ ์ข์ฐํ์ฃ .
์คํ์์ค ์ฑ ์ค์์๋ ํ๋จ ๋ด๋น๊ฒ์ด์ ๋ฐ๋ฅผ ์ด์ฉํ ๊ตฌ์กฐ๊ฐ ๊ฐ์ฅ ํํ์ด์. ์ด๋ ์ฌ์ฉ์๊ฐ ์์ฝ๊ฒ ์ฃผ์ ๊ธฐ๋ฅ์ ํ์ํ ์ ์๋๋ก ๋์์ฃผ๋ ์ข์ ๋ฐฉ๋ฒ์ด์์. ๋ ๋คํฌ๋ชจ๋๋ฅผ ์ ์ฉํ ์ฑ๋ค์ Theme์ ๋ฐ๋ผ ์๋์ผ๋ก ์์์ด ๋ณํ๋๋ก ์ค๊ณ๋์ด ์์ด ์ฌ์ฉ์ ๋ง์ถคํ UI ๊ตฌํ์๋ ํ์ํด์.
์ ๋๋ฉ์ด์ ๊ณผ ๋ง์ดํฌ๋ก ์ธํฐ๋์ ๋ ์์ฆ์ ์ค์ํ UX ์์๋ก ๋ ์ค๋ฅด๊ณ ์์ด์. ์คํ์์ค ์ฑ ์ค ์ผ๋ถ๋ Lottie๋ฅผ ์ด์ฉํด ๋งค๋๋ฌ์ด ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๊ณ ์์์ด์. ์ด๋ฐ ๋ํ ์ผ์ ์ฑ์ ์์ฑ๋๋ฅผ ํ์ธต ๋์ฌ์ฃผ๊ณ , ์ฌ์ฉ์์๊ฒ ์ฆ๊ฑฐ์์ ์ค์. ๐
๐จ UI/UX ๋์์ธ ์์ ๋น๊ต ํ ๐ฑ
์์ | ๊ธฐ๋ฅ ์ค๋ช | ์ ์ฉ ์ฌ๋ถ |
---|---|---|
๋คํฌ ๋ชจ๋ ์ง์ | ์์คํ ํ ๋ง์ ๋ฐ๋ผ UI ์ ํ | โ ๋๋ถ๋ถ ์ ์ฉ |
ํ๋จ ๋ด๋น๊ฒ์ด์ | ๋น ๋ฅธ ๊ธฐ๋ฅ ์ ํ ๊ฐ๋ฅ | โ ์ผ๋ฐ์ |
Lottie ์ ๋๋ฉ์ด์ | ๊ฐ๊ฐ์ ์ธ ์ ๋๋ฉ์ด์ ํจ๊ณผ | โ ์ผ๋ถ ์ ์ฉ |
Snackbar | ์ฆ๊ฐ์ ์ธ ์ฌ์ฉ์ ํผ๋๋ฐฑ | โ ์ ๊ทน ์ฌ์ฉ |
Material 3 | ์ต์ UI ๊ฐ์ด๋๋ผ์ธ ๋ฐ์ | โ ํ์ฐ ์ค |
ํต์ฌ ๊ธฐ๋ฅ๊ณผ ์ฝ๋ ๋ฆฌ๋ทฐ
์๋๋ก์ด๋ ์คํ์์ค ์ฑ์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๋ญ๋ ๋ญ๋ ํด๋ '๊ธฐ๋ฅ'์ด์์. ์ฌ์ฉ์์๊ฒ ์ด๋ค ๊ฐ์น๋ฅผ ์ค ์ ์๋๋๊ฐ ์ฑ์ ์๋ช ์ด๋๊น์. ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ค๊ณํ๊ณ , ์ด๋ค ํ๋ฆ์ผ๋ก ์ฐ๊ฒฐํ๋์ง๋ฅผ ๋ณด๋ฉด ๊ฐ๋ฐ์์ ์ฌ๊ณ ๋ฐฉ์๊น์ง ์ฝ์ ์ ์์ด์. ์ด๋ฒ ์น์ ์์๋ ํต์ฌ ๊ธฐ๋ฅ ๋ช ๊ฐ์ง๋ฅผ ์์๋ก ์ก๊ณ ์ง์ ์ฝ๋๋ฅผ ํจ๊ป ๋ณด๋ฉด์ ๋ฆฌ๋ทฐํด๋ณผ๊ฒ์.
์๋ฅผ ๋ค์ด ๋ฉ๋ชจ ์ฑ์ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ '๋ฉ๋ชจ ์์ฑ', 'ํธ์ง', '์ญ์ '์์. ์ด ๊ธฐ๋ฅ๋ค์ ๋๋ถ๋ถ MVVM ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ณ ์์๊ณ , UI ์ด๋ฒคํธ๋ ViewModel์ ํตํด ์ฒ๋ฆฌ๋๊ณ ์์์ด์. ViewModel์์ Room DB๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ ์ ์ฅํ๊ฑฐ๋ ์์ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ LiveData๋ StateFlow๋ก UI์ ๋ฐ์ํ๋ ์์ด์์.
API ํต์ ์ด ํ์ํ ๊ธฐ๋ฅ๋ค์ Retrofit ์ธํฐํ์ด์ค๋ก ๊ตฌ์ฑ๋์ด ์์๊ณ , Repository ํจํด์ ํตํด ์บก์ํ๋ ๊ตฌ์กฐ๊ฐ ๋๋ถ๋ถ์ด์์ด์. ์๋ฅผ ๋ค์ด ๋ด์ค ์ฑ์์๋ ๊ธฐ์ฌ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ๋ Repository์์ suspend ํจ์๋ก API๋ฅผ ํธ์ถํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ViewModel์ด ๋ฐ์์ UI์ ๋ฟ๋ฆฌ๋ ๊ตฌ์กฐ๋ก ๋์ด ์์์ด์. ๊น๋ํ๊ฒ ๋ ์ด์ด๊ฐ ๋๋์ด ์์ด์ ์ดํดํ๊ธฐ ์ข์์ด์.
๋ ์๋ฆผ ๊ธฐ๋ฅ์ด ๋ค์ด๊ฐ ์ฑ๋ค์ WorkManager๋ฅผ ์ด์ฉํ๊ฑฐ๋ Firebase ๋ฉ์์ง์ ์ฐ๋ํด ๋์๋๋ผ๊ณ ์. ์ด๋ด ๊ฒฝ์ฐ ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ๋์ํด์ผ ํ๋, ์๋น์ค ๊ตฌ์ฑ ๋ฐฉ์์ด๋ ํฌ๊ทธ๋ผ์ด๋ ์คํ ์ฒ๋ฆฌ ๋ฑ๋ ๊ผผ๊ผผํ ๋ด์ผ ํด์. ํนํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ ๋ฐฉ์์ ์๋๋ก์ด๋ ๋ฒ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ์กฐ๊ฑด ๋ถ๊ธฐ๋ก ๋๋์ด ์์์ด์.
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ์๋ ์ฑ๋ค์ OAuth2 ์ธ์ฆ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๊ณ , ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ฐ๋๋ ๊ฝค ๋ง์ด ๋ณด์์ด์. Token์ SharedPreferences ๋๋ DataStore์ ์์ ํ๊ฒ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ธ ์ ๋ณด๋ฅผ ๋ณดํธํ๊ณ ์์๊ณ , ๋ก๊ทธ์ธ ํ ์ ์ ์ธ์ ์ ์ง๋ฅผ ์ํด ์ธํฐ์ ํฐ๋ฅผ ํ์ฉํ๊ธฐ๋ ํ์ด์.
๐ ํต์ฌ ๊ธฐ๋ฅ ๊ตฌ์ฑ ์์ํ ๐ก
๊ธฐ๋ฅ | ์ฃผ์ ํ๋ฆ | ์ฌ์ฉ ๊ธฐ์ |
---|---|---|
๋ฉ๋ชจ ๊ด๋ฆฌ | View → ViewModel → Repository → Room | MVVM, Room |
๋ด์ค API ์ฐ๋ | Repository → Retrofit → ์๋ฒ → ViewModel | Retrofit, Coroutine |
์๋ฆผ ์ฒ๋ฆฌ | WorkManager ๋๋ Firebase → Notification | Firebase, WorkManager |
๋ก๊ทธ์ธ ๊ธฐ๋ฅ | OAuth2 → Token ์ ์ฅ → ์ ์ ์ธ์ | Google Auth, DataStore |
์ค์ ์ ์ฉ ์ธ์ฌ์ดํธ
์ง๊ธ๊น์ง ๋ถ์ํ ์คํ์์ค ์ฑ๋ค์ ๊ตฌ์กฐ์ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๋๋ง์ ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์์๊น์? ์ด๊ฑด ๋จ์ํ '์ฝ๋๋ฅผ ๋ฒ ๋ผ๋ ๊ฒ'์ด ์๋๋ผ, '์ค๊ณ๋ฅผ ์ดํดํ๊ณ ๋๋ง์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ๊ฒ'์ ๋ฌ๋ ค ์์ด์. ์์ ์ฝ๋๋ ๊ฐ์ด๋์ผ ๋ฟ, ์ค์ ์์๋ ๋ด๊ฐ ์ง์ ์ค๊ณ์๋ก์ ํ๋จ์ ๋ด๋ ค์ผ ํ๊ฑฐ๋ ์.
์ฒซ ๋ฒ์งธ๋ก ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ ‘๋ชจ๋ํ’์์. ๋ถ์ํ ์คํ์์ค ์ฑ์ฒ๋ผ ViewModel, Repository, UseCase๋ฅผ ๋ถ๋ฆฌํด์ ์์ฑํด๋ณด๋ ์ฐ์ต์ ํด๋ณด์ธ์. ์ด ๋ฐฉ์์ ์ค๋ฌด์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์ ๋ ๋งค์ฐ ์ ๋ฆฌํด์. ์๋ฅผ ๋ค์ด API๊ฐ ๋ณ๊ฒฝ๋์ด๋ View๋ UseCase๋ ๊ฑฐ์ ์์ ํ์ง ์์๋ ๋๋ ๊ฑฐ์ฃ .
๋ ๋ฒ์งธ๋ '๊ธฐ๋ฅ ๋จ์ ์ปค๋ฐ' ์ฐ์ต์ด์์. ์คํ์์ค ์ฑ๋ค์ ๊น ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ํ๋์ ๊ธฐ๋ฅ์ ๋ช ํํ๊ฒ ๋๋ ์ปค๋ฐํ ๊ฒฝ์ฐ๊ฐ ๋ง์์. ์ด๋ ๊ฒ ํ๋ฉด ํ์ ์์๋ ์ด์ ํ์ ์ด ์ฌ์์ง๊ณ , ์ฝ๋ ๋ฆฌ๋ทฐ ์์๋ ๋ช ํํ ํ๋ฆ์ ์ค๋ช ํ ์ ์์ฃ . ๊ฐ์ธ ํ๋ก์ ํธ๋ผ๋ ์ต๊ดํํ๋ฉด ์ ๋ง ํฐ ๋์์ด ๋ผ์.
์ธ ๋ฒ์งธ๋ ‘๋ด ํฌํธํด๋ฆฌ์ค์ ์ ์ฉ’ํ๋ ๊ฑฐ์์. ์คํ์์ค ์ฑ์์ ์ธ์ ๊น์๋ ๊ธฐ๋ฅ์ด๋ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋๋ง์ ์ฑ์ ๋น์ทํ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํด๋ณด๋ ๊ฑฐ์ฃ . ์๋ฅผ ๋ค์ด '๋ด์ค ์ฑ'์ Retrofit + MVVM ๊ตฌ์กฐ๋ฅผ ์ฐจ์ฉํด์ ‘๋ง์ง ์ถ์ฒ ์ฑ’์ ๋ง๋ ๋ค๊ฑฐ๋, Room DB๋ฅผ ์ด์ฉํ 'ํ ์ผ ๊ด๋ฆฌ ์ฑ'์ ๋ง๋ค์ด๋ณผ ์ ์์ด์.
๋ง์ง๋ง์ผ๋ก ์ค์ํ ๊ฑด '๋๋ฒ๊น ์ญ๋'์ด์์. ๋ถ์ํ ์ฝ๋๋ฅผ ์ง์ ์คํํด๋ณด๊ณ , ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ฑฐ๋ ์์ ํฌ์ธํธ๋ฅผ ์ฐพ์๋ณด๋ ๊ฒ๋ ์ ๋ง ํฐ ํ์ต์ด์์. ํนํ Logcat, Breakpoint, Inspector๋ฅผ ์ด์ฉํ ๋๋ฒ๊น ๋ฅ๋ ฅ์ ์ค์ ์์ ์์ฒญ๋๊ฒ ์ค์ํ ์คํฌ์ด์ฃ . ์คํ์์ค ๋ถ์์ผ๋ก ์ด ๋ฅ๋ ฅ๋ ํค์ธ ์ ์์ด์.
๐ ์ค์ ์ ์ฉ ๋ฐฉ๋ฒ ์์ฝํ ๐ผ
ํ์ฉ ๋ฐฉ๋ฒ | ์ค๋ช |
---|---|
๋ชจ๋ํ ์ฐ์ต | ViewModel, UseCase, Repository ๊ณ์ธตํ |
๊ธฐ๋ฅ ๋จ์ ์ปค๋ฐ | ํ๋์ ๊ธฐ๋ฅ๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ์ปค๋ฐ |
ํฌํธํด๋ฆฌ์ค์ ์ ์ฉ | ๋ด ์ฑ์์ ์ ์ฌ ๊ตฌ์กฐ ์ฌ๊ตฌ์ฑ |
๋๋ฒ๊น ์ค์ต | ์ฝ๋ ์คํ ๋ฐ ์ค๋ฅ ์ถ์ ๋ฅ๋ ฅ ํฅ์ |
FAQ
Q1. ์๋๋ก์ด๋ ์คํ์์ค ์ฑ์ ์ด๋์ ์ฐพ์ ์ ์๋์?
A1. ์ฃผ๋ก GitHub์์ ์ฐพ์ ์ ์์ด์. ‘android open source app’์ด๋ ‘android github projects’๋ก ๊ฒ์ํ๋ฉด ์ธ๊ธฐ ํ๋ก์ ํธ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ด์.
Q2. ์คํ์์ค ์ฑ์ ๋ถ์ํ ๋ ๋จผ์ ๋ด์ผ ํ ํ์ผ์ ๋ญ๊ฐ์?
A2. ์ผ๋ฐ์ ์ผ๋ก `build.gradle` ํ์ผ๊ณผ `AndroidManifest.xml`๋ถํฐ ๋ณด๋ฉด ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ ๋ฐ ๋์์ด ๋ผ์. ์์กด์ฑ๊ณผ ๊ถํ, ์์ ์กํฐ๋นํฐ ๋ฑ์ ํ์ธํ ์ ์๋ต๋๋ค.
Q3. ์คํ์์ค ์ฑ ์ฝ๋๋ฅผ ๋ด ํ๋ก์ ํธ์ ์ฌ์ฉํด๋ ๋๋์?
A3. ๋ผ์ด์ ์ค๋ฅผ ๊ผญ ํ์ธํด์ผ ํด์. MIT, Apache 2.0์ ์์ ์ ์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง, GPL์ ์์ค ๊ณต๊ฐ๊ฐ ํ์์์. ํญ์ LICENSE ํ์ผ์ ํ์ธํ์ธ์.
Q4. ์ค์ ํ๋ก์ ํธ์ ์ด๋ค ๊ตฌ์กฐ๊ฐ ๊ฐ์ฅ ์ ํฉํ ๊น์?
A4. ๊ฐ์ธ ๋๋ ์ค์ํ ํ๋ก์ ํธ์๋ MVVM ๊ตฌ์กฐ๊ฐ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ฌ์. ๋ํ ํ๋ก์ ํธ๋ Clean Architecture๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ง๋ณด์์ ์ ๋ฆฌํด์.
Q5. Jetpack Compose๋ ๊ผญ ์ฌ์ฉํด์ผ ํ๋์?
A5. ๊ผญ ๊ทธ๋ฐ ๊ฑด ์๋์์. ์์ง XML ๋ฐฉ์๋ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๊ณ , Compose๋ ์๋์ ์ผ๋ก ํ์ต ๊ณก์ ์ด ์์ ์ ์์ด์. ํ์ง๋ง ํฅํ ์ถ์ธ๋ Compose๋ก ๊ฐ๋ ์ค์ด์์.
Q6. ๋ถ์ํ ์ฝ๋๋ฅผ ์ดํดํ๋ ํ์ด ์๋์?
A6. ๋จ์ํ ์ฝ๊ธฐ๋ณด๋ค ์ง์ ์คํํ๊ณ , ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋ ๊ฒ ์ข์์. ํ๋์ ๊ธฐ๋ฅ์ ๊ธฐ์ค์ผ๋ก ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋์ผ๋ก ํ์ธํ๋ ๊ฒ ๊ฐ์ฅ ํจ๊ณผ์ ์ด์์.
Q7. ๋ด๊ฐ ๋ง๋ ์ฑ๋ ์คํ์์ค๋ก ๊ณต๊ฐํด๋ ๋๋์?
A7. ๋น์ฐํ ๊ฐ๋ฅํด์! GitHub์ ์ ์ฅ์๋ฅผ ๋ง๋ค๊ณ LICENSE ํ์ผ์ ํฌํจํ๋ฉด ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ ์คํ์์ค๊ฐ ๋ผ์. ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ๋ ํ ์ ์์ฃ .
Q8. ์คํ์์ค ๋ถ์์ด ์ทจ์ ์๋ ๋์์ด ๋๋์?
A8. ์ ๋ง ๋ง์ด ๋ผ์! ๋ฉด์ ์์ ๊ตฌ์กฐ ์ค๋ช ์ด๋ ๊ธฐ๋ฅ ๊ตฌํ ๊ฒฝํ์ ์ด์ผ๊ธฐํ๋ฉด ๊ฐ๋ ฅํ ํฌ์ธํธ๊ฐ ๋ผ์. ํฌํธํด๋ฆฌ์ค๋ก๋ ํ์ฉ ๊ฐ๋ฅํด์ ๊ฒฝ์๋ ฅ์ ๋์ฌ์ค์.