DIY Server Driven UI: A 4-Year Journey in Mobile App Innovation by HARRIET TAYLOR & JIMMY RAY

DIY Server Driven UI: A 4-Year Journey in Mobile App Innovation by HARRIET TAYLOR & JIMMY RAY

์„œ๋ฒ„ ์ฃผ๋„ UI: ์†Œ๊ฐœ ๋ฐ ํŒ€ ์—ญํ• 

์„น์…˜ ๊ฐœ์š”: ์ด ์„น์…˜์—์„œ๋Š” ์„œ๋ฒ„ ์ฃผ๋„ UI์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ณ , ํŒ€์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ฃผ๋„ UI ์•„ํ‚คํ…์ฒ˜

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

Auto Trader: ํšŒ์‚ฌ ์†Œ๊ฐœ ๋ฐ ๊ธฐ์ˆ ์  ์ธก๋ฉด

์„น์…˜ ๊ฐœ์š”: Auto Trader์˜ ํšŒ์‚ฌ ์†Œ๊ฐœ์™€ ๊ธฐ์ˆ ์  ์ธก๋ฉด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ฉฐ, ํšŒ์‚ฌ์˜ ์—ญ์‚ฌ์™€ ํ˜„์žฌ ์ƒํ™ฉ์„ ๋‹ค๋ฃฌ๋‹ค.

Auto Trader ์†Œ๊ฐœ

  • ์˜๊ตญ ์ตœ๋Œ€ ๋””์ง€ํ„ธ ์ž๋™์ฐจ ๊ฑฐ๋ž˜ ์‹œ์žฅ ์šด์˜
  • 1996๋…„ ์ฒซ ์›น์‚ฌ์ดํŠธ ์ถœ์‹œ ์ดํ›„ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์šด์˜
  • ํ•˜๋ฃจ์— 18๋ฐฑ๋งŒ ๋Œ€์˜ ์ฐจ๋Ÿ‰ ๊ฒ€์ƒ‰ ์ œ๊ณต, ์•ฝ 8000๋งŒ ๋ช…์˜ ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋งค์›” ๋ฐœ์ƒ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„๋ฉ”์ธ ๋ฐ ๋ฌธ์ œ์ 

์„น์…˜ ๊ฐœ์š”: Auto Trader ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„๋ฉ”์ธ๊ณผ ํ˜„์žฌ ์ง๋ฉดํ•œ ๋ฌธ์ œ์ ์— ๋Œ€ํ•ด ๋‹ค๋ฃฌ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„๋ฉ”์ธ ๋ถ„์„

  • ์•ˆ๋“œ๋กœ์ด๋“œ์™€ iOS์šฉ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํด๋ผ์ด์–ธํŠธ ๋น„๊ต
  • ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‘ ๋ฒˆ ํ•„์š”ํ•˜๋ฉฐ ๋กค๋ฐฑ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์œผ๋กœ ์ธํ•œ ์ง€์—ฐ ๋ฌธ์ œ ๋ฐœ์ƒ

๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ํƒ๊ตฌ

์„น์…˜ ๊ฐœ์š”: ๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค์˜ ๋ณต์žก์„ฑ๊ณผ ์ง€์—ฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ์„ ์กฐ์‚ฌํ•œ๋‹ค.

๋ฆด๋ฆฌ์Šค ํ”„๋กœ์„ธ์Šค ๋ถ„์„

  • ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ „๋‹ฌ๊นŒ์ง€ ์ตœ๋Œ€ ํ•œ ๋‹ฌ๊นŒ์ง€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ณต์žก์„ฑ ํŒŒ์•…

์„œ๋ฒ„ ์ฃผ๋„ UI ๋„์ž… ๊ฒฐ์ •

