CHAPTER 3. The wonderful land of Web Components
A brave new world
์ปดํฌ๋ํธ๋ ๊ฐ๋ฐ์ธก๋ฉด์์ ์ค๋๋ ํ์์ด์๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์์ ํ ์๋ก์ด๊ฒ์ ์๋๋ค. ์ฐ๋ฆฌ๋ ๊ฝค ์ค๋ซ๋์ ์น ๊ฐ๋ฐ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์์์ผ๋ ์ปดํฌ๋ํธ๋ค์ ๋น์ ์ ์ฑ์๋ ํ์ํ์ง ์๋๋ผ๋ jqeury, dojo, prototype, angularjs ๋ฑ ๋ช๋ช์ ์ข ๋ฅ๋ฅผ ์๊ตฌํ์๋ค.
์น ์ปดํฌ๋ํธ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ๋ค. : ๊ทธ๋ผ ์ฌ์ฌ์ฉ์ ์ด๊ณ ์บก์ํ๋ ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ ธ๋ณด๋๋ก ํ์.
์ปดํฌ๋ํธ๋ค์ ๋ธ๋ผ์ฐ์ ธ๊ฐ ์๋ฒฝํ๊ฒ ์ง์ํ์ง ๋ชปํ๋ ์ ํฅ ํ์ค์ ์์กดํ๋ค. ๊ทธ๋ฌ๋, ๋น๋ก ์ฐ๋ฆฌ๊ฐ ์์ ํ ์ฌ์ฉํ๊ธฐ ์ํด ๋ช๋ ์ ๊ธฐ๋ค๋ ค์ผ ํ๊ฑฐ๋, ์์กด์ ๊ฐ๋ ์ ๋ฒ์ด๋ ์ ์์ ์ง๋ผ๋ ์ฌ์ ํ ์ด๊ฒ์ ํฅ๋ฏธ๋ก์ด ์ด์์ด๋ค.
์๋ก์ด ํ์ค์ 4๊ฐ์ง ๊ท๊ฒฉ์ ์ ์๋์ด์๋ค.
Custom elemts
Shadow DOM
Template
HTML Imports
์์ผ๋ก์ ์ํ๋ค์ ๊ฐ์ฅ ์ ๋์ํ๊ธฐ ์ํด์๋ ์ต์ ๋ฒ์ ผ์ ํฌ๋กฌ์ด๋ ํ์ด์ดํญ์ค๋ฅผ ์ด์ฉํ๋ผ.
Custom elements
์ปค์คํ ์ปดํฌ๋ํธ๋ ๊ฐ๋ฐ์์๊ฒ </ns-pony>์ ๊ฐ์ ์ ์ํ HTML ์๋ฆฌ๋จผํธ ๊ฐ์ด ๊ทธ๋ค ์์ ์ DOM ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค์์๋๋ก ํ์ฉํ๋ค. ์ด ์ฌ์์ ์ด์ ์ ์กด์ฌํ๋ ์๋ฆฌ๋จผํธ๋ฅผ ์ด๋ป๊ฒ ํ์ฅํ ์ ์๋์ง๋ฅผ ์ ์ธํ๋ค. ์ปค์คํ ์๋ฆฌ๋จผํธ๋ฅผ ์ ์ธํ๋ ๊ฒ์ "document.registerElement('ns-pony')" ์ ๊ฐ์ด ์ ์ธํ๋ฉด ๊ฐ๋จํ ์ ์๋์ด ์ง๋ค.
์ด๋ฆ์๋ dash๊ฐ ํฌํจ๋์ด์ผ ํ๋ค๋๊ฒ์ ์ฃผ์ํด๋ผ. ๊ทธ๋์ผ์ง ๋ธ๋ผ์ฐ์ ธ๊ฐ ์ปค์คํฐ ์๋ฆฌ๋จผํธ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. ๋ฌผ๋ก , ๋น์ ์ ์ปค์คํ ์๋ฆฌ๋จผํธ๋ ์์ฑ๋ ์์๊ฒ์ด๊ณ ํจ์๋ ์์๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ง์์ง๊ฑฐ๋ ์์ฑ๋๊ฑฐ๋ ์์ฑ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์จ ๋ฐ์ํ๋ ๋ผ์ดํ ์ฌ์ดํด ์ฝ๋ฐฑ๋ ์์๊ฒ์ด๋ค. ์ด๊ฒ์ ์์ ์ ํ ํ๋ฆฟ์ ๊ฐ์ง๋ค. ์๋ง๋ ns-pone๋ ๊ทธ๊ฒ์ ์ด๋ฆ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ค๊ฒ์ด๋ค.
๋ง์ฝ ๋น์ ์ด dom ๊ฐ์ฒด๋ฅผ ํ์ธํ๋ค๋ฉด, ๋น์ ์ General Soda</ns-pony> ๋ฅผ ํ์ธํ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋น์ ์ ์ฑ์ CSS๋ javascript ๋ก์ง์ด ์ปค์คํ ์ปดํฌ๋ํธ์ ์๊ตฌํ์ง ์๋ ํจ๊ณผ๋ฅผ ์ค์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ทธ๋์ ์ฃผ๋ก ํ ํ๋ฆฟ์ ๊ทธ๋ฆผ์ DOM์ด๋ผ๋ ๊ฒ์ผ๋ก ์บก์ํ๋์ด์ง๊ณ ์จ๊ฒจ์ง๋ฉฐ, ๋ง์ฝ ๋น์ ์ด DOM ๊ฐ์ฒด์์ ๊ฐ์งํ์ฌ ๋ธ๋ผ์ฐ์ ธ์ pony์ ์ด๋ฆ์ด ๋ณด์ฌ์ง์ง๋ผ๋ ๋น์ ์ ์ค์ง </ns-pony>๋ฅผ ๋ณผ๊ฒ์ด๋ค.
Shadow DOM
๋ฏธ์คํฐ๋ฆฌํ ์ด๋ฆ์ ๊ฐ์ง ์ด๊ฒ์ ๋ชฌ๊ฐ ์์ฒญ๋ ๊ธฐ๋ฅ์ด ์๋ค๋๊ฒ์ ๋น์ ์ ์์ํ ๊ฒ์ด๋ค. ๋ฌผ๋ก ๊ทธ๋ ๋ค. ๊ทธ๋ฆผ์ DOM์ ์ฐ๋ฆฌ์ ์ปดํฌ๋ํธ DOM๊ฐ์ฒด๋ฅผ ์บก์ํ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์บก์ํ๋ ์ฑ์ ์คํ์ผ ์ํธ์ ์๋ฐ ์คํฌ๋ฆฝํธ ๋ก์ง์ด ๊ตฌ์ฑ ์์์ ์ ์ฉ๋์ง ์๊ณ ์๋ํ์ง ์๊ฒ ํ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋ด์ฅ ์ปดํฌ๋ํธ๋ฅผ ์จ์ค์ ์๋ ์๋ฒฝํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ์์ ์ฑ๊น์ง ์ด๋ ํ ๋์ถ๋ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด์ ์ฑ์ผ๋ก ๋์๊ฐ๋ณด์.
๋ง์ฝ ๋น์ ์ด ํ์ธํด๋ณด์๋ค๋ฉด ์ด๋ฌํ ์ฝ๋๋ฅผ ํ์ธํ์ ๊ฒ์ด๋ค.
์ด์ ๋น์ ์ด h1 ์๋ฆฌ๋จผํธ์ ์ฝ๊ฐ์ ์คํ์ผ์ ์ถ๊ฐํ์์์ง๋ผ๋, ์ปดํฌ๋ํธ์ ๋ณด์ด๋ ๊ด์ ์์๋ ์ด๋ ํ ๋ณํ๋ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฆผ์ DOM์ด ๋ฐฉ์ด๋ฒฝ๊ณผ ๊ฐ์ ์ญํ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ง๊ธ๊น์ง๋, ์ฐ๋ฆฌ๋ Component์ ํ ํ๋ฆฟ์ผ๋ก ๋ฌธ์์ด์ ์ฌ์ฉํ์๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๋ค. ๋์ , ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค.
Template
ํ ํ๋ฆฟ์ ๋ธ๋ผ์ฐ์ ธ์๋ ํ์๋์ง ์๋ ์์ ๋ช ์๋์ด์ง๋ค. ์ฃผ๋ ๋ชฉ์ ์ ํน์ ์์ ์์ ์์์ ๋ณต์ ๋๋ ๊ฒ์ด๋ค. ํ ํ๋ฆฟ์ getElementById() ์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๋จธ์ง ํ์ด์ง์์ ์ฟผ๋ฆฌ ํ ์ ์์ผ๋ฉฐ ํ์ด์ง์ ์๋ฌด ๊ณณ์๋ ์์ ํ๊ฒ ๋ฐฐ์น๋ ์ ์๋ค.
ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ณต์ ํด์ผํ๋ค.
์๋ง ์ฐ๋ฆฌ๋ ํ ํ์ผ์์์ ์ ์ธ์ ํ ์ ์๊ณ , ์ฐ๋ฆฌ๋ ์๋ฒฝํ๊ฒ ์บก์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ฒ์ด๋ค.
HTML Imports
์ด๊ฒ์ ๋ง์ง๋ง ์ฌ์์ด๋ค. HTML import๋ HTML ์์ HTML์ ๊ฐ์ ธ์ค๋๊ฒ์ ํ์ฉํ๋ค.
์ ๊ฐ์ ํํ์ด๋ค. ns-pony.html ํ์ผ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ๋ด์ ์ ์๋ค.
๋ง์ฝ ๋๊ตฐ๊ฐ ์ฐ๋ฆฌ์ ํ๋ฅญํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ธธ ์ํ๋ค๋ฉด ๊ทธ๋ค์ ๋จ์ง HTML import ํด์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
Polymer and X-tag
์น ์ปดํฌ๋ํธ๊ฐ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ธ์์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ polyfill์ ๋น์ ์ ์ฑ์ ํฌํจํ๋ฉด ์ ์์ ์ผ๋ก ๋์ํ ๊ฒ์ด๋ค. polyfill์ web-component.js๋ก ๋ถ๋ฆฌ์ด์ ธ ์๊ณ google, mozila, microsoft๋ฑ ๊ณต๋์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์๋ ๊ฒฐ๊ณผ๋ฌผ์ด๋ผ๋ ์ ์ ์ฃผ๋ชฉํ ๋งํ ๊ฐ์น๊ฐ ์๋ค.
์ฃผ๋ชฉํ ๋งํ ๊ธฐ๋ฅ์ ํ์ธํด๋ณด๋๋ก ํ์.
Polymerfrom google
X-tagfrom Mozilla and Microsoft
๋ํ ์ผํ๊ฒ๋ ์ค๋ช ํ์ง ์์๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ ์ด๋ฏธ polymer component๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ๊ณ ์์๊ฒ์ด๋ค. ๋น์ ์ ์ฑ์์ ์๋ ๊ตฌ๊ธ ๋งต์ ์ดํด๋ณด๋๋ก ํ์.
polymer์์๋ ๋งค์ฐ ๋ค์ํ ๊ตฌ์ฑ์์๊ฐ ์๋ค. https://customelements.io ํด๋น ์ฌ์ดํธ์์ ์ดํด๋ณผ ์ ์๋ค. polymer๋ ์ปค์คํ ์ปดํฌ๋ํธ๋ฅผ ๋น๋ํ๋๋ฐ์๋ ๋์์ ์ค๋ค.
๋น์ ์ Polymer๋ฅผ ๊ฐ์ง๊ณ ๊ต์ฅํ ๊ฒ๋ค์ ๋ง์ด ํ ์ ์๋ค. (์๋ฐฉํฅ ๋ฐ์ธ๋ฉ, ๊ธฐ๋ณธ ์์ฑ ์ค์ , ์ปค์คํ ์ด๋ฒคํธ, ์์ฑ๋ณ๊ฒฝ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ ๋ฑ)
์ง๊ธ๊น์ง ๋น์ ์๊ฒ ๋งํ ์น ์ปดํฌ๋ํธ์ ๋ํ ์ค๋ช ์ ๋งค์ฐ ์งง๊ฒ ์์ฝํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์น ์ปดํฌ๋ํธ์ ๋ํ ์ปจ์ ์ ๋ช ํํ๊ฒ ์ค๋ช ํ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตฌ๊ธ ํ์ Angular 2 ์ปดํฌ๋ํธ์ ๋ฐ๋ผ์ ์น ์ปดํฌ๋ํธ ์ฌ์ฉ์ ๋งค์ฐ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด Angular 2๋ฅผ ๋์์ธ ํ๋ค๋ ๊ฒ์ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค.
Reference URL
Last updated