Skip to content

Latest commit

ย 

History

History
184 lines (137 loc) ยท 8.61 KB

File metadata and controls

184 lines (137 loc) ยท 8.61 KB

Architecture

๋ชฉํ‘œ

์•ฑ ์•„ํ‚คํ…์ฒ˜์˜ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • official architecture guidance ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋Œ€์ค‘ ์ ์ธ ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž์˜ ์ปดํ“จํ„ฐ์™€ CI(์ง€์†์ ์ธ ํ†ตํ•ฉ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋ฐ ๊ณ„์ธก ํ…Œ์ŠคํŠธ๋ฅผ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์š”

์•ฑ ์•„ํ‚คํ…์ฒ˜์—๋Š” ๋ฐ์ดํ„ฐ ๊ณ„์ธต , ๋„๋ฉ”์ธ ๊ณ„์ธต ๋ฐ UI ๊ณ„์ธต ์˜ ์„ธ ๊ฐ€์ง€ ๊ณ„์ธต์ด ์žˆ์Šต๋‹ˆ๋‹ค.

architecture

์•„ํ‚คํ…์ฒ˜๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ด ์žˆ๋Š” ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค . ๋งจ ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ณ„์ธต์—์„œ ํ•ต์‹ฌ ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ƒ์œ„ ๊ณ„์ธต์€ ํ•˜์œ„ ๊ณ„์ธต์˜ ๋ณ€ํ™”์— ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฒคํŠธ๊ฐ€ ์•„๋ž˜๋กœ flow ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์œ„๋กœ flow ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํ๋ฆ„์€ Kotlin Flows ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Example: ExchangeRate UI

๋‹ค์Œ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์™€ ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ด€๋ จ ๊ฐœ์ฒด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๋Š” ๋ฐฉ์‹์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

architectureExample

๋ชจ๋“ˆํ™”

๊ฐœ์š”

๋ชจ๋“ˆํ™”๋Š” ๋ชจ๋†€๋ฆฌ์‹, ๋‹จ์ผ ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ฐœ๋…์„ ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์ž์ฒด ํฌํ•จ ๋ชจ๋“ˆ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆํ™”์˜ ์ด์ 

ํ™•์žฅ์„ฑ - ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋‹จ์ผ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ผ๋ จ์˜ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ๋ชจ๋“ˆํ™”๋œ ํ”„๋กœ์ ํŠธ๋Š”๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ์›์น™ ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฐจ๋ก€๋กœ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ์ ์šฉํ•˜๋Š” ๋™์‹œ์— contributors ์—๊ฒŒ ๋” ๋งŽ์€ ์ž์œจ์„ฑ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ์ž‘์—… ํ™œ์„ฑํ™” - ๋ชจ๋“ˆํ™”๋Š” ๋ฒ„์ „ ์ œ์–ด ์ถฉ๋Œ์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋ฉฐ ๋Œ€๊ทœ๋ชจ ํŒ€์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ‘๋ ฌ ์ž‘์—…์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Ownership - ๋ชจ๋“ˆ์—๋Š” ์ฝ”๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์œ ์ง€ ๊ด€๋ฆฌ, ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฒ€ํ† ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ „๋‹ด ์†Œ์œ ์ž๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Encapsulation - ๊ฒฉ๋ฆฌ๋œ ์ฝ”๋“œ๋Š” ์ฝ๊ธฐ, ์ดํ•ด, ํ…Œ์ŠคํŠธ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ• - Gradle์˜ ๋ณ‘๋ ฌ ๋ฐ ์ฆ๋ถ„ ๋นŒ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dynamic delivery - ๋ชจ๋“ˆํ™”๋Š” ์•ฑ์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์กฐ๊ฑด๋ถ€๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ์š”์ฒญ ์‹œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Play Feature Delivery ์ž…๋‹ˆ๋‹ค.

์žฌ์‚ฌ์šฉ์„ฑ - ์ ์ ˆํ•œ ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๊ธฐ๋ฐ˜์—์„œ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์— ๊ฑธ์ณ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์—ฌ๋Ÿฌ ์•ฑ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆํ™” ๋‹จ์ 

๋ชจ๋“ˆํ™”๋Š” ์˜ค์šฉ๋  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ด๋ฉฐ ์•ฑ์„ ๋ชจ๋“ˆํ™”ํ•  ๋•Œ ์•Œ์•„์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋งŽ์€ ๋ชจ๋“ˆ - ๊ฐ ๋ชจ๋“ˆ์—๋Š” ๋นŒ๋“œ ๊ตฌ์„ฑ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด Gradle ๋™๊ธฐํ™” ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜๊ณ  ์ง€์†์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ๋งŽ์€ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹จ์ผ ๋ชจ๋†€๋ฆฌ์‹ ๋ชจ๋“ˆ๊ณผ ๋น„๊ตํ•  ๋•Œ ํ”„๋กœ์ ํŠธ์˜ Gradle ์„ค์ •์ด ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ํ˜•์‹์ด ์•ˆ์ „ํ•œ Kotlin ์ฝ”๋“œ๋กœ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด Convention ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์—์„œ ์ด๋Ÿฌํ•œ ๊ทœ์น™ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ [buildLogic ํด๋”] ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

๋„ˆ๋ฌด ์ ์€ ๋ชจ๋“ˆ - ๋ฐ˜๋Œ€๋กœ ๋ชจ๋“ˆ์ด ์ ๊ณ  ํฌ๋ฉฐ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์œผ๋ฉด ๋˜ ๋‹ค๋ฅธ ๋ชจ๋†€๋ฆฌ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“ˆํ™”์˜ ์ผ๋ถ€ ์ด์ ์„ ์žƒ๊ฒŒ ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ๋„ˆ๋ฌด ํฌ๊ณ  ์ž˜ ์ •์˜๋œ ๋‹จ์ผ ๋ชฉ์ ์ด ์—†๋‹ค๋ฉด ๋ชจ๋“ˆ์„ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋ณต์žก - ์‚ฌ์‹ค ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์˜ณ์€ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋“ˆํ™”๋ฅผ ํ• ๋•Œ ๊ณ ๋ คํ•ด์•ผํ•  ์š”์ธ์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํฌ๊ธฐ์™€ ์ƒ๋Œ€์  ๋ณต์žก์„ฑ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ํŠน์ • ์ž„๊ณ„๊ฐ’ ์ด์ƒ์œผ๋กœ ์„ฑ์žฅํ•˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ ํ™•์žฅ์„ฑ ๋ฐ ๋นŒ๋“œ ์‹œ๊ฐ„ ํ–ฅ์ƒ์ด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆํ™” ์ „๋žต

๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ๋‹จ์ผ ๋ชจ๋“ˆํ™” ์ „๋žต์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ๋‹จ์ ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

barebone module์€ ๋‹จ์ˆœํžˆ ๋‚ด๋ถ€์— Gradle ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์†Œ์Šค ์„ธํŠธ์™€ resource ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ resource๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ ๋…๋ฆฝ์ ์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Gradle์˜ ์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•ด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ฝ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๋†’์€ ์‘์ง‘๋„๋ฅผ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‚ฎ์€ ๊ฒฐํ•ฉ - ๋ชจ๋“ˆ์€ ํ•œ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ์ „ํ˜€ ์—†๊ฑฐ๋‚˜ ์ตœ์†Œํ™”๋˜๋„๋ก ์„œ๋กœ ๊ฐ€๋Šฅํ•œ ํ•œ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ๋“ค์€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ๋‚ด๋ถ€ ์ž‘๋™์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋ชฐ๋ผ์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ๋†’์€ ์‘์ง‘๋ ฅ - ๋ชจ๋“ˆ์€ ์‹œ์Šคํ…œ ์—ญํ• ์„ ํ•˜๋Š” ์ฝ”๋“œ ๋ชจ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋œ ์ฑ…์ž„์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ํŠน์ • ๋„๋ฉ”์ธ ์ง€์‹์˜ ๊ฒฝ๊ณ„ ๋‚ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Wirebarley ๋ชจ๋“ˆ ์š”์•ฝ

moduleDependency

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์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • feature:ExchangeRate ํ™˜์œจ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
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 ์•ฑ ์ „์ฒด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋ธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.