์„น์…˜ ๊ฐœ์š”: ์ด ์„น์…˜์—์„œ๋Š” ํšŒ์‚ฌ๊ฐ€ ์„œ๋ฒ„ ์ฃผ๋„ UI๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๋ฐฐ๊ฒฝ๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ๋ณ€ํ™”์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Flutter ๋ฐ ์›น ๋ทฐ ๊ณ ๋ ค

  • ์•ฑ์˜ ์™„์ „ํ•œ ์žฌ์ž‘์„ฑ์€ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋˜์–ด ํ”Œ๋Ÿฌํ„ฐ(Flutter)์™€ ์›น ๋ทฐ(Web Views)๋ฅผ ๊ณ ๋ คํ•จ.
  • ํ”Œ๋Ÿฌํ„ฐ๋Š” ๊ตฌ๊ธ€์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•˜๋‚˜์˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ.

์„œ๋ฒ„ ์ฃผ๋„ UI์˜ ์žฅ์ 

  • Spotify ๋“ฑ์˜ ๊ธฐ์—…๋“ค์ด ์„œ๋ฒ„ ์ฃผ๋„ UI๋ฅผ ์ฑ„ํƒํ•˜๋ฉฐ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ํฐ ๋„์›€์„ ๋ฐ›์•˜์Œ.
  • ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋ฐ˜ UI ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ค‘๋ณต ์ž‘์—…์„ ์ค„์—ฌ ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค ๊ฐ„์†Œํ™” ๋ฐ ๊ฐ€์†ํ™”๋ฅผ ๊ฒฝํ—˜ํ•จ.

Composable: ์„œ๋ฒ„ ์ฃผ๋„ UI ์‹œ์Šคํ…œ ๋ช…๋ช…

์„น์…˜ ๊ฐœ์š”: Composable๋ผ๋Š” ์„œ๋ฒ„ ์ฃผ๋„ UI ์‹œ์Šคํ…œ ๋ช…์นญ ์„ ํƒ๊ณผ ์ด์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋‹ค๋ฃธ.

Composable ์‹œ์Šคํ…œ ๋ช…๋ช…

  • Design Systems์™€ ํ˜‘๋ ฅํ•˜์—ฌ Composable ์‹œ์Šคํ…œ ๋ช…๋ช… ๊ฒฐ์ •.
  • Swift UI ๋ฐ Jetpack Compose ๋“ฑ ๋„ค์ดํ‹ฐ๋ธŒ ํ”Œ๋žซํผ์˜ UI ํ‚คํŠธ ํƒ์ƒ‰ ํ›„ Android์šฉ Jetpack Compose ์„ ํƒ.

์š”๊ตฌ ์‚ฌํ•ญ

  • Design System ์ •์˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•  ์ปดํฌ๋„ŒํŠธ ๊ฒฐ์ •.

Java์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์†Œ๊ฐœ

์ด ์„น์…˜์—์„œ๋Š” Java์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Java์˜ ๊ธฐ๋Šฅ

  • ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ด๊ณ  ํ•จ์ˆ˜ํ˜•์ด๋ฉฐ ํƒ€์ž… ์•ˆ์ „ํ•œ Java๋ฅผ ํ†ตํ•ด ๋น„์ฆˆ๋‹ˆ์Šค๊ฐ€ ์•ฑ ์ œ์ž‘์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.
  • Kotlin Multiplatform์„ ํ™œ์šฉํ•˜์—ฌ Java๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JavaScript ๋ฐ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์–ธ์–ด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ์ „๋žต๊ณผ ์‹œ์Šคํ…œ ์„ค๊ณ„

๋ฆด๋ฆฌ์Šค ์ „๋žต๊ณผ ์‹œ์Šคํ…œ ์„ค๊ณ„์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ์ „๋žต

  • ์ดˆ๊ธฐ์— ๋ชจ๋“  ๊ฒƒ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋งŒ๋“ค๋ ค๋Š” ์š•๊ตฌ๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์•ฝํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Agile ๋ฐฉ์‹์œผ๋กœ ์Šค์ผ€์ผ์„ ์ค„์—ฌ ํ˜„์žฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ตฌ์ถ•ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ณ€๊ฒฝ

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ƒ์„ธ ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

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

