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๋ฐ์ดํธ๋ก ์ฌ๊ตฌํํ๋ค๊ณ ์ฃผ์ฅํ ๋๋ง๋ค ์ด ์ ์ ํญ์ ๊ธฐ์ตํฉ๋๋ค. ๋ฒ๋ค ํฌ๊ธฐ์ ์ ๋ฐ์ ์ค์ด๋ ค๋ฉด ๋๊ฐ๋ก ์ผ๋ถ ์ ํ์ฑ์ ํฌ๊ธฐํด์ผ ํฉ๋๋ค.