์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

[Android ๊ณ ๊ธ‰] ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค ๋ํŒ์™• โ€“ Flavor ์„ค์ •๋ถ€ํ„ฐ MVI ์•„ํ‚คํ…์ฒ˜๊นŒ์ง€

๋ณต์žกํ•œ ์‹ค๋ฌด ์ฝ”๋“œ ์„ค๊ณ„์— ํ•œ๊ณ„๋ฅผ ๋А๋ผ์‹œ๋‚˜์š”? ์ €์˜ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ๋‹ด์•„ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์™€ Kotlin ๊ธฐ๋ฐ˜์˜ ๊ฒฌ๊ณ ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์„ค๊ณ„ ๋…ธํ•˜์šฐ๋ฅผ ์ง์ ‘ ์ „์ˆ˜ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

9๋ช… ์ด ์ˆ˜๊ฐ•ํ•˜๊ณ  ์žˆ์–ด์š”.

๋‚œ์ด๋„ ์ค‘๊ธ‰์ด์ƒ

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ณ„์ธต๋ณ„ ์—ญํ•  ์ดํ•ด ๋ฐ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ์ ์šฉ ๋Šฅ๋ ฅ

  • Kotlin์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ ๋„๋ฉ”์ธ ์ค‘์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์„ค๊ณ„

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ํ†ตํ•œ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ

  • ์‹ค๋ฌด ์ˆ˜์ค€์˜ ์˜์กด์„ฑ ์ฃผ์ž…(DI) ๋ฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

์‹ค๋ฌด์—์„œ ์‚ด์•„๋‚จ๋Š” ์ง„์งœ ์ฝ”๋”ฉ, ์ƒ์กด์ฝ”๋”ฉ ์˜ค์ค€์„์ž…๋‹ˆ๋‹ค.

์ด๋ก ์€ ์žฅํ™ฉํ•˜์ง€๋งŒ ์ •์ž‘ ์‹ค๋ฌด์— ์ ์šฉํ•˜๋ ค๋ฉด ๋ง‰๋ง‰ํ•˜์…จ๋‚˜์š”? ์ €๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฒช์„ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๋ฏธ๋ฆฌ ๊ฒฝํ—˜ํ•˜๊ณ , ๊ทธ์ค‘์—์„œ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๊ณ  ๊ฒฌ๊ณ ํ•œ ๊ธธ์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ RunningTracker ๊ฐ•์˜์—์„œ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ€์žฅ ์–ด๋ ค์›Œํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋กœ์ง๊ณผ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค๋ฅผ '์ƒ์กด์ฝ”๋”ฉ' ์Šคํƒ€์ผ๋กœ ์•„์ฃผ ์‰ฝ๊ณ  ๋ช…์พŒํ•˜๊ฒŒ ํ’€์–ด๋ƒ…๋‹ˆ๋‹ค. ์ €์™€ ํ•จ๊ป˜ '์ œํ’ˆ' ์ˆ˜์ค€์˜ ์•ฑ์„ ์™„์„ฑํ•˜๋ฉฐ ์ฃผ๋‹ˆ์–ด์—์„œ ๋ฏธ๋“ค๊ธ‰ ๊ฐœ๋ฐœ์ž๋กœ ์ ํ”„ํ•˜์„ธ์š”.

์ด ๊ฐ•์˜์˜ ํŠน์ง•

๐Ÿ“Œ Kotlin ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜, MVVM, MVI ์•„ํ‚คํ…์ฒ˜๋ฅผ ์•ˆ๋“œ๋กœ์ด๋“œ์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

๐Ÿ“Œ Compose ๋กœ UI ์ž‘์„ฑ์˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

๐Ÿ“Œ ์ค‘๊ธ‰์ž๋ฅผ ์œ„ํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜ ์ถ”์ฒœํ•ด์š”

์•ˆ๋“œ๋กœ์ด๋“œ ์‹ค์ „ ์•ฑ ๊ฐœ๋ฐœ๋กœ ๋ ˆ๋ฒจ์—…ํ•˜๊ณ  ์‹ถ์–ด์š”.
๋‹จ์ˆœํ•œ UI ๊ตฌ์„ฑ์„ ๋„˜์–ด, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค์™€ ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ถ”์  ๊ฐ™์€ ๋‚œ์ด๋„ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด ๋ณด๊ณ  ์‹ถ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž/ํ•™์ƒ

๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์„œ๋น„์Šค ๋กœ์ง์ด ๊ณ ๋ฏผ์ด์—์š”
์•ฑ์ด ์ข…๋ฃŒ๋˜์–ด๋„ ์œ ์ง€๋˜๋Š” ํŠธ๋ž˜ํ‚น ๋กœ์ง, ์•Œ๋ฆผ(Notification) ์ œ์–ด, MVVM ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„

