๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์•ˆ๋“œ๋กœ์ด๋“œ ์˜คํ”ˆ์†Œ์Šค ์•ฑ ๋ถ„์„ ๋ฆฌํฌํŠธ ๐Ÿ”

by infomationtree 2025. 5. 3.
๋ฐ˜์‘ํ˜•

์•ˆ๋“œ๋กœ์ด๋“œ ์˜คํ”ˆ์†Œ์Šค ์•ฑ ๋ถ„์„

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

 

์ด๋ฒˆ ์‹œ๋ฆฌ์ฆˆ์—์„œ๋Š” ๊นƒํ—ˆ๋ธŒ์— ๊ณต๊ฐœ๋œ ์ธ๊ธฐ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ๋“ค์„ ์„ ์ •ํ•ด ๊ตฌ์กฐ, ๊ธฐ๋Šฅ, 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. ์ •๋ง ๋งŽ์ด ๋ผ์š”! ๋ฉด์ ‘์—์„œ ๊ตฌ์กฐ ์„ค๋ช…์ด๋‚˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฒฝํ—˜์„ ์ด์•ผ๊ธฐํ•˜๋ฉด ๊ฐ•๋ ฅํ•œ ํฌ์ธํŠธ๊ฐ€ ๋ผ์š”. ํฌํŠธํด๋ฆฌ์˜ค๋กœ๋„ ํ™œ์šฉ ๊ฐ€๋Šฅํ•ด์„œ ๊ฒฝ์Ÿ๋ ฅ์„ ๋†’์—ฌ์ค˜์š”.

๋ฐ˜์‘ํ˜•