2018๋ XNUMX์ Kyiv Go ๋ชจ์:
์งํ์ : - ์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ! ์ฌ๊ธฐ ์์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ์ค๋ ์ฐ๋ฆฌ๋ Lyosha์ Vanya๋ผ๋ ๋ ๋ช
์ ๊ณต์ ์ฐ์ฌ๋ฅผ ๋ชจ์
จ์ต๋๋ค. ์๊ฐ์ด ์ถฉ๋ถํ๋ค๋ฉด ๋ ๊ฐ ๋ ์์ ๊ฑฐ์์. ์ฒซ ๋ฒ์งธ ๋ฐํ์๋ Alexey Grachev์
๋๋ค. ๊ทธ๋ GopherJS์ ๋ํด ์ค๋ช
ํ ๊ฒ์
๋๋ค.
Alexey Grachev(์ดํ โ AG): โ ์ ๋ Go ๊ฐ๋ฐ์์ด๊ณ Go๋ก ์น ์๋น์ค๋ฅผ ์์ฑํฉ๋๋ค. ํ๋ฐํธ์๋๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ๋๋ ์๊ณ , ์๋์ผ๋ก ๋ค์ด๊ฐ์ผ ํ ๋๋ ์์ต๋๋ค. ์ ๋ ํ๋ก ํธ์๋์์ Go์ ๋ํ ์ ์ ๊ฒฝํ๊ณผ ์ฐ๊ตฌ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๋ค.
์ ์ค์ ์ด๋ ์ต๋๋ค. ๋จผ์ Go๋ฅผ ํ๋ก ํธ์๋์์ ์คํํ๋ ค๋ ์ด์ ์ ๋ํด ์ด์ผ๊ธฐํ ๋ค์ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. Web Assembly์ GopherJS์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๋ฌํ ์๋ฃจ์
์ ์ํ๋ ๋ฌด์์ด๋ฉฐ ๋ฌด์์ ํ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ๋ก ํธ์๋์ ๋ฌด์จ ๋ฌธ์ ๊ฐ ์๋์?
๋ชจ๋๊ฐ ํ๋ฐํธ์๋์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ฐ ๋์ํฉ๋๊น?
ํ
์คํธ๊ฐ ์ถฉ๋ถํ์ง ์์ต๋๊น? ๋๋ฆฐ ๋น๋? ์ํ๊ณ? ๊ด์ฐฎ์.
ํ๋ก ํธ์๋์ ๊ดํด ๋๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ค ํ ๋ช ์ด ๊ทธ์ ์ฑ ์์ ๋งํ ๋ค์๊ณผ ๊ฐ์ ์ธ์ฉ๋ฌธ์ ์ข์ํฉ๋๋ค.
Javascript์๋ ์ ํ ์์คํ
์ด ์์ต๋๋ค. ์ด์ ์์
๊ณผ์ ์์ ์ง๋ฉดํ ๋ฌธ์ ๋ฅผ ์ธ๊ธํ๊ณ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ ํ ์์คํ ์ Javasript์์ ์ ํ ์์คํ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๊ฐ์ฒด ์ ํ์ ๋ํ๋ด๋ ์ค์ด ์์ง๋ง ์ค์ ๋ก ์ด๊ฒ์ ์ ํ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ TypeScript(Javasript์ ์ถ๊ฐ ๊ธฐ๋ฅ) ๋ฐ Flow(Javascript์ ์ ์ ์ ํ ๊ฒ์ฌ๊ธฐ)์์ ํด๊ฒฐ๋์์ต๋๋ค. ์ค์ ๋ก ํ๋ก ํธ์๋๋ ์ด๋ฏธ Javascript์ ์๋ชป๋ ์ ํ ์์คํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ง์ ์ ๋๋ฌํ์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์๋ ๋ช ๊ฐ์ง ๋ด์ฅ ๊ฐ์ฒด์ "๋ง๋ฒ" ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ Javascript์๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ด๋ฏธ jQuery์ ์ํด ํด๊ฒฐ๋์์ต๋๋ค(๋ชจ๋๊ฐ ์์
์ ํ์ํ ๋ชจ๋ ํ๋กํ ํ์
, ๋์ฐ๋ฏธ, ํจ์์ ํจ๊ป jQuery๋ฅผ ์ฌ์ฉํ์ต๋๋ค). ์ด์ ๋ชจ๋๊ฐ Lodash๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฝ๋ฐฑ ์ง์ฅ. ๋ด ์๊ฐ์ ๋ชจ๋ ์ฌ๋๋ค์ด ์ฝ 5๋
์ ์ Javascript ์ฝ๋๋ฅผ ๋ณธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ฝ๋ฐฑ์ ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๋ณต์กํ "๊ตญ์"์ฒ๋ผ ๋ณด์์ต๋๋ค. ์ด์ ์ด ๋ฌธ์ ๋ ํด๊ฒฐ๋์์ผ๋ฉฐ(ES-15 ๋๋ ES-16 ์ถ์๋ก) Javascript์ Promise๊ฐ ์ถ๊ฐ๋์ด ๋ชจ๋ ์ฌ๋์ด ์ ์ ๋ ์ฝ๊ฒ ์จ์ ์ด ์ ์๊ฒ ๋์์ต๋๋ค.
Promice ์ง์ฅ์ด ๋๋ํ ๋๊น์ง... ํ๋ก ํธ์๋ ์ฐ์
์ด ์ด๋ป๊ฒ ์ด์๋๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๊ทธ๋ค์ ํญ์ ์ด์ํ ์ ๊ธ ์์ผ๋ก ์ค์ค๋ก๋ฅผ ๋ชฐ๊ณ ๋ค๋๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ์ฝ์์ ์ง์ผฐ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์๋ก์ด ๊ธฐ๋ณธ ์์์ธ async/await๋ฅผ ์ถ๊ฐํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๋น๋๊ธฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. Async/await๋ ๋ค์ํ ์ธ์ด์์ ๊ฝค ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์์์
๋๋ค. Python๊ณผ ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋ฐ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ฝค ์ข์ต๋๋ค. ๋ฌธ์ ํด๊ฒฐ๋จ.
์ด๋ค ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์๋์? ํ๋ ์์ํฌ์ ๋ณต์ก์ฑ, ์ํ๊ณ ๋ฐ ํ๋ก๊ทธ๋จ ์์ฒด์ ๋ณต์ก์ฑ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ด ์ข ์ด์ํฉ๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด ๋ฐ ๊ธฐํ ๋๋ด์ ์ถ๊ฐํ ๋์ ๋ฌธ์ ๋ฅผ ์๊ณ ์์ต๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฉํฐ ํจ๋ฌ๋ค์์
๋๋ค. ์ด๋ ์ํ๊ณ๊ฐ ๋งค์ฐ ํฐ ํ์ฌ ํนํ ์๊ธํ ์์คํ
์
๋๋ค.
- ๋ชจ๋ ์ฌ๋์ ์๋ก ๋ค๋ฅธ ์คํ์ผ๋ก ๊ธ์ ์๋๋ค. ์ผ๋ถ๋ ๊ตฌ์กฐ์ ์ผ๋ก ์์ฑํ๊ณ , ์ผ๋ถ๋ ๊ธฐ๋ฅ์ ์ผ๋ก ์์ฑํ๋ฉฐ, ๊ฐ๋ฐ์๋ง๋ค ์๋ก ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์์ฑํฉ๋๋ค.
- ๋ค๋ฅธ ํจํค์ง์์, ๋ค๋ฅธ ํจํค์ง๋ฅผ ์ฌ์ฉํ ๋ ๋ค๋ฅธ ํจ๋ฌ๋ค์;
- Javasript์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ง์ "์ฌ๋ฏธ"๊ฐ ์์ต๋๋ค. Rambda ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฑ์ฅํ๊ณ ์ด์ ๋๊ตฌ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์ฝ์ ์ ์์ต๋๋ค.
- ์ด ๋ชจ๋ ๊ฒ์ด ์ํ๊ณ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ฉฐ ์์ฒญ๋๊ฒ ์ฑ์ฅํ์ต๋๋ค. ํจํค์ง๋ ์๋ก ํธํ๋์ง ์์ต๋๋ค. ์ผ๋ถ๋ Promise๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์ผ๋ถ๋ async/await๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ์ผ๋ถ๋ ์ฝ๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ๊ทธ๋ค์ ๋ํ ๋ค๋ฅธ ํจ๋ฌ๋ค์์ผ๋ก ๊ธ์ ์๋๋ค!
- ์ด๋ก ์ธํด ํ๋ก์ ํธ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋๋ค. ์ฝ๋๋ฅผ ์ฝ์ ์ ์์ผ๋ฉด ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์น ์ด์ ๋ธ๋ฆฌ๋ ๋ฌด์์ ๋๊น?
Mozilla ์ฌ๋จ๊ณผ ๋ค๋ฅธ ์ฌ๋ฌ ํ์ฌ์ ์ฉ๊ฐํ ์ฌ๋๋ค์ด ์น ์ด์ ๋ธ๋ฆฌ์ ๊ฐ์ ๊ฒ์ ์๊ฐํด๋์ต๋๋ค. ์ด๊ฒ ๋ญ๊ฐ์?
- ์ด๋ ๋ฐ์ด๋๋ฆฌ ํ์์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋ ๊ฐ์ ๋จธ์ ์ ๋๋ค.
- ๋ฐ์ด๋๋ฆฌ ํ๋ก๊ทธ๋จ์ด ๋์ฐฉํ์ฌ ๊ฑฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ๋ ๋งค๋ฒ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ชจ๋ "์์"๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ํ์๊ฐ ์์ต๋๋ค.
- ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์์ ์ ์ธํ์ต๋๋ค.
- ์ด๋ ๋ฐ์ดํธ์ฝ๋์ด๋ฏ๋ก ๋ชจ๋ ์ธ์ด์ ๋ํ ์ปดํ์ผ๋ฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- XNUMX๊ฐ์ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์๋ ์ด๋ฏธ ์น ์ด์ ๋ธ๋ฆฌ ์ง์์ด ํฌํจ๋์ด ์์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ๊ณง Go์์ ๊ธฐ๋ณธ ์ง์์ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค. ์ด ์๋ก์ด ์ํคํ ์ฒ๋ ์ด๋ฏธ ์ถ๊ฐ๋์์ต๋๋ค: GOARCH=wasm GOOS=js(๊ณง). ์ง๊ธ๊น์ง ์ ๊ฐ ์ดํดํ ๋ฐ๋ก๋ ๊ธฐ๋ฅ์ ์ด์ง๋ ์์ง๋ง Go์๋ ๋ฐ๋์ ํฌํจ๋ ๊ฒ์ด๋ผ๋ ์ง์ ์ด ์์ต๋๋ค.
์ด์ ๋ฌด์์ ํด์ผ ํ ๊น์? ๊ณ ํผJS
์น ์ด์ ๋ธ๋ฆฌ๋ ์ง์๋์ง ์์ง๋ง GopherJS์ ๊ฐ์ ํธ๋์คํ์ผ๋ฌ๋ ์์ต๋๋ค.
- Go ์ฝ๋๋ "์์ํ" Javascript๋ก ๋ณํ๋ฉ๋๋ค.
- ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋ฉ๋๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ง ์ง์๋๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์์ต๋๋ค(์ด๊ฒ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ Vanilla JS์ ๋๋ค).
- ๊ณ ๋ฃจํด๊ณผ ์ฑ๋์ ํฌํจํ์ฌ Go๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ๋ํ ์ง์์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋๋ฌด๋ ์ฌ๋ํ๊ณ ์๊ณ ์๋ ๋ชจ๋ ๊ฒ์ ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๋ ๊ฒ์ด ํ๋นํ์ง ์์ ํจํค์ง์ธ syscall, net ์ํธ ์์ฉ(net/http ํด๋ผ์ด์ธํธ๋ ์์ง๋ง ์๋ฒ๋ ์๊ณ ํด๋ผ์ด์ธํธ๋ XMLHttpRequest๋ฅผ ํตํด ์๋ฎฌ๋ ์ด์ ๋จ)์ ์ ์ธํ๊ณ ๊ฑฐ์ ์ ์ฒด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ ๋ธ๋ผ์ฐ์ ์ ์๊ณ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ข์ํ๋ Go์ stdlib๊ฐ ์์ต๋๋ค.
- Go์ ์ ์ฒด ํจํค์ง ์ํ๊ณ, ๋ชจ๋ ํ์ฌ ์๋ฃจ์ (ํ ํ๋ฆฟ ๋ฑ)์ GopherJS๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์์ต๋๋ค.
GopherJS๋ ์ป๊ธฐ๊ฐ ๋งค์ฐ ์ฝ์ต๋๋ค. ์ผ๋ฐ Go ํจํค์ง์ผ ๋ฟ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ธฐ ์ํ GopherJS ๋ช ๋ น์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด๊ณณ์ ์ ๋ง ์์ Hello World์
๋๋ค...
...์ผ๋ฐ โโGo ํ๋ก๊ทธ๋จ, ์ผ๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ fmt ํจํค์ง ๋ฐ ๋ธ๋ผ์ฐ์ API์ ๋๋ฌํ๊ธฐ ์ํ ๋ฐ์ธ๋ฉ Js์
๋๋ค. Println์ ๊ฒฐ๊ตญ ์ฝ์ ๋ก๊ทธ๋ก ๋ณํ๋๊ณ ๋ธ๋ผ์ฐ์ ๋ "Hello gophers"๋ฅผ ์์ฑํฉ๋๋ค! ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. GopherJS ๋น๋๋ฅผ ์ํํ๊ณ ๋ธ๋ผ์ฐ์ ์์ ์คํํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค!
์ง๊ธ ๋น์ ์ ๋ฌด์์ ๊ฐ์ง๊ณ ์์ต๋๊น? ๋ฐ์ธ๋ฉ
๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ชจ๋ js ํ๋ ์์ํฌ์ ๋ํ ๋ฐ์ธ๋ฉ์ด ์์ต๋๋ค.
- ์ ์ด์ฟผ๋ฆฌ;
- Angular.js;
- ๋น ๋ฐ์ดํฐ ํ๋กํ ๋ฐ ์์ ์ ์ํ D3.js
- React.js;
- VueJS;
- Electron์ ๋ํ ์ง์๋ ์์ต๋๋ค(์ฆ, ์ด๋ฏธ Electron์์ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์์ต๋๋ค).
- ๊ฐ์ฅ ์ฌ๋ฏธ์๋ ๊ฒ์ WebGL์ ๋๋ค(์ฐ๋ฆฌ๋ 3D ๊ทธ๋ํฝ, ์์ ๋ฐ ๋ชจ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๊ฒ์์ ํฌํจํ ์ ์ฒด ๊ทธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค).
- ๊ทธ๋ฆฌ๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ธฐํ ๋ง์ ๋ฐ์ธ๋ฉ์ด ์์ต๋๋ค.
๋ผ๋
- GopherJS - Vecty๋ฅผ ์ํด ํน๋ณํ ๊ฐ๋ฐ๋ ์น ํ๋ ์์ํฌ๊ฐ ์ด๋ฏธ ์์ต๋๋ค. ์ด๋ React.js์ ๋ณธ๊ฒฉ์ ์ธ ์๋ ๋ก๊ทธ์ด์ง๋ง GopherJS์ ํน์ฑ์ ์ฌ์ฉํ์ฌ Go์์๋ง ๊ฐ๋ฐ๋์์ต๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐฉ์ด ์์ต๋๋ค(๋๋์ด์!). ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ ๊ฐ์ง๋ฅผ ์ฐพ์์ต๋๋ค.
- ์๊ณ ;
- ์๋นํ .
Go์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง์ ์ด๋ฏธ ์์ฑํ ์ ์๋ ๋ด์ฉ์ ๋ํ ๋ช ๊ฐ์ง ์๋ฅผ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋๋ ์ด ์ต์
(3D ์ํ
๊ฒ์์ ์ฐพ์ ์ ์์ง๋ง ์กด์ฌํ ์๋ ์์ต๋๋ค):
๋๋ ๋ฌด์์ ์ ๊ณตํ๊ณ ์์ต๋๊น?
์ด์ ํ๋ก ํธ์๋ ์ฐ์ ์ ์ด์ ์ Javascript์์ ์ธ๋ถ์ง๋ ๋ชจ๋ ์ธ์ด๊ฐ ๊ทธ๊ณณ์ผ๋ก ๋ชฐ๋ ค๋ค ์ ๋์ ์ํ์ ๋๋ค. ์ด์ ๋ชจ๋ ๊ฒ์ด "์น ์ด์ ๋ธ๋ฆฌ"๋ก ์ปดํ์ผ๋ฉ๋๋ค. Gophers๋ก์ ์ฐ๋ฆฌ์ ์ ๋นํ ์๋ฆฌ๋ฅผ ์ฐจ์งํ๋ ค๋ฉด ๋ฌด์์ด ํ์ํฉ๋๊น?
Go๋ ์ ํต์ ์ผ๋ก ์ด๊ฒ์ด ์์คํ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๊ณ ๊ฐ์ ํ์ผ๋ฉฐ ์ค์ ๋ก UI ์์
์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ญ๊ฐ๊ฐ ์์ง๋ง ์ ๋ฐ์ ๋ฒ๋ ค์ก๊ณ ์ ๋ฐ์ ์๋ํ์ง ์์ต๋๋ค.
์ด์ GopherJS์์ ์คํ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Go์์ ๋ง๋ค ์ ์๋ ์ข์ ๊ธฐํ์ ๋๋ค! ๋ง์นจ๋ด ์์ ๋ง์ ํ๋ ์์ํฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค! ์ง๊ธ์ ํ๋ ์์ํฌ๋ฅผ ์์ฑํ ์ ์๋ ์๊ธฐ์ด๋ฉฐ, ํ๋ ์์ํฌ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ด๊ธฐ์ ์ฑํ๋๊ณ ์คํ๊ฐ ๋ ๊ฒ์ ๋๋ค(์ข์ ํ๋ ์์ํฌ๋ผ๋ฉด).
์ด๋ฏธ Go ์ํ๊ณ์ ์๋ ๋ค์ํ ํจํค์ง๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ธ๋ถ ์ฌํญ(์: ํ ํ๋ฆฟ ์์ง)์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ฏธ ์๋ํ๊ณ ์์ผ๋ฏ๋ก ํธ๋ฆฌํ ๋ฐ์ธ๋ฉ์ ๋ง๋ค์ด ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ฝํ ์ธ ๋ฅผ ์ฝ๊ฒ ๋ ๋๋งํ ์ ์์ต๋๋ค. ๋ํ, ์๋ฅผ ๋ค์ด ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ํ๋ฐํธ์๋์์ ๋์ผํ ๊ฒ์ ๋ ๋๋งํ ์ ์๋ ์๋น์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์๊ฐ ์ข์ํ๋ ๋ชจ๋ ๊ฒ์ ๋๋ค(ํ์ฌ Go์์๋ง ๊ฐ๋ฅ).
๊ฒ์์ ์์ฑํ ์ ์์ต๋๋ค! ์ฌ๋ฏธ๋ก...
๋๋ ๋ชจ๋ ๊ฒ์ ๊ฐ์ง๊ณ ์๋ค.
์ง๋ฌธ
์ง๋ฌธ(์ดํ Q): โ Go๋ก ๊ธ์ ์ฐ๋์ ์๋๋ฉด Js๋ก ์์ฑํ๋์?
AG: โ ๋ฃจํด, ์ฑ๋, ๊ตฌ์กฐ, ์๋ฒ ๋ฉ ๋ฑ ๋ชจ๋ ๊ฒ์ Go์์ ์์ฑํฉ๋๋ค. ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ๊ณ ๊ฑฐ๊ธฐ์ ํจ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
์์ : โ ๊ทธ๋์ โnakedโ Js๋ก ๊ธ์ ์ด๋ค๋ ๊ฑด๊ฐ์?
AG: โ ์๋์, Go์์์ฒ๋ผ ์์ฑํ๊ณ ๋ธ๋ผ์ฐ์ API์ ์ฐ๊ฒฐํฉ๋๋ค(API๋ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค). ๋ฉ์์ง๊ฐ ์ฑ๋๋ก ์ ์ก๋๋๋ก ๋ฐ์ธ๋ฉ์ ์ง์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ต์ง ์์ต๋๋ค.
์์ : โ ๋ชจ๋ฐ์ผ์ ์ด๋ป์ต๋๊น?
AG: โ ํ์คํ ๋ดค์ต๋๋ค. Js๊ฐ ์คํํ๋ Cordova ํจ์น์ ๋ํ ๋ฐ์ธ๋ฉ์ด ์์ต๋๋ค. React Native์์๋ - ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ ์๋ ์๊ณ ์์ ์๋ ์์ต๋๋ค(ํน๋ณํ ๊ด์ฌ์ด ์์์ต๋๋ค). N-go ๊ฒ์ ์์ง์ iOS์ Android์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ง์ํฉ๋๋ค.
์์ : โ ์น ์ด์ ๋ธ๋ฆฌ์ ๊ดํ ์ง๋ฌธ์ ๋๋ค. ์์ถ๊ณผ "์์ถ"์๋ ๋ถ๊ตฌํ๊ณ ์ ์ ๋ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์์ต๋๋ค... ์ด๋ฐ ์์ผ๋ก ํ๋ก ํธ ์๋ ์ธ๊ณ๋ฅผ ๋์ฑ ์ฃฝ์ด์ง ์์๊น์?
AG: โ ์น ์ด์ ๋ธ๋ฆฌ๋ ๋ฐ์ด๋๋ฆฌ ํ์์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ด๋๋ฆฌ๋ ์ต์ข ๋ฆด๋ฆฌ์ค์ ํ ์คํธ๋ณด๋ค ๋ง์ ์ ์์ต๋๋ค. ๋ฐํ์์ ๋๋ฆฌ์ง๋ง ์ด๋ ํ์ค Javascript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ ๋ ๋์ด์๋ด๋ ๊ฒ๊ณผ ๋์ผํ๋ฏ๋ก ์ฐ๋ฆฌ๋ Lodash๋ฅผ ์ฌ์ฉํ์ธ์. Lodash๊ฐ ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์์ : โ ๋ถ๋ช ํ ๋ฐํ์๋ณด๋ค ์ ์ต๋๋ค ...
AG: โ "์์ํ" ์๋ฐ์คํฌ๋ฆฝํธ์์์?
์์ : - ์. ์์ถํด์ ๋ณด๋ด๋๋ฆฝ๋๋ค...
AG: โ ํ์ง๋ง ์ด๊ฒ์ ํ ์คํธ์ ๋๋ค... ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๊ฐ๋ฐ์ดํธ๋ ๋ง์ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค(์ ์ฒด ๋ฐํ์์ด ์์ต๋๋ค). ๋ค์์ผ๋ก ๋ฐ์ด๋๋ฆฌ๋ฅผ 1% ๋๋ฆฌ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์ ์์ฑํฉ๋๋ค. ์ง๊ธ๊น์ง ๋๋ ์ด๊ฒ์ด ํ๋ก ํธ์๋๋ฅผ ์ฃฝ์ด๋ ๊ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๋์ฑ์ด ์น ์ด์ ๋ธ๋ฆฌ๋ ๊ตฌ๋ฌธ ๋ถ์์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ Javascript๋ณด๋ค ๋น ๋ฅด๊ฒ ์๋ํฉ๋๋ค.
์์ : โ ์์ง๋ ๋ ผ๋์ด ๋๊ณ ์๋ ๋ถ๋ถ์ธ๋ฐโฆ ์์ง ๋ช ํํ๊ฒ ํ๋จํ ์ ์์ ๋งํผ โVasmaโ(์น ์ด์ ๋ธ๋ฆฌ)์ ์ฐธ์กฐ ๊ตฌํ์ด ์์ต๋๋ค. ๊ฐ๋ ์ ์ผ๋ก ๊ทธ๋ ์ต๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ๋ฐ์ด๋๋ฆฌ๊ฐ ๋ ๋นจ๋ผ์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๋์ผํ V8์ ํ์ฌ ๊ตฌํ์ ๋งค์ฐ ํจ์จ์ ์ ๋๋ค.
AG: - ๋ค.
์์ : โ ํธ์ง์ ์ ๋ง ํ๋ฅญํ๊ฒ ์๋ํ๋ฉฐ ํฐ ์ด์ ์ด ์๋ค๋ ๊ฒ์ ์ฌ์ค์ด ์๋๋๋ค.
AG: - ์น์ด์ ๋ธ๋ฆฌ๋ ๋๊ธฐ์ ์ด ๋ง๋๋๊ตฐ์.
์์ : โ ์น์ด์ ๋ธ๋ฆฌ์ ๋ํ ํ๋จ์ ์์ง ์ด๋ ค์ด ๊ฒ ๊ฐ์ต๋๋ค. ์๋ ๋์ ๋ํ๊ฐ ์์์ง๋ง ๋๋ ์ ์๋ ์ค์ ์ฑ๊ณผ๋ ๊ฑฐ์ ์์ต๋๋ค.
AG: - ์๋ง๋. ๋๊ณ ๋ณด์.
์์ : โ ๋ฐฑ์๋์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํ๋ก ํธ์๋์ ๋จ๊ฒจ๋๋ ๊ฒ์ด ์ข์๊น์? ์ ๊ฑฐ๊ธฐ๋ก ๊ฐ๋์?
AG: โ ์ผ์ ์ธ๋ ฅ์ ์ ์งํด์ผ ํฉ๋๋ค.
์ผ๋ถ ๊ด๊ณ ๐
์ฐ๋ฆฌ์ ํจ๊ป์์ด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ฐ๋ฆฌ ๊ธฐ์ฌ๊ฐ ๋ง์์ ๋์ญ๋๊น? ๋ ์ฌ๋ฏธ์๋ ์ฝํ
์ธ ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด? ์ฃผ๋ฌธํ๊ฑฐ๋ ์น๊ตฌ์๊ฒ ์ถ์ฒํ์ฌ ์ฐ๋ฆฌ๋ฅผ ์ง์ํ์ญ์์ค.
Dell R730xd๋ ์์คํ
๋ฅด๋ด์ Equinix Tier IV ๋ฐ์ดํฐ ์ผํฐ์์ 2๋ฐฐ ๋ ์ ๋ ดํฉ๋๊น? ์ฌ๊ธฐ์ ๋ง
์ถ์ฒ : habr.com