์‹ค๋ฌด ์ˆ˜์ค€์˜ ๋ฐฐํฌ ๋ฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๊ฒฝํ—˜ํ•˜๊ณ  ์‹ถ์–ด์š”.
๋„ค์ด๋ฒ„ ์ง€๋„/๊ตฌ๊ธ€ ์ง€๋„ ๋“ฑ ๋ฉ€ํ‹ฐ ํ”Œ๋ ˆ์ด๋ฒ„(Flavor) ๋Œ€์‘ ์ „๋žต๊ณผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด "๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ" ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„

์ˆ˜๊ฐ• ํ›„์—๋Š”

  • Foreground Service์™€ Notification์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋‹ค๋ฃจ๋ฉฐ

    ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋„ ์ฃฝ์ง€ ์•Š๊ณ  ๋™์ž‘ํ•˜๋Š” ํŠธ๋ž˜ํ‚น

    ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋ผ์š”.

  • ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ๋ฉ€ํ‹ฐ ํ”Œ๋ ˆ์ด๋ฒ„(Flavor)

    ์„ค์ •์„ ํ†ตํ•ด ๊ตฌ๊ธ€/๋„ค์ด๋ฒ„ ์ง€๋„๋ฅผ ์ž์œ ์ž์žฌ๋กœ ๊ต์ฒดํ•  ์ˆ˜

    ์žˆ๋Š” ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ถ”๊ฒŒ ๋ผ์š”.

  • Room Database์™€ Flow๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์šด๋™ ๊ฒฝ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ

    ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ UI์— ๋ฐ˜์˜ํ•˜๋Š” ๋ฐ˜์‘ํ˜•

    ์•ฑ์„ ๋งˆ์Šคํ„ฐํ•˜๊ฒŒ ๋ผ์š”.

  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)๋กœ ๊ธฐ๋Šฅ ์ˆ˜์ • ์‹œ

    ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ์˜

    ์‹ ๋ขฐ์„ฑ์„ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ์š”.

  • ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด, Clean Architecture์˜ ํ•ต์‹ฌ

    ์›์น™์„ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ์ฒด๋“ํ•˜๊ฒŒ ๋ผ์š”.

์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›Œ์š”.

Map, Service, Notification, Compose

์ง€๋„, Jetpack Compose, Room, Koin, BuildFlavor, Flow, Coroutines ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ UI๋ฅผ ๊ตฌ์„ฑ

Notification, Service, Broadcast Receiver

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค, Notification, Broadcast Receiver ๋ฅผ ํ™œ์šฉํ•œ ์‹ค์ „ ์˜ˆ์ œ

Clean Architecture, MVVM, MVI

๊ธฐ๋Šฅ ์ˆ˜์ •์— ์œ ์šฉํ•œ ์•„ํ‚คํ…์ฒ˜, ์„œ๋น„์Šค ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค

์ด ๊ฐ•์˜๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ

