๐Ÿšง ๋‹ค์‹œ Android ๋‹จ๋… ํ”„๋กœ์ ํŠธ๋กœ ์ „ํ™˜ํ•œ ์ด์œ 

์ˆ˜ํ˜ธยท2025๋…„ 12์›” 5์ผ
post-thumbnail

2์ฃผ๊ฐ„์˜ KMP ๊ฐœ๋ฐœ๊ธฐ & ํšŒ๊ณ 


๐ŸŽฏ ๊ฒฐ๋ก 

์•ฝ 2์ฃผ๊ฐ„ Kotlin Multiplatform(KMP)์„ ์ ์šฉํ•˜๋ฉฐ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด๋ดค์ง€๋งŒ,

์—ฌ๋Ÿฌ ๊ธฐ์ˆ ์  ์ œ์•ฝ๊ณผ ์‹œ๊ฐ„ ์••๋ฐ•์œผ๋กœ ์ธํ•ด

๐Ÿ‘‰ Android / iOS ๋ถ„๋ฆฌ ๊ฐœ๋ฐœ(2 Track) ์ „๋žต์œผ๋กœ ์ตœ์ข… ๊ฒฐ์ •ํ–ˆ๋‹ค.

KMP๋ฅผ ํฌ๊ธฐํ•œ ๊ฑด ์•„๋‹ˆ์ง€๋งŒ,

์ง€๊ธˆ ์‹œ์ ์—์„œ KMP๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ผ์ • ์•ˆ์ •์„ฑ์ด ๋” ์ค‘์š”ํ•˜๋‹ค๋Š” ํŒ๋‹จ์ด์—ˆ๊ณ ,

ํŒ€์žฅ๋‹˜๋„ ์ด๋ฅผ ์ดํ•ดํ•ด์ฃผ์…”์„œ ๊ณผ๊ฐํžˆ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.


๐Ÿงฉ KMP ์ง„ํ–‰ ์ค‘ ๊ฒช์€ ์ฃผ์š” ์ด์Šˆ ์ •๋ฆฌ

1๏ธโƒฃ

์ œํ•œ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + ์žฆ์€ Breaking Changes

  • KMP๋Š” ์•„์ง๋„ ๋น ๋ฅด๊ฒŒ ์ง„ํ™” ์ค‘
  • JetBrains์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด โ†’ ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋ฐ โ†’ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์šด์˜ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ํŒ๋‹จ
  • Android ์œ„์ฃผ๋กœ๋งŒ ํ•œ๋‹ค๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ ์ •๋ง๋กœ cross-platform ๊ฐœ๋ฐœ์„ ํ•˜๊ธฐ์—” ์•„์ง ๋ฆฌ์Šคํฌ๊ฐ€ ์ปธ๋‹ค.

2๏ธโƒฃ

์ •ํ˜•ํ™”๋œ ๊ตฌ์กฐ(Expect/Actual & SQLDelight)

KMP๋Š” ์›ํ•˜๋Š” ๋Œ€๋กœ โ€œ์„ค๊ณ„ ์ž์œ ๋„โ€๊ฐ€ ๋†’์ง€ ์•Š๋‹ค.

๐Ÿ”น ์˜ˆ์‹œ: SQLDelight

  • DB ๊ด€๋ จ๋œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ sqldelight ํŒจํ‚ค์ง€ ์•ˆ์— ๋„ฃ์–ด์•ผ ํ•จ
  • ๊ตฌ์กฐ์  ์ž์œ ๋„๊ฐ€ ๋‚ฎ๊ณ  ๋ชจ๋“ˆํ™”๊ฐ€ ์ œํ•œ๋จ

๐Ÿ”น ์˜ˆ์‹œ: Expect / Actual

  • commonMain/androidMain/iosMain ๋™์ผ ํŒจํ‚ค์ง€, ๋™์ผ ๋„ค์ด๋ฐ
  • ์ •ํ•ด์ง„ ๋ฃฐ์„ ๋ฐ˜๋“œ์‹œ ์ง€์ผœ์•ผ ํ•ด์„œ ์ฒ˜์Œ์—” ์ƒ๋‹นํžˆ ํ—ท๊ฐˆ๋ฆฌ๊ณ  ์ƒ์‚ฐ์„ฑ์ด ๋–จ์–ด์ง

โš ๏ธ ๊ฐœ๋ฐœํ•  ๋•Œ๋งˆ๋‹ค โ€œ์ด๊ฑด ์–ด๋””์— ๋„ฃ์–ด์•ผ ํ•˜์ง€?โ€ ๋ผ๊ณ  ์ฐพ์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐ˜๋ณต๋จ
โ†’ ๊ณ ๋ฏผ ์‹œ๊ฐ„ ์ฆ๊ฐ€
โ†’ ์œ ์ง€๋ณด์ˆ˜ ๋‚œ์ด๋„ ์ฆ๊ฐ€


3๏ธโƒฃ

iOS ๋นŒ๋“œ ๋ฌธ์ œ

KMP๋ฅผ ๋„์ž…ํ•œ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์€ iOS ๊ณต์šฉ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด์—ˆ๋Š”๋ฐโ€ฆ

  • iOS์—์„œ ๊ณตํ†ต ๋ชจ๋“ˆ ํ•จ์ˆ˜๊ฐ€ ์ธ์‹์ด ์•ˆ ๋˜๊ฑฐ๋‚˜
  • ๋นŒ๋“œ๋Š” ๋˜์ง€๋งŒ ๋Ÿฐํƒ€์ž„์—์„œ ํ•จ์ˆ˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฌธ์ œ ๋ฐœ์ƒ
  • KMP + Swift ์—ฐ๊ฒฐ ๊ณผ์ •๋„ ์‰ฝ์ง€ ์•Š์Œ

