์ฑ ์ํคํ ์ฒ์ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- official architecture guidance ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
- ๊ฐ๋ฐ์๊ฐ ์ดํดํ๊ธฐ ์ฝ๊ณ ๋์ค ์ ์ธ ๊ตฌ์กฐ ์ ๋๋ค.
- ๋์ผํ ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ๋ ์ฌ๋ฌ ๊ฐ๋ฐ์๋ฅผ ์ง์ํฉ๋๋ค.
- ๊ฐ๋ฐ์์ ์ปดํจํฐ์ CI(์ง์์ ์ธ ํตํฉ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ๋ฐ ๊ณ์ธก ํ ์คํธ๋ฅผ ์ด์งํฉ๋๋ค.
- ๋น๋ ์๊ฐ์ ์ต์ํํฉ๋๋ค.
์ฑ ์ํคํ ์ฒ์๋ ๋ฐ์ดํฐ ๊ณ์ธต , ๋๋ฉ์ธ ๊ณ์ธต ๋ฐ UI ๊ณ์ธต ์ ์ธ ๊ฐ์ง ๊ณ์ธต์ด ์์ต๋๋ค.
์ํคํ ์ฒ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ์ด ์๋ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ๋ฐ๋ฆ ๋๋ค . ๋งจ ์๋์ ์๋ ๋ฐ์ดํฐ ๊ณ์ธต์์ ํต์ฌ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์ ๊ณ์ธต์ ํ์ ๊ณ์ธต์ ๋ณํ์ ๋ฐ์ํฉ๋๋ค.
- ์ด๋ฒคํธ๊ฐ ์๋๋ก flow ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ๊ฐ ์์๋ก flow ๋ฉ๋๋ค.
๋ฐ์ดํฐ ํ๋ฆ์ Kotlin Flows ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ์คํธ๋ฆผ์ ์ฌ์ฉํฉ๋๋ค.
๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๊ด๋ จ ๊ฐ์ฒด์์ ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๋ ๋ฐฉ์์ ๋ณด์ฌ์ค๋๋ค.
๋ชจ๋ํ๋ ๋ชจ๋๋ฆฌ์, ๋จ์ผ ๋ชจ๋ ์ฝ๋๋ฒ ์ด์ค์ ๊ฐ๋ ์ ๋์จํ๊ฒ ๊ฒฐํฉ๋ ์์ฒด ํฌํจ ๋ชจ๋๋ก ๋๋๋ ๋ฐฉ์์ ๋๋ค.
ํ์ฅ์ฑ - ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋ ์ฝ๋๋ฒ ์ด์ค์์ ๋จ์ผ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ผ๋ จ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ ์ ํ๊ฒ ๋ชจ๋ํ๋ ํ๋ก์ ํธ๋๊ด์ฌ์ฌ ๋ถ๋ฆฌ ์์น ์ด ์ ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ ์ฐจ๋ก๋ก ์ํคํ ์ฒ ํจํด์ ์ ์ฉํ๋ ๋์์ contributors ์๊ฒ ๋ ๋ง์ ์์จ์ฑ์ ๋ถ์ฌํฉ๋๋ค.
๋ณ๋ ฌ ์์ ํ์ฑํ - ๋ชจ๋ํ๋ ๋ฒ์ ์ ์ด ์ถฉ๋์ ์ค์ด๋ ๋ฐ ๋์์ด ๋๋ฉฐ ๋๊ท๋ชจ ํ์ ๊ฐ๋ฐ์๊ฐ ๋ณ๋ ฌ ์์ ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ํฉ๋๋ค.
Ownership - ๋ชจ๋์๋ ์ฝ๋ ๋ฐ ํ ์คํธ ์ ์ง ๊ด๋ฆฌ, ๋ฒ๊ทธ ์์ ๋ฐ ๋ณ๊ฒฝ ์ฌํญ ๊ฒํ ๋ฅผ ๋ด๋นํ๋ ์ ๋ด ์์ ์๊ฐ ์์ ์ ์์ต๋๋ค.
Encapsulation - ๊ฒฉ๋ฆฌ๋ ์ฝ๋๋ ์ฝ๊ธฐ, ์ดํด, ํ ์คํธ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฝ์ต๋๋ค.
๋น๋ ์๊ฐ ๋จ์ถ - Gradle์ ๋ณ๋ ฌ ๋ฐ ์ฆ๋ถ ๋น๋๋ฅผ ํ์ฉํ๋ฉด ๋น๋ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
Dynamic delivery - ๋ชจ๋ํ๋ ์ฑ์ ํน์ ๊ธฐ๋ฅ์ ์กฐ๊ฑด๋ถ๋ก ์ ๋ฌํ๊ฑฐ๋ ์์ฒญ ์ ๋ค์ด๋ก๋ํ ์ ์๋๋ก ํ๋ Play Feature Delivery ์ ๋๋ค.
์ฌ์ฌ์ฉ์ฑ - ์ ์ ํ ๋ชจ๋ํ๋ฅผ ํตํด ๋์ผํ ๊ธฐ๋ฐ์์ ๋ค์ํ ํ๋ซํผ์ ๊ฑธ์ณ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ ์ฌ๋ฌ ์ฑ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๋ชจ๋ํ๋ ์ค์ฉ๋ ์ ์๋ ํจํด์ด๋ฉฐ ์ฑ์ ๋ชจ๋ํํ ๋ ์์์ผ ํ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋๋ฌด ๋ง์ ๋ชจ๋ - ๊ฐ ๋ชจ๋์๋ ๋น๋ ๊ตฌ์ฑ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๋ ํํ๋ก ๋ฐ์ํ๋ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
์ด๋ก ์ธํด Gradle ๋๊ธฐํ ์๊ฐ์ด ๋์ด๋๊ณ ์ง์์ ์ธ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ํ ๋ ๋ง์ ๋ชจ๋์ ์ถ๊ฐํ๋ฉด ๋จ์ผ ๋ชจ๋๋ฆฌ์ ๋ชจ๋๊ณผ ๋น๊ตํ ๋ ํ๋ก์ ํธ์ Gradle ์ค์ ์ด ๋ ๋ณต์กํด์ง๋๋ค.
์ด๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋น๋ ๊ตฌ์ฑ์ ํ์์ด ์์ ํ Kotlin ์ฝ๋๋ก ์ถ์ถํ๊ธฐ ์ํด Convention ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค.
์ฑ์์ ์ด๋ฌํ ๊ท์น ํ๋ฌ๊ทธ์ธ์ [buildLogic ํด๋] ์์ ์ฐพ์ ์ ์์ต๋๋ค .
๋๋ฌด ์ ์ ๋ชจ๋ - ๋ฐ๋๋ก ๋ชจ๋์ด ์ ๊ณ ํฌ๋ฉฐ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋์ด ์์ผ๋ฉด ๋ ๋ค๋ฅธ ๋ชจ๋๋ฆฌ์ค๊ฐ ๋ฉ๋๋ค. ์ด๋ ๋ชจ๋ํ์ ์ผ๋ถ ์ด์ ์ ์๊ฒ ๋จ์ ์๋ฏธํฉ๋๋ค. ๋ชจ๋์ด ๋๋ฌด ํฌ๊ณ ์ ์ ์๋ ๋จ์ผ ๋ชฉ์ ์ด ์๋ค๋ฉด ๋ชจ๋์ ๋ถํ ํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋๋ฌด ๋ณต์ก - ์ฌ์ค ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ํํ๋ ๊ฒ์ด ํญ์ ์ณ์ ๊ฒ์ ์๋๋๋ค. ๋ชจ๋ํ๋ฅผ ํ ๋ ๊ณ ๋ คํด์ผํ ์์ธ์ ์ฝ๋๋ฒ ์ด์ค์ ํฌ๊ธฐ์ ์๋์ ๋ณต์ก์ฑ์ ๋๋ค. ํ๋ก์ ํธ๊ฐ ํน์ ์๊ณ๊ฐ ์ด์์ผ๋ก ์ฑ์ฅํ์ง ์์ ๊ฒ์ผ๋ก ์์๋๋ ๊ฒฝ์ฐ ํ์ฅ์ฑ ๋ฐ ๋น๋ ์๊ฐ ํฅ์์ด ์ ์ฉ๋์ง ์์ต๋๋ค.
๋ชจ๋ ํ๋ก์ ํธ์ ์ ํฉํ ๋จ์ผ ๋ชจ๋ํ ์ ๋ต์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฅ์ ์ ๊ทน๋ํํ๊ณ ๋จ์ ์ ์ต์ํํ๊ธฐ ์ํด ๋ฐ๋ฅผ ์ ์๋ ์ผ๋ฐ์ ์ธ ์ง์นจ์ด ์์ต๋๋ค.
barebone module์ ๋จ์ํ ๋ด๋ถ์ Gradle ๋น๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋์ ํ๋ ์ด์์ ์์ค ์ธํธ์ resource ๋๋ ์ฌ๋ฌ๊ฐ์ resource๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ชจ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ๋น๋ํ๊ณ ํ ์คํธํ ์ ์์ต๋๋ค. Gradle์ ์ ์ฐ์ฑ์ผ๋ก ์ธํด ํ๋ก์ ํธ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ฝ์ด ๊ฑฐ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์์ง๋๋ฅผ ์ํด ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค.
-
๋ฎ์ ๊ฒฐํฉ - ๋ชจ๋์ ํ ๋ชจ๋์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ฏธ์น๋ ์ํฅ์ด ์ ํ ์๊ฑฐ๋ ์ต์ํ๋๋๋ก ์๋ก ๊ฐ๋ฅํ ํ ๋ ๋ฆฝ์ ์ด์ด์ผ ํฉ๋๋ค. ๊ฐ ๋ชจ๋๋ค์ ๋ค๋ฅธ ๋ชจ๋์ ๋ด๋ถ ์๋์ ๋ํ ๋ด์ฉ์ ๋ชฐ๋ผ์ผํฉ๋๋ค.
-
๋์ ์์ง๋ ฅ - ๋ชจ๋์ ์์คํ ์ญํ ์ ํ๋ ์ฝ๋ ๋ชจ์์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. ๋ช ํํ๊ฒ ์ ์๋ ์ฑ ์์ด ์์ด์ผ ํ๋ฉฐ ํน์ ๋๋ฉ์ธ ์ง์์ ๊ฒฝ๊ณ ๋ด์ ์์ด์ผ ํฉ๋๋ค.
Wirebarley ์ฑ์๋ ๋ค์ ์ ํ์ ๋ชจ๋์ด ํฌํจ๋์ด ์์ต๋๋ค.
-
app๋ชจ๋ - ์ฑ level navigation ๋๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ฐ์ธ๋ฉ ํฉ๋๋ค.app๋ชจ๋์ ๋ชจ๋feature๋ชจ๋์ ์์กดํ๋ฉฐ ํ์ํcore๋ชจ๋๋ค์ ์์กดํฉ๋๋ค. -
feature:๋ชจ๋ - ์ฑ์์ ๋จ์ผ ์ฑ ์์ ์ฒ๋ฆฌํ๋๋ก ๋ฒ์๊ฐ ์ง์ ๋ ํน์ feature ๋ชจ๋์ ๋๋ค. ํด๋์ค๊ฐ ํ๋์ ๋ชจ๋์์๋ง ํ์ํ ๊ฒฝ์ฐ ํด๋นfeature๋ชจ๋ ๋ด์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ ์ ํcore๋ชจ๋ ๋ก ์ฎ๊ฒจ์ผ ํฉ๋๋ค .feature๋ชจ๋์ ๋ค๋ฅธfeature๋ชจ๋์ ๋ํ ์ข ์์ฑ์ด ์์ด์ผ ํฉ๋๋ค. ํ์ํcore๋ชจ๋ ์๋ง ์์กด ํฉ๋๋ค. -
core:๋ชจ๋ - ์ฑ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ ๊ณต์ ํด์ผ ํ๋ ๋ณด์กฐ ์ฝ๋ ๋ฐ ํน์ ์ข ์์ฑ์ ํฌํจํ๋ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋์ ๋๋ค. ์ด๋ฌํ ๋ชจ๋์ ๋ค๋ฅธ ํต์ฌ ๋ชจ๋์ ์์กดํ ์ ์์ง๋ง ๊ธฐ๋ฅ์ด๋ ์ฑ ๋ชจ๋์ ์์กดํด์๋ ์ ๋ฉ๋๋ค.
์์ ๋ชจ๋ํ ์ ๋ต์ ์ฌ์ฉํ์ฌ Wirebarley ์ฑ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ชจ๋์ด ์์ต๋๋ค.
| Name | Responsibilities |
app
|
์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ํตํฉํฉ๋๋ค. |
feature:1,feature:2... |
ํน์ feature ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ UI ๊ตฌ์ฑ์์ ๋ฐ ViewModel์ ํฌํจํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
|
core:data
|
์ฌ๋ฌ ๊ธฐ๋ฅ์์ ๊ณต์ ํ๋ ์ฌ๋ฌ ์์ค์์ ์ฑ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. |
core:common
|
๋ชจ๋ ๊ฐ์ ๊ณต์ ๋๋ ๊ณตํต ํด๋์ค. |
core:remoteDataSource:apilayer
|
apilayer API ๋คํธ์ํฌ ์์ฒญ์ ๋ง๋ค๊ณ ์๊ฒฉ ๋ฐ์ดํฐ ์๋ณธ์์ ์๋ต์ ์ฒ๋ฆฌํฉ๋๋ค. |
core:testing
|
์ข ์์ฑ, ๋ฆฌํฌ์งํ ๋ฆฌ ๋ฐ util ํด๋์ค ํ ์คํธ. |
core:localDataSource:InMemory
|
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ Local database storage. |
core:localDataSource:room
|
room์ ์ด์ฉํ์ฌ persistent data ์ ๊ณต |
core:model
|
์ฑ ์ ์ฒด์์ ์ฌ์ฉ๋๋ ๋ชจ๋ธ ํด๋์ค์ ๋๋ค. |


