๋ถ๋ฅ:๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
write less, do more.
1. ๊ฐ์[ํธ์ง]
jQuery๋ HTML ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ๋จ์ํํ๋๋ก ์ค๊ณ๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ด ์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์กด ๋ ์์ ์ํด 2006๋
๋ด์ ์ ๋ฐ์บ ํ(Barcamp NYC)์์ ๊ณต์์ ์ผ๋ก ์๊ฐ๋์๋ค.
2. ํน์ง[ํธ์ง]
๊ธฐ๋ฅ์ ์ผ๋ก์ผ ๋ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ ๋ง์ง๋ง, jQuery๊ฐ ์์๊ฐ์ ์
๊ณ๋ฅผ ์ฅ์
ํ ํน์ฅ์ ์ ๋ฐ๋ก ๋ฌด์งํ๊ฒ ์ฝ๊ณ ๊ฐํธํ๋ค๋ ์ ์ด๋ค. 'write less, do more.'๊ฐ ๋ชจํ ๋ก์ ๋นํ๋ก๊ทธ๋๋จธ์ธ ์น๋์์ด๋๋ค๋ ์ด๋ ต์ง ์๊ฒ ์ดํดํ ์ ์์ ๋งํผ ์ฌ์ด ํธ์ด๋ค. DOM ๊ตฌ์กฐ์ CSS์ ๋ํ ์ง์๋ง ์๋ค๋ฉด ์ ๋๋ฉ์ด์
๊ฐ์ ๊ฑด ๋ฐ๋ก ์ดํด๊ฐ ๊ฐ๋ฅํ ์ ๋๋ค. ์ค์ ๋ก ์ ์์ธ ์กด ๋ ์์ ํ๋ก๊ทธ๋๋จธ๋ค์ ์นญ์ฐฌ๋ณด๋ค ์์ ์น๋์์ด๋๋ค์ ๊ฐ์ฌ ์ธ์ฌ๊ฐ ๋ ํน๋ณํ ๊ธฐ์จ์ด๋ผ๊ณ ํ๋ค.
jQuery๋ Behavioral model(ํ๋ ๋ชจ๋ธ)์ ๊ธฐ์ดํ ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅธ๋ค. ํนํ jQuery๋ ๋ฉ์๋ ์ฒด์ด๋์ ํตํด DOM ์๋ฆฌ๋จผํธ๋ฅผ ์กฐ์ํ๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์กด์ ์ด๋ ๊ฒ ํ๋ค๋ฉด,
jQuery์์ ์ด๋ ๊ฒ ํ๋ค. ๋์ ์ ์๋๊ฐ ์ข ๋ ๋๋ฆฌ๋ค.
jQuery๋ Behavioral model(ํ๋ ๋ชจ๋ธ)์ ๊ธฐ์ดํ ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅธ๋ค. ํนํ jQuery๋ ๋ฉ์๋ ์ฒด์ด๋์ ํตํด DOM ์๋ฆฌ๋จผํธ๋ฅผ ์กฐ์ํ๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์กด์ ์ด๋ ๊ฒ ํ๋ค๋ฉด,
const textNode = document.querySelector("#textNode");
textNode.style.color = "red";
document.querySelector("#someDiv").appendChild(textNode);jQuery์์ ์ด๋ ๊ฒ ํ๋ค. ๋์ ์ ์๋๊ฐ ์ข ๋ ๋๋ฆฌ๋ค.
$("#textNode").css("color","red").appendTo("#someDiv");- $("#textNode")
$๋ผ๋ ํจ์์ ์ธ์๋ก "#textNode"[1]๋ฅผ ๋๊ฒจ์ฃผ๊ฒ ๋ค๋ JavaScript ๊ตฌ๋ฌธ์ด๋ค. jQuery๋ ๊ธฐ๋ณธ์ ์ผ๋ก $๋ฅผ ํจ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค.[2] $() ํจ์์ ์ธ์๋ก DOM selector๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ํด๋นํ๋ DOM ์์๋ฅผ ์ฐพ์ ๋ฆฌํดํด์ค๋ค. (์ ํํ๋ DOM์์๋ฅผ 0๋ฒ์งธ๋ก ๊ฐ์ง ํน์ ํ ๋ฐฐ์ด์ ๋ฐํํ๋๋ฐ, id๋ ํน์ ํ ์ํฉ์ด ์๋๋ผ๋ฉด ๋ฌด๋ฆฌ ์์ด ์ธ ์ ์์ง๋ง ์ฌ๋ฌ ๊ฐ์ class๋ฅผ ํ ๋ฒ์ ์ ๋ ํ ํ ๊ฒฝ์ฐ javascript์ document.getElementsByClassName()๋ฅผ ์๊ฐ ์์ด ์ธ ๋์ ๊ฐ์ ์ํฉ์ด ๋ฐ์ํ๋ค.) - $("...").css("color","red") / $("...").css({"color":"red"})
jQuery์ ๋ฉ์๋๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌํดํ๋ ๋ฐ์ดํฐ์ ์๋ฃํ์ด jQuery์ด๊ณ , ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ ์๋ฃํ์ด jQuery์ธ ๊ฐ์ ๋ถ์ฌ์ ํธ์ถํ๋๋ก ์ค๊ณ๋์ด ์๋ค. ์ฆ, $("...")๋ฅผ ํธ์ถํ์ฌ ์ฐพ๊ณ ์ ํ๋ DOM ์์๋ฅผ(์ฌ๊ธฐ์๋ id๊ฐ textNode์ธ ์์) jQueryํ์ผ๋ก ๋ฆฌํด๋ฐ๊ณ .css() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ ์ ์ํํ๋ ๊ฒ. ๋ฉ์๋ ์ด๋ฆ์ ๋ณด๋ฉด ์๊ฒ ์ง๋ง .css("color","red") ๋ฉ์๋๋ ๋์์ css๋ฅผ ๋ณ๊ฒฝํ๋ค[3]. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝํ DOM ์์๋ฅผ jQueryํ์ผ๋ก ๋ฆฌํดํ๋ค. ํ์์ ๊ฒฝ์ฐ๋ JSON ๋ฌธ๋ฒ์ผ๋ก ์ฌ๋ฌ ์์ฑ์ ํ๊บผ๋ฒ์ ์ง์ ํ ๋ ์ฌ์ฉํ๋ค. - $("...").css("...","...").appendTo("#someDiv") / $("...").css({"...":"..."...}).appendTo("#someDiv")
์์ .css() ๋ฉ์๋๋ก ์์ ๋ฐ๊พธ๊ณ ๋ฆฌํดํ ์์์ .appendTo() ๋ฉ์๋๋ฅผ ์ ์ฉํ๋ ๊ตฌ๋ฌธ์ด๋ค. ์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋ ํ๋ฃจ์ธํธ(Fluent) ์ธํฐํ์ด์ค ๋๋ฌธ์ด๋ค. ๋ฉ์๋์ ๋ฐํ๊ฐ์ด ์๊ธฐ ์์ ์ ์ฐธ์กฐ๊ฐ ๋์ด ๋ฌดํํ ๋ฉ์๋๋ฅผ ์ด์ด๋ถ์ผ ์ ์๋ ๊ฒ ํน์ง.
jQuery๋ MIT ํ๊ฐ์์ GPL v2์ ๋์ผ ๋ผ์ด์ ์ค๋ฅผ ๊ฐ์ง ์์ ์ํํธ์จ์ด์ด๋ค. jQuery์ ๋ฌธ๋ฒ์ ์ฝ๋ ๋ณด๊ธฐ, ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ ์ฐพ๊ธฐ, ์ ๋๋ฉ์ด์ ๋ง๋ค๊ธฐ, ์ด๋ฒคํธ ์ ์ด, AJAX ๊ฐ๋ฐ์ด ์ฝ๋๋ก ๋์์ธ ๋์๋ค. ๋ํ, jQuery๋ ๊ฐ๋ฐ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋๋ถ์ ์๋ง์ jQuery ํ๋ฌ๊ทธ์ธ๋ค์ด ๊ฐ๋ฐ๋์ด ์๋ค!
์ฌ๊ธฐ์ ๊ธฐ์ ๋ง์ด ์ฐ๋ค ๋ณด๋ JavaScript๋ก ์น ๊ฐ๋ฐ์ ํ๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๋น์ฐํ jQuery๋ฅผ ์ด๋ค๊ณ ์๊ฐํ๋ ๋ชจ์. ์ค์ ๋ก๋ ๊ฒฝํ์ด ๋ถ์กฑํ ๊ฐ๋ฐ์๋ค์ด jQuery๊ฐ ์์ผ๋ฉด ๊ฐ๋จํ DOM ์กฐ์๋ ์ด๋ ค์ํ๋ค.[4] jQuery๋ JavaScript๋ฅผ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด์ง ์ ์ ์ธ์ด๊ฐ ์๋๋ค! ์ธ์ ๊น์ง๋ ๊ธฐ์ด๋ JavaScript์์ ๋ช ์ฌํ๊ณ ๊ธฐ์ด๋ฅผ ํผํผํ ํ์. jQuery๋ง ์ฐ๊ฒ ๋๋ฉด ์ด๋ ๊ฒ ๋๋ค. ๋ถ์ฐ์ค๋ช ์ ํ์๋ฉด, JavaScript์์ ๋ง์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌป๊ณ ์๋๋ฐ ๋๊ธ๋ค์ ๋ฌ๊ธ์์ด jQuery ์ฌ์ฉํ๋ผ๊ณ , jQuery๊ฐ ์ต๊ณ ๋ผ๊ณ ์ฐฌ์ํ๋ ์ํฉ์ด๊ณ ๊ทธ๋ฐ ๋๊ธ๋ค์ ์ถ์ฒ์ด ๋ฌ๋ ค ์๋ค. โjQuery์๋ฒ์ ์ผ๋๋ 10kg๊ฐ ๋น ์ก์ด์!โ๋ผ๋ ๋ง๋ ํ๊ณ ๋งจ ๋ฐ์ ์ฌ๋ฐ๋ฅธ ์ค๋ช ์ ํ ๋๊ธ์ jQuery ์ฌ์ฉ์ ์ํ๋ค๊ณ ๋น์ถ์ฒ์ด ๋ฌ๋ ค ์๋ค(...). ๋ฌผ๋ก ์ฌ๋๋ค์ด ๋๋ ค๋จน๋ ๊ฒ์ด๊ณ , Stack Overflow ๊ท์ ์ ์ด๋ด ์ผ์ ์๋ค.
์ฌ์ ํ ์น ํ๋ก ํธ์๋์์ ๋ง๊ฐํ ์ํฅ๋ ฅ์ ์ฐจ์งํ๊ณ ์๋ jQuery์ด์ง๋ง ์ต๊ทผ ์น ๊ฐ๋ฐ์ ํธ๋ ๋๋ ๋ฆฌ์ํธ, Vue.js, ์ค๋ฒจํธ, ๊ฐ์ SPA์ฉ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฎ๊ฒจ๊ฐ๊ณ ์๋ค. ํ๋ ์์ํฌ๋ฅผ ํตํด ์ปดํฌ๋ํธ, MVC, ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฑ์ ๊ณ ์์ค์ ์ธ ๊ฐ๋ ์ ํ์ฉํ๋ ๊ฒ์ ๋ฐํด jQuery๋ ์ฌ์ ํ ๋ฐ๋ฐ๋ฅ DOM์ ๊ฑด๋๋ฆฌ๋ ๋ฐ ์ง๋์ง ์๋์ง๋ผ...[5] ํ์ง๋ง ํ๋ ์์ํฌ๋ฅผ ์ฐ๋ฉด์๋ jQuery์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ณ , ํ๋ ์์ํฌ๊ฐ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ๋ต์ ์๋๊ธฐ ๋๋ฌธ์ jQuery์ ๋ํ ์์๋ ์์ผ๋ก๋ ์์ ๊ฒ์ด๋ค.[6](์ฐธ๊ณ ) SPA ๊ฐ๋ฐ์ ์ํด ๋์จ ๊ฒ์ผ๋ก React๋ ์๋๋ฐ, ์ด๊ฑด ํ๋ ์์ํฌ๊ฐ ์๋๋ผ jQuery์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ์์ผ๋ฉฐ jQuery๋ณด๋ค ์ฐ์ํ Virtual DOM์ ํ์ฉ ๋ฑ์ผ๋ก ์์๊ฐ์ ์ ์ ์จ์ ํฌ๊ฒ ํ๋ํ์๋ค. ๋ค๋ง jQuery์ ๋นํด ๋์ด๋๊ฐ ์ข ๋ ๋๊ณ , JSX๋ผ๋ ๋ณ๋์ ๋ฌธ๋ฒ์ ์ฌ์ฉํด์ ํด์[7] ์ ์ฒด์ ์ผ๋ก๋ ์์ง jQuery๊ฐ React๋ณด๋ค ๋ง์ด ์ฐ์ธ๋ค.
๋ค๋ง ์ด๊ฒ์ ๋ฐ์ฏค ๊ฑธ๋ฌ ๋ค์ด์ผ ํ ๊ฒ์ด, 2000๋ ๋ ์ค๋ฐ ๊ฑฐ์ JS๊ฐ ๋์จ์ง 5~6๋ ๋จ์ง ๋ ์น ์ด์ฐฝ๊ธฐ ์์ ๋ถํฐ 2010๋ ๋ ์ค๋ฐ๊น์ง์ ๋ฌด๋ ค 10๋ ๊ฐ ํ๊ณ ํ ์์น๋ฅผ ๊ณ ์ํ๋ ๊ด๊ณ๋ก Legacy๊ฐ ๋ง์์ ๊ทธ๋ฐ ๊ฒ์ด์ง, ํ์ฌ๋ก์จ๋ ์ ๊ท ํ๋ก์ ํธ, ์ ๊ท ์ธ๋ ฅ๋ง ๋๊ณ ๋ณธ๋ค๋ฉด Angular๋ ํ ๋ฌผ ๊ฐ๊ณ ์๊ณ , React ๊ฐ ๋๋ค์์ด๊ณ Vue.js๋ ์ผ๋ถ ์๋ค. ์ญ์คํ๊ตฌ React. ๋ ๊ฑฐ์๊ฐ ๋ง๊ณ ์์ ์์ฒด ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ง ๋๊ธฐ์ ์ด ์๋ ๋๋ถ๋ถ์ ์ค์๊ธฐ์ , ์คํํธ์ , ์ค๊ฒฌ๊ธฐ์ ์ ์ ๊ท ์น ํ๋ก์ ํธ๋ React. ์ฌ๊ธฐ์ Vue.js๊ฐ ๊ผฝ์ฌ๋ฆฌ ๋ผ๋ ์ ๋์ด๋ค. ์ํฐ๋ ๋๋ ๋ก์ผํ์น์ ์ฑ์ฉ๊ณต๊ณ ๋, ์คํค ๋ฑ์ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ๋ฑ์ ์ฐพ์๋ณด๋ฉด ์ ๊ท ํ๋ก์ ํธ, ์ ๊ท ์ธ๋ ฅ ๊ธฐ์ค์ผ๋ก๋ React : Vue.js : Angular : ๊ธฐํ == 6 : 2 : 1 : 1 ์ ๋์ ๋น์จ์ ๋ณด์ธ๋ค. ๊ตฌ๊ธ ๊ฒ์ ํต๊ณ๋ง ๋ด๋ React๊ฐ ์๋์ ์ด๋ค. ๋ฆฌ์กํธ ๊ด๋ จ ๊ธฐ์ ๋ฌธ์, ์๋ฃ์ ์กฐํ์์ 1/3~์ ๋ฐ ์ ๋๊ฐ Vue.js์ ํต๊ณ์ ์ ์ฌํ๊ณ , Angular๋ 1/5์ ๋, jQuery๋ 10% ์ ๋์ด๋ค. ๋ฌผ๋ก , ๊ธฐ์ ๋ฌธ์๋ ์๋ฃ๋ฅผ ๊ฒ์ํ๊ณ ์ฐพ์๋ณด๋ ์ฌ๋๋ค์ด ์ ๋ถ ํด๋น ์คํ์ผ๋ก ๊ฐ๋ฐ ์ค์ด๋ผ๋ ๋ณด์ฅ์ ์๊ณ , jQuery๋ ๋์จ์ง 15๋ ์ด๋ ๋์์ผ๋ ๊ฐ๋ฐ์๋ค๋ ์ถฉ๋ถํ ์๋ จ๋๊ณ ์ ์ ์์ค์ผ๋ก ์ฌ๋ด ๋งค๋ด์ผ, ๊ฐ์ข ๋์ ๋ฑ์ด ์ ๋ฆฌ๊ฐ ๋ผ์ ๊ตฌ๊ธ๋ง์ ๋น๋๊ฐ ์ค์ด๋๋ ํจ๊ณผ๋ ์๊ณ ๋๋ถ๋ถ ์ปค๋ฎค๋ํฐ ๋ฑ์์ ์กฐ์ธ์ ๊ตฌํด๋ "๋์ถฉ jQuery์ฝ๋ ์ฝ์์ค๋ง ์๋ฉด ๋๋ค."''' ๋ผ๋ ๋ฐ์์ด ๋๋ถ๋ถ์ด๋ค.
์๋ฌด๋๋ ์ง๋ถํ ๋ฐ ๋ ธํํ๋ก jQuery๋ ๊ฒฐ๊ตญ ์ ๋ฌผ ์๋ฐ์ ์๋ค. Legacy๊ฐ ์๋ฌด๋ฆฌ ๋ง๋ค๊ณ ํด๋ ํด์ง ์ง์ ์ 40~50๋ ์๋์ด ๊ฐ๋ฐ์๊ฐ ์๋ ์ด์ ์ ์ ๊ฐ๋ฐ์์๊ฒ jQuery๋ ๋ฏธ๋๊ฐ ์๋ค. ๋ญ 10๋ ์ ๋๋ง ์ผ์๋ฆฌ๊ฐ ๋ณด์ฅ์ด ๋๋ฉด ๋๊ฐ ์ผํ๋ค๊ฐ 10๋ ๋ค์ ์ํ๋ถ ๋ฐฅ๊ทธ๋ฆ์ด ํต์งธ๋ก ์์๋๋ ์๊ด์๋ ์๋์ด๋ผ๋ฉด ๋ชจ๋ฅด๊ฒ ์ผ๋, ์ฃผ๋์ด๋ผ๋ฉด, ์ ์ง๋ณด์ํ๋ ๊ณณ๋ณด๋ค๋ ์ ๊ท ํ๋ก์ ํธ๋ฅผ ํ๋ ๊ณณ์ด ์ข๋ค๊ณ ํ๋ค. ์ด๋ ์๋ฒ ๋๋ ๊ธฐ๊ธฐ๋ POS๊ธฐ, ์ ๊ดํ ๊ฐ์๋ฐ ์งฑ๋ฐํ์ ๋์๊ฐ๋ ์ฝ๋๋ ์๋๊ณ , 5๋ ์ด๋ฉด ๊ฐ์ฐ์ด ๋ฐ๋๋ ์น์ด๊ธฐ์ 2020๋ ๋ ์คํ๋ฐ๋ง ๋์ด๋ Legacy ๋ง์ ์ ์ฐจ ํ๋ ์์ํฌ/React/ES6 ์ดํ์ ์ต์ ํ์ค Native JS๋ก ๋ถ๋ถ๋ถ๋ถ ๋์ฒด๋๊ฑฐ๋ ์์ ์๋น์ค ์ข ๋ฃ ๋๋ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์ฌ๊ฐ๋ฐ ๋ฑ์ ์ด์ ๋ก ์ฌ๋ฉธํ ๊ฒ์ด๋ผ๋ ์๊ฒฌ๋ ์ข ์ข ๋ณด์ธ๋ค. ๋น์ฅ ๊ทธ ๋ํ์ ์ธ ๋ค์ด๋ฒ ํฌํ๋ง์ ์ผ๋ฐ JS์๋ค๊ฐ jQuery๋ก ๋ฐ๋์๋ค๊ฐ ๋ค์ด๋ฒ์นดํ๋ฑ ์ผ๋ถ ์๋น์ค์์ Vue.js ๋ฅผ ์ฌ์ฉํ๋ค.
๋ฌผ๋ก ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๋ชจ๋ ์๋ก ๊ฐ๋ฐํ๋ ํ๋ก์ ํธ์ฌ์ผ ํ๋ฉฐ, ๋ฐฑ์๋๋ฅผ ๊ธฐ์กด์ ์คํ์์ค ์๋ฃจ์ ์ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ ํ jQuery๊ฐ ์ ํจํ๋ค. ํนํ ์์ง๋ ๋ง์ ์ ์ ์จ์ ์ฐจ์งํ๋ ์๋ํ๋ ์ค๋ ๊ทธ๋๋ณด๋, XpressEngine ๋ฑ์ ๋ฐฑ์๋(์ฝ์ด)์์ ํ๋ก ํธ์๋(์คํจ, ํ ๋ง ๋ฑ)๋ก ๋ฟ๋ ค์ฃผ๋ ๊ฒฐ๊ณผ๋ฌผ์ด HTML์ด๋ผ React ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๊ธฐ์ ๊ณค๋ํ ์ ์ด ๋ง๋ค. ์ฝ์ด ์์ค๋ฅผ ์์ ํ๊ฑฐ๋[8] ํ๋ฌ๊ทธ์ธ ๋ฑ์ ์ฌ์ฉํด์[9] ๊ฒฐ๊ณผ๋ฌผ์ JSON ๊ฐ์ ๊ฒ์ผ๋ก ์ค๊ฐ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ ์๋ ์ฌ์ดํธ ์ ์ง๋ณด์๊ฐ ํฌ๊ฒ ์ด๋ ค์์ง๋ ๋จ์ ์ด ์๊ธฐ๊ณ , ํ์๋ ํ๋ฌ๊ทธ์ธ์ ํ ๋จ๊ณ ๋ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ์๋ฒ ๋ถํ๊ฐ ์ปค์ง๋ ๋จ์ ์ด ์๊ธด๋ค.
๋ง์ดํฌ๋ก์ํํธ์ ๋ ธํค์๋ ์์ฌ ํ๋ซํผ์ jQuery๋ฅผ ํฌํจํ๋ ๊ณํ์ ๋ฐํํ ๋ฐ ์๋ค. ๋ง์ดํฌ๋ก์ํํธ๋ ๋น์ฃผ์ผ ์คํ๋์ค์ ASP.NET AJAX ํ๋ ์์ํฌ์ ASP.NET MVC ํ๋ ์์ํฌ์ ์ ์ฉํ๊ณ , ๋ ธํค์๋ ์์ฌ์ ๋ฐํ์ ์น ์์ ฏ ๊ฐ๋ฐ ํ๋ซํผ์ ํตํฉํ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ฑธ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, HTML5 Boilerplate๋ ํธ์ํฐ Bootstrap[10]๋ jQuery ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค.
jQuery Mobile๋ ์์๋๋ฐ, ๋ชจ๋ฐ์ผ ์นํ์ด์ง๋ HTML5 ์น์ฑ ๋ฑ์ ์ ์์ ์ฌ์ฉํ๋ ์น ๊ฐ๋ฐ ํ๋ ์์ํฌ๋ค.[11] HTML5 ์น์ฑ ํ๋ ์์ํฌ๋ค์ด ๋๊ฐ ๊ทธ๋ ๋ฏ iOS, ์๋๋ก์ด๋๋ ๋น์ฐํ ์ง์ํ๊ณ , Windows Phone, ๋ธ๋๋ฒ ๋ฆฌ, ์ฌ๋น์ ๋ฑ ์ฌ๋งํ ๊ธฐ๊ธฐ๋ ๋ค ์ง์ํ๋ค. 2014๋ ์ดํ ์ ๋ฐ์ดํธ ์์๊ณ 2018๋ ์ ์ค๋จ๋์๋ค.
jQuery๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๋ค.
- DOM ์๋ฆฌ๋จผํธ ์ ํ
- DOM ํธ๋๋ฒ์ค ๋ฐ ์์ (CSS 1-3 ์ง์. ๊ธฐ๋ณธ์ ์ธ XPath๋ฅผ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ง์)
- ์ด๋ฒคํธ
- CSS ์กฐ์[12]
- ํน์ํจ๊ณผ ๋ฐ ์ ๋๋ฉ์ด์ [13]
- JavaScript ํ๋ฌ๊ทธ์ธ์ ํตํ ํ์ฅ์ฑ
๋๋ถ์ ๋ํ๋ฏผ๊ตญ์ ๊ตญ๊ฐ๊ธฐ์ ์๊ฒฉ์ธ ์น๋์์ธ๊ธฐ๋ฅ์ฌ ์ค๊ธฐ์ํ์์ ๊ธฐ์กด์๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ Flash๋ก ์ฃผ๋ค๊ฐ 2017๋ ๋ถํฐ๋ jQuery๋ก ๋ฐ๊ฟ์ ์ถ์ ๋๊ณ ์๋ค. ์น๋์์ธ๊ธฐ๋ฅ์ฌ ์๊ฒฉ์ฆ์ ์ทจ๋ํ๋ ค๋ ์ฌ๋๋ค์ ์๋ฌด์ ์ผ๋ก jQuery๋ฅผ ์ฌ์ฉํด์ ์๋ธ๋ฉ๋ด์ ํ์ ์ฐฝ์ ์จ๊ฒผ๋ค ๋์ ๋ค ํ ์ค ์์์ผ ํ๊ณ , ๋ํ ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋๋ฅผ ์์ง์ผ ์ค ์์์ผ ํ๋ ๊ฒ์ด๋ค.
jQuery๋ ๋ณธ๋ 1.x, 2.x, 3.x ๋ฒ์ ์ ์ธ ๊ฐ์ง ์ข ๋ฅ๊ฐ ์์๋ค๊ฐ 1.x, 2.x ๋ฒ์ ์ ๋ชจ๋ ์ ๋ฐ์ดํธ๊ฐ ์ข ๋ฃ๋๊ณ , 3.x ๋ฒ์ ๋ง ์ ๋ฐ์ดํธ๋๊ณ ์๋ค. ํ๋ ๋ฒ์ ์ผ๋ก ๊ฐ์๋ก ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ง์์ ์ํ ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์ญ์ ํ์ฌ ์ฉ๋์ด ์๊ณ ์๋๋ ๋ ๋น ๋ฅด๋ค. Internet Explorer 8 ์ด์ ๋ฒ์ ์ ํธํ์ด ํ์ํ๋ค๋ฉด 1.x๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. 1.x ๋ฒ์ ์ค์์๋ ํนํ 1.9 ๋ฒ์ ์ ํ์ ํธํ์ฑ์ด ๋จ์ด์ง๋๋ฐ, 1.9์์ ์ญ์ ๋ ๊ฒ๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋๋ฌธ์ ์ฐ์์ด ์ค๋๋ ํด์ผ ๊ฒฝ์ฐ์๋ ํธํ์ฑ ๋ฌธ์ ๋๋ฌธ์ 1.8 ๋ฒ์ ์์ ๋จธ๋ฌด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. 1.9 ๋ฒ์ ์ด์์ ์ฌ์ฉํ๋ฉด์ 1.8 ์ดํ ๋ฒ์ ์ ํธํ์ฑ์ ์ ์งํ๋ ค๋ฉด jQuery Migrate๋ผ๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด ๋๋ค. ํ์ง๋ง ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ jQuery๋ฟ๋ง ์๋๋ผ HTML5์๋ง ์๋ ํ๊ทธ์ CSS์์๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๋ฐ๋ค๊ฐ[17] ๋ณด์ ๋ฌธ์ ๋๋ฌธ์ ๊ฐ์ ์ ๊ทธ๋ ์ด๋๊ฐ ์ด๋ฃจ์ด์ง๋ฉฐ ์ฌ์ฉ์๊ฐ ๊ฑฐ๋ถํ ์ ์๊ฒ ๋์ด ์๋ค.[18] ๋ฐ๋ผ์ 2020๋ ํ์ฌ๋ 3.x๋ฒ์ ์ ์ฐ๋ ๊ฒ ์ ๋ต์ด๋ค.
2018๋ ํ๋ฐ๊ธฐ ๊ธฐ์ค, ์ญ์ ๊ตญ๋ด๋ ๋ ผ์ธ๋ก ํ๊ณ ํด์ธ ์ถ์ธ๋ฅผ ๋ณด๋ฉด JavaScript์ ๊ธฐ๋ฅ ์์ฒด๊ฐ ์ข์์ง๋ฉด์ jQuery ์์กด๋๊ฐ ์ ์ฐจ ๋ฎ์์ง๋ ๊ฒฝํฅ์ด ์๋ค.
2020๋ 12์ ๊ธฐ์ค์ผ๋ก ์ ์ฒด ์น ์ฌ์ดํธ์ 77.2%๋ jQuery๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.#
3. ์ฌ๋ด[ํธ์ง]
์๋ฒ ์ฌ์ด๋ JavaScript ์์ง์ธ Node.js์์๋ jQuery๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋จ Node.js์๋ window ์ ์ญ ๊ฐ์ฒด๊ฐ ์๊ธฐ ๋๋ฌธ์ jsDom์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ๋ก ์ค์นํด์ผ ํ๋ค. ์ญ์ DOM ์กฐ์์ ์ฌ์ฉํ๋ค. ๋ณดํต ๋ณต์กํ ํ
ํ๋ฆฟ ์ฝ๋๋ฅผ ์๋ฒ ์ชฝ์์ ์์ฑํ๊ฑฐ๋ ์น ํฌ๋กค๋ฌ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ค.
2016๋ 6์ 9์ผ, jQuery 3.0์ด ์ ์ ์ถ์๋์๋ค.
๋๋ฌด์ํค์์๋ the seed 4.12.0(2019๋ 9์ ๋ง ์ )๊น์ง jQuery 2.1.4 ๋ฒ์ ์ ์ฌ์ฉํ๋ค.
2016๋ 6์ 9์ผ, jQuery 3.0์ด ์ ์ ์ถ์๋์๋ค.
๋๋ฌด์ํค์์๋ the seed 4.12.0(2019๋ 9์ ๋ง ์ )๊น์ง jQuery 2.1.4 ๋ฒ์ ์ ์ฌ์ฉํ๋ค.
[1] CSS ์ ํ์์ ๋์น์ด๋ค. ํด๋น ์ ํ์๋ HTML ํ๊ทธ ์ค id="textNode"๋ผ๋ ๊ฐ์ด ์๋ ๋งจ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๊ฐ๋ฆฌํจ๋ค(id๋ HTML ๋ฌธ์ ๋ด์์ ์ ์ผํ ๊ฐ์ด์ด์ผ ํ๋ค).
[2] ๊ธฐ์ ์ ํธ์ด์คํ
(๋ณ์๋ ํจ์๋ฅผ ๋จผ์ ์ฌ์ฉํ๊ณ ํ์ ์ ์ธ๋ฌธ์ ์ถ๊ฐํด๋ ์ ๋๋ก ๋์๊ฐ๋ค)์ด ์๊ฒจ์ ์ฅ๋ ์๋ ๋ชจ๋ฅด๊ฒ $๋ฅผ ์ฌ์ ์ธํ๋ค๋ฉด jQuery.noConflict()๋ฅผ ํธ์ถํด์ $๋์ jQuery()๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํด๋ ๋๋ค. ๋ํ ์ ์ด์ฟผ๋ฆฌ๋ก ์ฐ๋ ๋ชจ๋์ (function($){โโโโโโ})(jQuery)๋ก ๊ฐ์ธ๊ธฐ๋ ํ๋ค.
[3] ํด๋น DOM ์์์ style = "color:red;"๋ฅผ ์ ์ฉ
[4] ๋ค๋ง ์ด์ง๊ฐํ๊ฒ ๊ฐ๋จํ ํํ์ด์ง๊ฐ ์๋๋ฉด jQuery ์์ด๋ ๋ต์ด ์ ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ํ๋คํ๋ค(...).
[5] ES6๋ฑ์ฅ ์ดํ DOM์ ์ง์ ๊ฑด๋๋ฆฌ๋ ๊ฐ๋ฐ ๋ฐฉ์์ ์ํฐํจํด(๋์ํจํด)์ ์์ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐํผ๋๋ ๋ถ์๊ธฐ์ด๋ค.
[6] ์ค์ ๋ก ์ ์ธ๊ณ ํธ๋ํฝ ์์ 1๋ง ๊ฐ ์ฌ์ดํธ ์ค jQuery ์ ์ ์ ์จ์ 2020๋
์๋ ์ฌ์ ํ ๊ณผ๋ฐ์ธ 54%๋ ์ฐจ์ง ํ๊ณ ์๋ค.
[7] JSX ์ฌ์ฉ์ด ํ์๋ ์๋๋ค. ํ์ง๋ง React๋ฅผ ์ฐ๊ธฐ๊ฐ ์๋นํ ๋ถํธํด์ง๋ค.
[8] ๊ทธ๋๋ณด๋๋ Vue.js ๋ฒ์ ์ด ์๋๋ฐ, ์์ค ์ฝ๋๋ฅผ ๊ฐ์์๋ ์์ค์ผ๋ก ์์ ํ๋ค.
[9] ์๋ํ๋ ์ค๋ JSON ํํ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ Rest API๊ฐ ์๊ณ , ์ด๊ฑธ ์ด์ฉํด์ Frontity๋ผ๋ React ๊ธฐ๋ฐ ์คํ์์ค ํ๋ก ํธ์๋๊ฐ ์๋ค.
[10] ๋ฒ์ 5๋ถํฐ๋ jQuery๊ฐ ๋น ์ง ์์ ์ด๋ค.
[11] ์ฆ, ๋ชจ๋ฐ์ผ ์นํ์ด์ง์์ jQuery๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ทธ๋ฅ jQuery๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์ง jQuery Mobile๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ค.
[12] ์ด๋๊น์ง๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ๊ฒ๊น์ง๋ง. IE8 ์ดํ์์๋ ์ฃฝ์ด๋ผ border-radius ๋ฑ์ ์ค๋ ์๋จน๋๋ค(...).
[13] ๊ฐ๋จํ ๊ฒ๋ง ๊ฐ๋ฅํ๋ฉฐ ๋ณต์กํ ์ ๋๋ฉ์ด์
์ด ํ์ํ๋ค๋ฉด jQuery UI๋ผ๋ ํ์ฅ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํ๋ค.
[14] IE, ๋ชจ์ง๋ผ ํ์ด์ดํญ์ค, ์คํ๋ผ, WebKit ๋ฑ์ ํ๋ณํ ์ ์๋ค. ๋ค๋ง 1.9 ๋ฒ์ ์ดํ๋ถํฐ ์ญ์ ๋์๋ค. ๊ตณ์ด ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด jQuery Migrate๋ผ๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด ํ๋ฌ๊ทธ์ธ์ ๊ตฌํ ๋ฒ์ ์์ ์ง์๋์์ผ๋ ์ต์ ๋ฒ์ ์์ ์ญ์ ๋ ํจ์๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํด ์ค๋ค.
[15] ์ญ์ ๋์๋ค๊ธฐ ๋ณด๋ค๋ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ถ๋ฆฌ๋์ด ๋๊ฐ๋ค๊ณ ๋ณด๋๊ฒ ๋ ์ณ๋ค. migrate๋ ๋ง ๊ทธ๋๋ก ์ญ์ ๋ ๊ธฐ๋ฅ์ ๋์ด๋ฆฌ๋ ํ๋ฌ๊ทธ์ธ์ด๊ณ , ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ตฌ๋ถํด์ฃผ๋ ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ก ์๋ค. ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ถ๋ฆฌํด ๋์ง ์์ผ๋ฉด, ๋ฉ์ธ jQuery์์ฒด๊ฐ ๋ฒ์ ์
๋๊ธฐ ์ ๊น์ง๋ ์๋ก ์ถ์๋ ๋ธ๋ผ์ฐ์ ๋ค์ ์ง์ํ ์ ์๊ณ , ์ญ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ง ์
๋ฐ์ดํธ ๋๊ณ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ์ด ๊ฑฐ์ ์๋๋ฐ๋ ๋ฉ์ธ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ๋ ์ฌํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๋ถ๋ฆฌ๋์๋ค๊ณ ๋ณด๋๊ฒ ์ณ๋ค.
[16] ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๋ฑ์ ์งํฉ์์ ์์๋ฅผ ์ฐจ๋ก๋ก ํ๋๋ค. native JS์์๋ "forEach" ํจ์๊ฐ ๋น์ทํ ์ญํ ์ ํ๋ค.
[17] ํนํ 10 ๋ฒ์ ์ด์ ์ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ๊ฐ ๊ทธ๋ ๋ค.
[18] ๊ฐ์ ์
๊ทธ๋ ์ด๋๋ฅผ ํ๋ ์ด์ ๋, ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ทจ์ฝ์ ์ด ์
์ฉ๋ผ ๊ฐ์ผ๋ ์ปดํจํฐ๋ DDoS ๋ด์ด๋ ๋์ฌ์จ์ด์ ๋ฐฐํฌ ๊ฒฝ์ ์ง๋ก ์
์ฉ๋ผ ๋จ๋ค๊น์ง ํผํด๋ฅผ ์
ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค๋ง ๊ตฌ๋ฒ์ ์ OS๋ ๊ฐ์ ์
๊ทธ๋ ์ด๋์์ ๋น๊ปด๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ํ์ ์ผ๋ก Windows XP๋ IE 8๊น์ง๋ง ์ง์ํ๋ค.