์„œ๋ฒ„ ์ฃผ๋„ UI ๋ฐ ๊ธฐ๋Šฅ ํ™•์žฅ

์„œ๋ฒ„ ์ฃผ๋„ UI์™€ ๊ธฐ๋Šฅ ํ™•์žฅ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ฃผ๋„ UI

  • ์ƒˆ๋กœ์šด ๋ฐฑ์—”๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ์ฃผ๋„ UI ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ผ์ด์–ธํŠธ๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ ์ง€ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์—…๋ฐ์ดํŠธ ํ•„์š”์„ฑ ์œ ์ง€.

์•ฑ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๋ฐ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต

์•ฑ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์™€ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต ๊ณผ์ •์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ

  • ์ดˆ๊ธฐ ๋ฒ„ํŠผ, ๋งํฌ, ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ ๋“ฑ ๊ฐ„๋‹จํ•œ ์š”์†Œ ์ถ”๊ฐ€ ํ›„ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ฒ˜๋ฆฌ.

API ๊ฐœ๋ฐœ ๋ฐ ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „ ๊ด€๋ฆฌ

์„น์…˜ ๊ฐœ์š”: API ๊ฐœ๋ฐœ ์‹œ ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  ์ด์ „ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉฐ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋จ์— ๋”ฐ๋ผ ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค.

API ์—…๋ฐ์ดํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ง€์›

  • ํด๋ผ์ด์–ธํŠธ๋Š” ํ•˜๋‚˜์˜ API ๋ฒ„์ „๋งŒ ์ง€์›ํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•จ.
  • ๊ฐ ์—”๋“œํฌ์ธํŠธ๋Š” ์ตœ์†Œ API ๋ฒ„์ „์„ ์ง€์ •ํ•˜์—ฌ ํ•ด๋‹น ๋ฒ„์ „ ์ด์ƒ์˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ UI๋ฅผ ์ œ๊ณตํ•จ.
  • ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋‚˜ ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•  ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฌ์ „ํžˆ UI๋ฅผ ํ‘œ์‹œํ•˜์ง€๋งŒ ์‘๋‹ต ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ.

DSL(Domain Specific Language) ์†Œ๊ฐœ

์„น์…˜ ๊ฐœ์š”: DSL์˜ ํ•„์š”์„ฑ๊ณผ ์žฅ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , JSON ์ฒ˜๋ฆฌ์™€ ๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ DSL์˜ ์—ญํ• ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

DSL๊ณผ JSON ์ฒ˜๋ฆฌ

  • DSL์€ HTML์ฒ˜๋Ÿผ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์–ธ์–ด๋กœ, JSON ์ฒ˜๋ฆฌ์™€ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•จ.
  • DSL์€ ์Šคํƒ€์ผ ๋ฐ ์œ ํ˜• ์•ˆ์ •์„ฑ์„ ๊ฐ•ํ™”ํ•˜๋ฉฐ, JSON ํŽ˜์ด๋กœ๋“œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ถ”์ƒํ™”ํ•จ.

DSL๊ณผ ๊ธฐ๋Šฅ ์ง‘ํ•ฉ

์„น์…˜ ๊ฐœ์š”: DSL์„ ํ†ตํ•ด ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ธฐ๋Šฅ ์ง‘ํ•ฉ์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

DSL๊ณผ ๊ธฐ๋Šฅ ์ง‘ํ•ฉ

