An interview with Henning Koch, Creator of Unpoly

Henning Koch, Unpoly์˜ ์ฐฝ์‹œ์ž ์ค‘ ํ•œ ๋ช…๊ณผ ์ธํ„ฐ๋ทฐํ•˜๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. Unpoly๋Š” intercooler.js์™€ ๋ณ‘ํ–‰ํ•˜์—ฌ ๊ฐœ๋ฐœ๋œ ํ•˜์ดํผ๋ฏธ๋””์–ด ์ง€ํ–ฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ธํ„ฐ๋ทฐ์— ์‘ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Q: ๋จผ์ €, ๋…์ž๋“ค์—๊ฒŒ ๋‹น์‹ ์˜ ์ง์—…์ , ๊ธฐ์ˆ ์  ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค! ์ €๋Š” ํ˜„์žฌ makandra๋ผ๋Š” ๋ฃจ๋น„ ์˜จ ๋ ˆ์ผ์ฆˆ(Ruby on Rails) ์ปจ์„คํŒ… ํšŒ์‚ฌ์˜ ๊ฐœ๋ฐœ ์ฑ…์ž„์ž๋ฅผ ๋งก๊ณ  ์žˆ์œผ๋ฉฐ, 2009๋…„์— ๊ณต๋™ ์„ค๋ฆฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ „์—๋Š” ์›น ๊ฐœ๋ฐœ์ž๋กœ ํ”„๋ฆฌ๋žœ์„œ๋กœ ํ™œ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ผ์˜ ๋งฅ๋ฝ์€ ์—ฌ๋Ÿฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋™์‹œ์— ์ž‘์—…ํ•˜๊ณ , ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠน์ • ์ฃผ๊ฐ„์— ์šฐ๋ฆฌ๋Š” ๊ต์œก, ์ž๋™์ฐจ, ์‚ฌ์ด๋ฒ„ ๋ณด์•ˆ ๋“ฑ ๋‹ค์–‘ํ•œ ์‚ฐ์—… ๋ถ„์•ผ์˜ 10๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Unpoly๋Š” ๊ณ ๊ฐ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ํŒจํ„ด์—์„œ ์ถ”์ถœ๋œ ๊ฒฐ๊ณผ๋ฌผ์ž…๋‹ˆ๋‹ค.

Q: intercooler.js๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ ์ฃผ์š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋‹น์‹œ ์ธ๊ธฐ ์žˆ๋˜ SPA ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: Angular, ExtJS)๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์‹ซ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. Unpoly์—๋„ ๋น„์Šทํ•œ ์—ญ์‚ฌ๊ฐ€ ์žˆ๋‚˜์š”?

์šฐ๋ฆฌ ํŒ€์€ ์‚ฌ์‹ค ํ•œ๋™์•ˆ AngularJS์— ์ „์ ์œผ๋กœ ์˜์กดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ฐฉ๋Œ€ํ•œ jQuery ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ตฌ๊ธ€์ด Angular 2 ๋ฆฌ๋ผ์ดํŠธ๋กœ AngularJS๋ฅผ ์ค‘๋‹จํ–ˆ์„ ๋•Œ, ์šฐ๋ฆฌ๋Š” ๊ทธ ์‹œ๊ธฐ๋ฅผ ๋Œ์•„๋ณด๋ฉฐ ํ˜ผํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. SPA ๋ชจ๋ธ์— ์ ํ•ฉํ•œ ๋ช‡ ๊ฐ€์ง€ ์•ฑ์„ ๊ตฌ์ถ•ํ–ˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ๋Š” ๋” ํฐ ์ฝ”๋“œ๋ฒ ์ด์Šค, ๋” ๋งŽ์€ ์ข…์†์„ฑ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋กœ์ง ๋ถ„ํ• , ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฏธ ์žˆ๋Š” ๊ณณ(์„œ๋ฒ„)์—์„œ ํ•„์š”ํ•œ ๊ณณ(๋ธŒ๋ผ์šฐ์ €)์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ API ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋กœ ๊ณ ํ†ต๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ ์ง„์  ํ–ฅ์ƒ์„ ๋‹ค์‹œ ์‹œ๋„ํ–ˆ์ง€๋งŒ, ์ด๋ฒˆ์—๋Š” ์ˆ˜๋™์œผ๋กœ AJAX ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฐœ๋ณ„ DOM ์š”์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์—์„œ ๋ฒ—์–ด๋‚˜ ๊ณ ๊ธ‰ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ โ€œHTML6์ด ์„œ๋ฒ„ ๋ Œ๋”๋ง๋œ ์•ฑ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๋ฉด ์–ด๋–ค ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ ๊นŒ?โ€œ๋ผ๋Š” ๊ฐ€์ƒ์˜ HTML6 ์‚ฌ์–‘์„ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ๊ณ  ์‹คํ—˜์ด Unpoly๋กœ ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค.