โ— ์ด์Šˆ ๋ถ„์„ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋‹ค ๋ณด๋‹ˆ, ๋ฐ๋“œ๋ผ์ธ ์•ˆ์— ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋๋‚ผ ์ˆ˜ ์—†๋‹ค๋Š” ํŒ๋‹จ์ด ์ƒ๊ฒผ๋‹ค.


๐Ÿง  ์ตœ์ข… ํŒ๋‹จ

์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์„ ๋งค๋ฒˆ ํ•ด๊ฒฐํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ์—๋Š”

  • ์ผ์ • ์••๋ฐ•
  • ๊ธฐ๋Šฅ ์š”๊ตฌ ์ฆ๊ฐ€
  • KMP ๊ฒฝํ—˜ ๋ถ€์กฑ
  • ์‹ค์„œ๋น„์Šค ์•ˆ์ •์„ฑ

์ด ๋„ค ๊ฐ€์ง€ ์กฐ๊ฑด์ด ๋„ˆ๋ฌด ๋ถ€๋‹ด์ด์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํŒ€์žฅ๋‹˜๊ป˜ ํ˜„์žฌ ์ƒํ™ฉ์„ ์†”์งํ•˜๊ฒŒ ๊ณต์œ ํ–ˆ๊ณ ,

Android ์šฐ์„  ๊ฐœ๋ฐœ โ†’ iOS๋Š” ๋’ค์—์„œ ๋ณ„๋„๋กœ ์ง„ํ–‰

์ด๋ ‡๊ฒŒ โ€œTwo Track ์ „๋žตโ€์œผ๋กœ ๊ฐ€๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

ํŒ€์žฅ๋‹˜์ด ์ดํ•ดํ•ด์ฃผ์‹  ๊ฒƒ๋„ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ–ˆ๊ณ ,

๋•๋ถ„์— ๊ณผ๋„ํ•œ ๋ฆฌ์Šคํฌ ์—†์ด ๋น ๋ฅด๊ฒŒ ๋ฐฉํ–ฅ์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.


๐Ÿ”™ 2์ฃผ๊ฐ„์˜ ํšŒ๊ณ 

์†”์งํžˆ ๋งํ•˜๋ฉดโ€ฆ

โ€œ2์ฃผ ๋™์•ˆ ๋‚œ ๋ญ˜ ํ•œ ๊ฑฐ์ง€โ€ฆ?โ€ ๋ผ๋Š” ์ƒ๊ฐ์ด ์ž ๊น ์Šค์ณค๋‹ค. ํ•˜์ง€๋งŒ ๊ณง ์ƒ๊ฐ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.

โœ” KMP๋ผ๋Š” ๊ธฐ์ˆ ์„ ์ง์ ‘ ์ฒด๊ฐํ•ด๋ดค๊ณ 

โœ” ๊ตฌ์กฐ์  ์ œ์•ฝ๊ณผ ๋ฌธ์ œ์ ์„ ๋ชธ์œผ๋กœ ์ดํ•ดํ–ˆ๊ณ 

โœ” ์•ž์œผ๋กœ KMP๋ฅผ ์–ธ์ œ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ธฐ์ค€์„ ์„ธ์› ๊ณ 

โœ” ํŒ€ ๋ฐฉํ–ฅ์„ฑ์— ๋„์›€์„ ์ค„ ํŒ๋‹จ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์—ˆ๋‹ค

์ด๊ฑด ๊ฒฐ์ฝ” ํ—›๋œ ์‹œ๊ฐ„์ด ์•„๋‹ˆ์—ˆ๋‹ค.

์˜คํžˆ๋ ค ๋” ํŠผํŠผํ•œ Android ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€ ์ž์‹ ๊ฐ์ด ์ƒ๊ฒผ๋‹ค.


๐Ÿ”ฅ ์•ž์œผ๋กœ์˜ ๋ชฉํ‘œ

Android ์•ฑ์ด ํ˜„์žฌ ํšŒ์‚ฌ์˜ ํ•ต์‹ฌ์ด๋‹ค.

ํŒ€์žฅ๋‹˜์˜ ์‹ ๋ขฐ์— ๋ณด๋‹ตํ•˜๊ธฐ ์œ„ํ•ด

โ†’ ๋” ์™„์„ฑ๋„ ๋†’์€ ์•„ํ‚คํ…์ฒ˜

โ†’ ๋” ์•ˆ์ •์ ์ธ ์ฝ”๋“œ

โ†’ ๋” ๋น ๋ฅธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

์„ ๋ชฉํ‘œ๋กœ ๋‹ค์‹œ Android ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์˜ˆ์ •์ด๋‹ค.


โœจ ๋งˆ๋ฌด๋ฆฌ

๋Œ๊ณ  ๋Œ์•„ ๋‹ค์‹œ Android ๋‹จ๋… ๊ฐœ๋ฐœ๋กœ ๋Œ์•„์™”์ง€๋งŒ,

์ง€์‹๋„ ๋Š˜์—ˆ๊ณ , ์‹ค์ „ ๊ฐ๊ฐ๋„ ์ข‹์•„์กŒ๊ณ ,

์•ž์œผ๋กœ KMP๋ฅผ ์ ์šฉํ•  ๋•Œ ์‹คํŒจ ์—†์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝํ—˜์„ ์Œ“์€ ์…ˆ์ด๋‹ค.

์ด์ œ ๋‹ค์‹œ Android ์ฝ”๋“œ ์“ฐ๋Ÿฌ ๊ฐ„๋‹ค.

๐Ÿ”ฅ โ€œ๋‹ค์‹œ ํ™”์ดํŒ…!โ€

profile
์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘!!

0๊ฐœ์˜ ๋Œ“๊ธ€