์„œ๋ฒ„๋กœ ์‚ฌ์šฉ์ž์˜ ์‘๋‹ต์„ ๋ณด๋‚ด๊ณ  ๋ฐ›์•„์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์„น์…˜ ๊ฐœ์š”: ์‚ฌ์šฉ์ž์˜ ์‘๋‹ต์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ–ˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋…ผ๋ฆฌ์™€ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ตฌ์กฐ ํ•„์š”

  • ์‚ฌ์šฉ์ž์˜ ์‘๋‹ต์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์ด์ „ ๊ตฌ์กฐ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ–ˆ์Œ.
  • Redux๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ๋น„์Šทํ•œ ๋ฒ„์ „์„ ๋งŒ๋“ค์—ˆ์Œ.
  • Redux์—์„œ UI๊ฐ€ ์ €์žฅ์†Œ ๋‚ด ์ผ๋ จ์˜ key-value ์Œ์„ ๊ตฌ๋…ํ•˜๊ณ  ์•ก์…˜์„ ๋””์ŠคํŒจ์น˜ํ•˜๋Š” ๋ฐฉ์‹ ํ™•์ธ.

์Šคํ† ์–ด ๋ฐ UI ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋™์ž‘ ๋ฐฉ์‹

์„น์…˜ ๊ฐœ์š”: ์Šคํ† ์–ด์™€ UI ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ณผ์ • ์„ค๋ช….

์Šคํ† ์–ด ๋ฐ UI ์ปดํฌ๋„ŒํŠธ ์ƒํ˜ธ์ž‘์šฉ

  • ๊ฐ๊ฐ์˜ UI ์ปดํฌ๋„ŒํŠธ๋Š” ์Šคํ† ์–ด์—์„œ ์•ก์…˜ ์‹คํ–‰ ๊ฐ€๋Šฅ.
  • ์˜ˆ์‹œ: ๋‚˜์ด ์ž…๋ ฅ ์‹œ, ์•ก์…˜์„ ํ†ตํ•ด ๋‚˜์ด ํ•„๋“œ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ.

์•ก์…˜๊ณผ ์œ ํ˜•์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

์„น์…˜ ๊ฐœ์š”: ์•ก์…˜๊ณผ ๊ทธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํƒ๊ตฌ.

๋‹ค์–‘ํ•œ ์•ก์…˜ ์œ ํ˜•

  • ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ ์•ก์…˜์ด๋ฏ€๋กœ ๋‹ค์–‘ํ•œ ์ž…๋ ฅ ์œ ํ˜•์— ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ.

๋กœ์ง ๋ฐ ์•ก์…˜ ๊ด€๋ฆฌ

์„น์…˜ ๊ฐœ์š”: ๋กœ์ง๊ณผ ์•ก์…˜ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ์„ค๋ช….

๋กœ์ง ๋ฐ ์•ก์…˜ ๊ด€๋ฆฌ

  • ๋กœ์ง์€ ์—ฌ๋Ÿฌ ์Šคํ† ์–ด ๊ฐ„ ๊ณต์œ ๋˜๋ฉฐ, JavaScript๋กœ ์ƒํƒœ ๊ด€๋ฆฌํ•จ.

์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋น„๊ต

์„น์…˜ ๊ฐœ์š”: ์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋น„๊ต ๋ถ„์„.

์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

  • JavaScript๊ฐ€ ์„ฑ๋Šฅ ๋ฉด์—์„œ ์šฐ์ˆ˜ํ•˜์—ฌ JSON ๋Œ€์‹  ์„ ํƒ๋จ.

Kotlin Multiplatform ํ™œ์šฉ๋ฒ• ์†Œ๊ฐœ

์„น์…˜ ๊ฐœ์š”: Kotlin Multiplatform์œผ๋กœ ์ž‘์—… ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ด์  ์„ค๋ช….

Kotlin Multiplatform ํ™œ์šฉ๋ฒ•

๊ธฐ๋ฐ˜ ๋กœ์ง ๋ฐ DSL