๊ต์œกํ•˜๊ณ  ์ฑ… ์“ฐ๋Š” ๊ฐœ๋ฐœ์ž ์˜ค์ค€์„์ž…๋‹ˆ๋‹ค.
'์˜ค์ค€์„์˜ ์ƒ์กด์ฝ”๋”ฉ' ์œ ํŠœ๋ธŒ ์ฑ„๋„๊ณผ ์ƒ์กด์ฝ”๋”ฉ (https://survivalcoding.com) ๊ต์œก ํ”Œ๋ž˜ํผ์„ ์šด์˜์ค‘์ž…๋‹ˆ๋‹ค.

16๋…„ ์ด์ƒ์˜ ์‹ค๋ฌด ๊ฒฝํ—˜๊ณผ 11๋…„ ์ด์ƒ์˜ ๋ฉ˜ํ† ๋ง ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ, ์ด๋ก ์— ๊ทธ์น˜์ง€ ์•Š๊ณ  ์‹ค์ „์—์„œ ์ฆ‰์‹œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ์‚ด์•„์žˆ๋Š” ์ง€์‹์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์„ฑ์žฅ์ด ์ €์˜ ๊ฐ€์žฅ ํฐ ๋ณด๋žŒ์ž…๋‹ˆ๋‹ค.

์ €์„œ
์˜ค์ค€์„์˜ ํ”Œ๋Ÿฌํ„ฐ ์ƒ์กด์ฝ”๋”ฉ (ํ•œ๋น›๋ฏธ๋””์–ด 2020)
์˜ค์ค€์„์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ์ƒ์กด์ฝ”๋”ฉ: ์ฝ”ํ‹€๋ฆฐ ํŽธ (ํ•œ๋น›๋ฏธ๋””์–ด 2018)
๋  ๋•Œ๊นŒ์ง€ ์•ˆ๋“œ๋กœ์ด๋“œ (๋ฃจ๋น„ํŽ˜์ดํผ 2018)

์ฃผ์š”๊ฒฝ๋ ฅ
์˜ค๋ Œ์ง€(OhRange) ๋Œ€ํ‘œ
์„ธ๋ฏผ์ง์—…์ „๋ฌธํ•™๊ต ์ •๋ณด๊ธฐ์ˆ ๊ฐœ๋ฐœ ์ง์—…ํ›ˆ๋ จ๊ต์‚ฌ
์ˆ˜์›์Šค๋งˆํŠธ์•ฑ๊ฐœ๋ฐœํ•™์› ์šด์˜
LG์ „์ž MC์‚ฌ์—…๋ถ€
์ผ๋ณธ ์•„์ด์น˜ํ˜„ (ๆ ช)ๆฑๆตท็†็ง‘ Security์‚ฌ์—…๋ถ€
์ผ๋ณธ ์•„์ด์น˜ํ˜„ (ๆ ช)ๆ—ฅๆœฌใƒ†ใ‚ฏใ‚ทใƒผใƒ‰ IT์‚ฌ์—…๋ถ€

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • Mac์—์„œ Android Studio ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ•™์Šต ์ž๋ฃŒ

  • Github ๋งํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์„ ์ˆ˜ ์ง€์‹ ๋ฐ ์œ ์˜์‚ฌํ•ญ

  • Android ๊ฐœ๋ฐœ ์ง€์‹

  • Kotlin ์ง€์‹

  • ์ด ๊ฐ•์˜๋Š” ์ค‘๊ธ‰์ž๋ฅผ ์œ„ํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์„ ๋„˜์–ด ์‹ค๋ฌด ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ์ค‘๊ธ‰ ๊ฐœ๋ฐœ์ž

  • ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ๋ฒ—์–ด๋‚˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šด ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • Kotlin์„ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ตฌ์กฐ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜

  • Jetpack Compose ๊ธฐ์ดˆ

  • Kotlin ๊ธฐ์ดˆ

์•ˆ๋…•ํ•˜์„ธ์š”
์˜ค์ค€์„์ž…๋‹ˆ๋‹ค.

12,537

๋ช…

์ˆ˜๊ฐ•์ƒ

909

๊ฐœ

์ˆ˜๊ฐ•ํ‰

865

๊ฐœ

๋‹ต๋ณ€

4.7

์ 

๊ฐ•์˜ ํ‰์ 

16

๊ฐœ

๊ฐ•์˜

๊ต์œกํ•˜๊ณ  ์ฑ… ์“ฐ๋Š” ๊ฐœ๋ฐœ์ž ์˜ค์ค€์„์ž…๋‹ˆ๋‹ค.
'์˜ค์ค€์„์˜ ์ƒ์กด์ฝ”๋”ฉ' ์œ ํŠœ๋ธŒ ์ฑ„๋„๊ณผ ์ƒ์กด์ฝ”๋”ฉ (https://survivalcoding.com) ๊ต์œก ํ”Œ๋ž˜ํผ์„ ์šด์˜์ค‘์ž…๋‹ˆ๋‹ค.

์ „๋ฌธ ๋ถ„์•ผ : Android, Flutter

์ €์„œ
์˜ค์ค€์„์˜ ํ”Œ๋Ÿฌํ„ฐ ์ƒ์กด์ฝ”๋”ฉ (ํ•œ๋น›๋ฏธ๋””์–ด 2020)
์˜ค์ค€์„์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ์ƒ์กด์ฝ”๋”ฉ: ์ฝ”ํ‹€๋ฆฐ ํŽธ (ํ•œ๋น›๋ฏธ๋””์–ด 2018)
๋  ๋•Œ๊นŒ์ง€ ์•ˆ๋“œ๋กœ์ด๋“œ (๋ฃจ๋น„ํŽ˜์ดํผ 2018)

์ฃผ์š”๊ฒฝ๋ ฅ
์˜ค๋ Œ์ง€(OhRange) ๋Œ€ํ‘œ
์„ธ๋ฏผ์ง์—…์ „๋ฌธํ•™๊ต ์ •๋ณด๊ธฐ์ˆ ๊ฐœ๋ฐœ ์ง์—…ํ›ˆ๋ จ๊ต์‚ฌ
์ˆ˜์›์Šค๋งˆํŠธ์•ฑ๊ฐœ๋ฐœํ•™์› ์šด์˜
LG์ „์ž MC์‚ฌ์—…๋ถ€
์ผ๋ณธ ์•„์ด์น˜ํ˜„ (ๆ ช)ๆฑๆตท็†็ง‘ Security์‚ฌ์—…๋ถ€
์ผ๋ณธ ์•„์ด์น˜ํ˜„ (ๆ ช)ๆ—ฅๆœฌใƒ†ใ‚ฏใ‚ทใƒผใƒ‰ IT์‚ฌ์—…๋ถ€

LinkedIn: https://www.linkedin.com/in/junsuk5/

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

38๊ฐœ โˆ™ (10์‹œ๊ฐ„ 12๋ถ„)

๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!

์˜ค์ค€์„๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

์ง€์‹๊ณต์œ ์ž๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

๋น„์Šทํ•œ ๊ฐ•์˜

๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

์–ผ๋ฆฌ๋ฒ„๋“œ ํ• ์ธ ์ค‘ (2์ผ ๋‚จ์Œ)

์›” โ‚ฉ417,742

5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

39%

โ‚ฉ165,000

โ‚ฉ2,088,708