Q: Unpoly๋Š” ๋งค์šฐ โ€œ๋ฐฐํ„ฐ๋ฆฌ ํฌํ•จโ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ ์ง„์  ํ–ฅ์ƒ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ๋„ Rails ๊ฐœ๋ฐœ์ž์ธ ๊ฑธ๋กœ ์•Œ๊ณ  ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์ด Unpoly ์ ‘๊ทผ ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ๋ฏธ์ณค๋‚˜์š”?

ํ™•์‹คํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค! Rails์ฒ˜๋Ÿผ Unpoly๋„ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•๋ ฅํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋ช…์‹œ์ ์ธ ์„ค์ •๋ณด๋‹ค ๋น„์นจ์Šต์  ๊ด€๋ก€๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Unpoly๊ฐ€ ๋ชจ๋“  ๋งํฌ์™€ ํผ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •ํ•˜๋ ค๋ฉด ์ „์—ญ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, HTML์„ ์ „ํ˜€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

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

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

Q: Unpoly๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•˜์ดํผ๋ฏธ๋””์–ด, REST ๋“ฑ์— ๋Œ€ํ•ด ๋งŽ์ด ์ƒ๊ฐํ–ˆ๋‚˜์š”? ๊ทธ๋Ÿฐ ๊ฒƒ๋“ค์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‚˜์š”? ํฅ๋ฏธ๋กœ์šด๊ฐ€์š”?

์ €๋„ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ๋ฌธ์„œ๊ฐ€ UI์™€ ์ฝ˜ํ…์ธ ๋ฅผ ํ•จ๊ป˜ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ €์—๊ฒŒ๋Š” 1990๋…„๋Œ€์— ๋ฌธ์ž ๊ธฐ๋ฐ˜ BBS UI์™€ WinHelp ํŒŒ์ผ์—์„œ ์‹œ์ž‘๋˜์—ˆ๊ณ , ๊ฒฐ๊ตญ ์›น์ด ๋ชจ๋“  ๊ฒƒ์„ ๋Œ€์ฒดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋‚  ์ €๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ์ฒ ํ•™์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ, ํ•˜์ดํผ๋ฏธ๋””์–ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ ์€ ์ฝ”๋“œ๋กœ ์ข‹์€ UI ์ถฉ์‹ค๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋‹ฌ์ฝคํ•œ ์ง€์ ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ํ•˜์ดํผ๋ฏธ๋””์–ด๊ฐ€ SPA ๋ชจ๋ธ๋ณด๋‹ค ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SPA ๋ชจ๋ธ์˜ ์ด๋ก ์ ์ธ ํ•œ๊ณ„์™€ ๋Œ€๋ถ€๋ถ„์˜ SPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์‚ฌ์ด์—๋Š” ์—„์ฒญ๋‚œ ๊ดด๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. SPA๋Š” ๋‚™๊ด€์ ์ธ UI๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ(์ด๋Š” ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค!), ์ด๋Š” JSON ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฐ๊ฒฐ์ด ๋ถˆ์•ˆ์ •ํ•œ ํ™˜๊ฒฝ์—์„œ ์˜๋ฏธ ์žˆ๋Š” ์ƒํ˜ธ์ž‘์šฉ์„ ์‹œ๋„ํ•˜๋ฉด, ๋งŽ์€ SPA๋Š” ์Šคํ”ผ๋„ˆ์™€ ๋นˆ ํŽ˜์ด์ง€๋กœ ์ „๋ฝํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Q: Unpoly์—์„œ ์–ป์€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์  ๊ตํ›ˆ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋งŽ์€ ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ํฌ์ปค์Šค ๊ด€๋ฆฌ, ๋™์‹œ ์ž…๋ ฅ, ๋ถˆ์•ˆ์ •ํ•œ ์—ฐ๊ฒฐ ๋“ฑ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํŽ˜์ด์ง€ ์ „ํ™˜์„ ์—๋ฎฌ๋ ˆ์ดํŠธํ•  ๋•Œ, ๋™์ผํ•œ ์ˆ˜์ค€์˜ ์ •ํ™•์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ๋งˆ์ดํฌ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ React๋ฅผ 2000๋ฐ”์ดํŠธ๋กœ ์žฌ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ์ฃผ์žฅํ•  ๋•Œ๋งˆ๋‹ค ์ด ์ ์„ ํ•ญ์ƒ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค ํฌ๊ธฐ์˜ ์ ˆ๋ฐ˜์„ ์ค„์ด๋ ค๋ฉด ๋Œ€๊ฐ€๋กœ ์ผ๋ถ€ ์ •ํ™•์„ฑ์„ ํฌ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.