์„น์…˜ ๊ฐœ์š”: ์ด ๋ถ€๋ถ„์—์„œ๋Š” ๊ธฐ๋ฐ˜ ๋กœ์ง๊ณผ DSL์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค. JavaScript๋กœ ๋ณ€ํ™˜๋œ ์Šคํ† ์–ด์˜ ๋ฐฑ์—”๋“œ์—์„œ ํ‚ค-๊ฐ’ ์Œ ๊ฐ’๊ณผ ์•ก์…˜๋งŒ ๋…ธ์ถœ๋˜์–ด ์žˆ์—ˆ์œผ๋ฉฐ, DSL์€ ํŒ€์— ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ฐ˜ ๋กœ์ง ๋ฐ DSL

  • JavaScript๋กœ ๋ณ€ํ™˜๋œ ์Šคํ† ์–ด์˜ ๋ฐฑ์—”๋“œ์—์„œ๋Š” ํ‚ค-๊ฐ’ ์Œ ๊ฐ’๊ณผ ์•ก์…˜์ด ๋…ธ์ถœ๋˜์–ด ์žˆ์—ˆ์Œ.
  • ํด๋ผ์ด์–ธํŠธ ๋‚ด๋ถ€์— ๋…ธ์ถœ๋œ ๊ฒƒ์€ ์ž‘์€ ๊ฒ€์€ ์ƒ์ž์ฒ˜๋Ÿผ ๋ณด์˜€์Œ.
  • DSL์€ ํŒ€์— ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ ๋‹ค๋ฅธ ํŒ€์ด ์‰ฝ๊ฒŒ ์ฐธ์—ฌํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์—ˆ์Œ.

ํŒ€ ์ฐธ์—ฌ์™€ ์™ธ๋ถ€ ํŒ€ ์œ ์ž…

์„น์…˜ ๊ฐœ์š”: ์ด ๋ถ€๋ถ„์—์„œ๋Š” ์ „์ฒด ํŒ€ ์ฐธ์—ฌ์™€ ์™ธ๋ถ€ ํŒ€์„ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌ์‹œํ‚ค๋Š” ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.

ํŒ€ ์ฐธ์—ฌ์™€ ์™ธ๋ถ€ ํŒ€ ์œ ์ž…

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

๊ธฐ๋Šฅ ํ™•์žฅ๊ณผ ๋„๊ตฌ ๋‹ค์–‘ํ™”

์„น์…˜ ๊ฐœ์š”: ์ด ๋ถ€๋ถ„์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ณต์„ ์œ„ํ•œ ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ํ™•์žฅ๊ณผ ๋„๊ตฌ ๋‹ค์–‘ํ™”

  • Spring Boot, Kotlin Multiplatform ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ  ๋ฐ ๋„๊ตฌ๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, Docker์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๋“ค๋„ ํ•„์š”ํ•จ.

์˜คํ”„๋ผ์ธ์—์„œ์˜ ๋””์ž์ธ ์‹œ์Šคํ…œ ๋„์ž…

์„น์…˜ ๊ฐœ์š”: ์˜จ๋ผ์ธ๊ณผ ์˜คํ”„๋ผ์ธ์˜ ์—ฐ๊ฒฐ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์˜คํ”„๋ผ์ธ ์ƒํƒœ์—์„œ๋Š” ๊ฒ€์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ์ง€์›์— ์ œํ•œ์ด ์žˆ์–ด ๋””์ž์ด๋„ˆ๋“ค์ด ์ œ์•ˆํ•˜๋Š” ๋””์ž์ธ์„ ํ•ญ์ƒ ์ง€์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ณ„์†ํ•ด์„œ ๋ฐœ์ „ํ•˜๊ณ  ์„ฑ์žฅํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋””์ž์ธ๊ณผ ํŠธ๋ Œ๋“œ์— ๋Œ€์‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜จ๋ผ์ธ ๋ฐ ์˜คํ”„๋ผ์ธ ์—ฐ๊ฒฐ์˜ ํ•œ๊ณ„

  • ๋””์ž์ด๋„ˆ๋“ค์ด ๋งŒ๋“  ๋‹ค์–‘ํ•œ ๋””์ž์ธ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๊ธฐ ์–ด๋ ค์›€
  • ํ–ฅํ›„ ๊ณ„ํš์œผ๋กœ ๋ฆฌ์น˜ ๋ ˆ์ด์•„์›ƒ ์ฒ˜๋ฆฌ, ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐœ์„  ๋“ฑ์„ ๊ณ ๋ ค ์ค‘
  • Cotlin Multiplatform ํ™œ์šฉ ํ™•๋Œ€ ๋ฐ ์ฝ”๋“œ ๊ณต์œ  ์ฆ๊ฐ€

