Etherpad-lite: RFC : ์žฌ ์ž‘์„ฑ์— ๋Œ€ํ•œ ์ƒ๊ฐ (์•Œ์•„)

์— ๋งŒ๋“  2018๋…„ 01์›” 31์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ether/etherpad-lite

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

์ด ๋ชจ๋“  ๊ฒƒ์ด ์˜ค๋Š˜ ์–ด๋–ป๊ฒŒ ์“ธ์ง€ ์ƒ๊ฐํ•˜๊ฒŒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋” ์•ˆ์ •๋˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ์•„์ง ํ™•๋ฆฝ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ๋ฐ”ํ€ด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌ๋ฐœ ๋ช…ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ ํ˜• ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ typescript๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋” ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์ด ๋” ์‰ฝ๊ฒŒ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ˜์‘์œผ๋กœ ์ƒˆ ํŽธ์ง‘๊ธฐ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜์žˆ๋Š” ํŽธ์ง‘๊ธฐ๊ฐ€์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋ณ„ ์ฝ˜ํ…์ธ  ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ฒ„๊ทธ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ฉด ๋‚˜๋จธ์ง€ API ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์‚ฌ ์ฝ”๋“œ๊ฐ€ ์†์ƒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

Question

๋ชจ๋“  7 ๋Œ“๊ธ€

@Pita ๋Š” ๋‹ค์‹œ ์ž‘์„ฑ๋œ Etherpad๊ฐ€ ํ˜„์žฌ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์ง€ ๋งŒ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ์•„์ด๋””์–ด๋กœ ๊ฐœ์„  ํ•  ์‚ฌํ•ญ :

  • ์ฝ˜ํ…์ธ ๋ฅผ ํŽธ์ง‘ ํ•  ์ˆ˜์—†๋Š” React ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” iframe ํญํฌ์ˆ˜๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์ฒ˜๋ฆฌํ•˜๊ธฐ๊ฐ€ ์•…๋ชฝ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” Etherpad-core์™€ ๊ทธ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด๋ถ€์˜ ๋งŽ์€ ๊ฒƒ๋“ค์„ ๋ง๊ฐ€๋œจ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋” ๊นจ๋—ํ•˜๊ณ  ๋‹จ์ˆœํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ๋๋‚˜์•ผํ•˜๋Š” ๋น„์šฉ์ž…๋‹ˆ๋‹ค.
  • ๋” ๋งŽ์€ TDD ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ๋ณด์œ ํ•œ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋Š” Etherpad-lite๊ฐ€ ๋‹ค์‹œ ์ž‘์„ฑ ๋  ๋•Œ ์›๋ž˜ Etherpad ์ฝ”๋“œ์— ๋Œ€ํ•ด ์•„์ฃผ ์ข‹์€ ์ง€์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ข‹์€ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ํ™•๋ณดํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๊นจ๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜์ง€ ์•Š๊ณ  ํŽธ์ง‘์ž์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ace2_inner.js ์—์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊นจ๋Š” ๊ฒƒ์ด ๊ฐœ์ธ์ ์œผ๋กœ ํ•ญ์ƒ ๋‘๋ ค์›Œํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Etherpad๊ฐ€ ์ฒ˜๋ฆฌ ํ•  ํ•„์š”๊ฐ€์—†๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๊ทธ ์‚ฌ๋žŒ๋“ค์ด ์šฐ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‹ค๋ฅธ ๊ฒƒ๋“ค์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. :-)

์˜ˆ, ์ด๊ฒƒ์ด ์ข‹์€ ์•„์ด๋””์–ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜๋ฉฐ ๊ทธ ํ›„์—๋Š” Etherpad๊ฐ€

Rust์—์„œ ์žฌ ์ž‘์„ฑ (๋˜๋Š” ๊ทธ ์ผ๋ถ€)์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ณผ์žฅ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ์•ˆ์ „ํ•˜๊ณ  ๋นจ๋ผ์•ผํ•˜๋Š” ์‹œ์Šคํ…œ์— ๋งŽ์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Rust์—์„œ ์žฌ ์ž‘์„ฑ (๋˜๋Š” ๊ทธ ์ผ๋ถ€)์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ณผ์žฅ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ์•ˆ์ „ํ•˜๊ณ  ๋นจ๋ผ์•ผํ•˜๋Š” ์‹œ์Šคํ…œ์— ๋งŽ์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Rust์˜ ํŒฌ์ด์ง€๋งŒ ์ˆœ์ˆ˜ํ•œ Rust ์„œ๋ฒ„ ๋‚˜ wasm ํ”„๋ก ํŠธ ์—”๋“œ๋ฅผํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ด๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€ C / C ++ ๋Œ€์‹  Rust๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ... ์˜ˆ๋ฅผ ๋“ค์–ด Neon Rust / Node ๋ฐ”์ธ๋”ฉ์€ ์˜ค๋Š˜๋‚  ๊ฝค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : https://github.com/neon-bindings/neon

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