๋ฏธ๋ž˜ ๊ณ„ํš ๋ฐ ๊ฐ์‚ฌ ์ธ์‚ฌ

์„น์…˜ ๊ฐœ์š”: Rich layout handling, dynamic UI for tablets, advanced action handling ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ํฌํ•จํ•œ ํ–ฅํ›„ ๊ณ„ํš ์†Œ๊ฐœ์™€ ์ฐธ์—ฌ์— ๋Œ€ํ•œ ๊ฐ์‚ฌ ์ธ์‚ฌ ์ „๋‹ฌ.

ํ–ฅํ›„ ๊ณ„ํš ๋ฐ ๊ฐ์‚ฌ ์ธ์‚ฌ

  • JM on conference ์ฐธ์—ฌ ์•ˆ๋‚ด
  • ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จ๋œ ๊ทœ์ • ์ค€์ˆ˜์— ๋Œ€ํ•œ ์งˆ๋ฌธ๊ณผ Facebook, Airbnb, Spotify์™€ ๊ฐ™์€ ๊ธฐ์—… ์‚ฌ๋ก€ ์–ธ๊ธ‰
  • ์•ฑ ์ ‘๊ทผ์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์งˆ๋ฌธ๊ณผ DSL์„ ํ†ตํ•œ ์ ‘๊ทผ์„ฑ ํƒœ๊ทธ ์ถ”๊ฐ€ ์„ค๋ช…

์ ‘๊ทผ์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ด€๋ฆฌ

์„น์…˜ ๊ฐœ์š”: ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐœ๋ฐœ์ž์™€ ํ˜‘๋ ฅํ•˜์—ฌ ์•ฑ์˜ ์ ‘๊ทผ์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋…ผ์˜.

์ ‘๊ทผ์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ด€๋ฆฌ

  • Force DSL์„ ํ™œ์šฉํ•˜์—ฌ ์ ‘๊ทผ์„ฑ ํƒœ๊ทธ ์ถ”๊ฐ€
  • ์˜คํ”„๋ผ์ธ ๋ชจ๋“œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ์„ค๋ช…
  • ์‚ฌ์šฉ์ž ์ธ์ฆ์€ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋˜๋ฉฐ ๋ณด์•ˆ์€ ์ค‘์š”์‹œ๋จ

Testing Process and Automation

์ด ์„น์…˜์—์„œ๋Š” ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋ ค์›€๊ณผ ์ž๋™ํ™”์— ๋Œ€ํ•ด ๋…ผ์˜๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ 

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

Wrap-up and Invitation to Engage

ํšŒ์˜๋ฅผ ๋งˆ์น˜๊ณ  ์ฐธ๊ฐ€์ž๋“ค์—๊ฒŒ ์งˆ๋ฌธ ๋ฐ ์˜๊ฒฌ์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ ์ œ๊ณต.

Wrap-up ๋ฐ ์ƒํ˜ธ์ž‘์šฉ ์ดˆ๋Œ€

  • ์ง€์›ํ•˜๋Š” ๋ฒ„์ „์„ ์ •๋ฆฌํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๊ฑฑ์ •์„ ์ค„์ž„.
Video description

For updates and more, join our community ๐Ÿ‘‰ https://www.linkedin.com/company/devoxx-united-kingdom Join us as we take you through Auto Traderโ€™s 4-year journey in crafting our Server-Driven UI framework (Composable) and the architecture that powers our mobile apps. Weโ€™ll delve into why we decided to build instead of buy, our choice of Kotlin and the designs that fuelled our success. From pitfalls to breakthroughs, this talk will be full of useful insights for anyone considering Server Driven UI themselves.