@lpagliari์— ๋™์˜ํ•˜๋ฉด ๊ธฐ์กด Etherpad ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์‹œ ์ƒ๊ฐํ•˜๊ณ  ๊นจ๋œจ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ–๋Š” ๋ชฉํ‘œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‚ฌ์šฉํ•˜๋Š” ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹๋ณด๋‹ค React ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋” ์ž˜ ์ œ๊ณต ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ์›น ์•ฑ ์ง€์นจ์˜ ์ „์ฒด ์„ธํŠธ๋„ ์‚ดํŽด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด React์˜ ํ”„๋ก ํŠธ ์—”๋“œ ์žฌ ์ž‘์„ฑ์— ๋™์˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๋‚˜์ค‘์— ๋ฐฑ์—”๋“œ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@fralix ์ €๋Š” Rust๋ฅผ ์ง์ ‘ ํ”Œ๋ ˆ์ดํ–ˆ๊ณ  ๊ทธ ๋’ค์— ์ˆจ์€ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์—

@rhelmer ๋ชจ๋ฐ”์ผ์˜ ํ˜„์žฌ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ”„๋ก ํŠธ ์—”๋“œ ์žฌ ์ž‘์„ฑ์„ ์œ„ํ•ด ์ด๊ฒƒ์„ ์šฐ์„  ์ˆœ์œ„๋กœ๋‘๋ฉด ์ •๋‹นํ™”ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,
๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ณ๋‹ค ๋ณด๋Š” ๋™์•ˆ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค (์ด๋” ๋ผ์ดํŠธ ์„ค์น˜๋ฅผ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค). ์ด ๋ฉ‹์ง„ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ˜„๋Œ€์ ์ธ ์›น ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ์žฌ ์ž‘์„ฑ์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด, ํŠนํžˆ ๋ฐ˜์‘ํ•˜๋Š” ๋Œ€์‹  preact (ํ›จ์”ฌ ๋” ๋น ๋ฅธ vdom diffing / rendering)๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ „์ฒด ๋ฐ˜์‘ ์ƒํƒœ๊ณ„์™€ ์ ˆ๋Œ€์ ์œผ๋กœ ํ˜ธํ™˜๋˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ˆซ์ž๋Š” https://github.com/Rich-Harris/js-framework-benchmark ๋ฅผ ์ฐธ์กฐ

๋˜ํ•œ react-material-ui, react-bootstrap ๋“ฑ๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฌด๋ฃŒ๋กœ ์‘๋‹ต ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ SASS์™€ ๋งŽ์ด ๋งŒ๋‚˜๊ณ  ์–ด์šธ๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฒˆ๋“ค๋ง์„ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์›นํŒฉ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค (ํ˜„์žฌ ์†Œ์Šค ๋งต ๋ฐ ๋ฐ”๋ฒจ ์ง€์›์„ ํ†ตํ•œ ํ•ซ ๋ฆฌ๋กœ๋”ฉ ๋ฐ ๋””๋ฒ„๊น…์„ ํ†ตํ•œ ์ตœ๊ณ ์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜).

๋˜ํ•œ REDUX ๋˜๋Š” ์œ ์‚ฌํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด mobx๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ES7 ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ (๋งค์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ”๋ฒจ ํ”Œ๋Ÿฌ๊ทธ์ธ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ์ƒํƒœ ๊ด€๋ฆฌ ์ƒ์šฉ๊ตฌ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ฝ”๋”ฉ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๊ด€์ฐฐ ๊ฐ€๋Šฅ ํ•ญ๋ชฉ์„ ์ •์˜ํ•˜๋ฉด ๋ชจ๋“  UI๊ฐ€ mobx์— ์˜ํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ๋ฐ˜์‘ ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

@Pita ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