jQuery์˜ ์—ญ์‚ฌ์™€ ๋ ˆ๊ฑฐ์‹œ

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

๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ ๋ช‡ ๋…„ ๋™์•ˆ ์›น ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ตœ๊ณ ์˜ ๋„๊ตฌ๋กœ์„œ์˜ ์ง€์œ„๊ฐ€ ์•ฝํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. jQuery๊ฐ€ ์™œ ์ธ๊ธฐ๋ฅผ ์–ป์—ˆ๋Š”์ง€, ์™œ ์œ ํ–‰์—์„œ ๋’ค์ณ์กŒ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์— ์ตœ์‹  ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ jQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•œ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

jQuery์˜ ๊ฐ„๋žตํ•œ ์—ญ์‚ฌ

์กด ๋ ˆ์‹œ๊ทธ(์กด ๋ ˆ์‹œ ๊ทธ)๋Š” 2005๋…„์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. 2006๋…„์— ์ถœํŒ๋จ-m, BarCampNYC๋ผ๋Š” ์ด๋ฒคํŠธ์—์„œ์š”. ~์— jQuery ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ์ €์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

jQuery๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋”ฉ์ด ์žฌ๋ฏธ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ชจํ† ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. jQuery๋Š” ์ผ๋ฐ˜์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋งˆํฌ์—…์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜์—ฌ ์งง๊ณ  ์šฐ์•„ํ•˜๋ฉฐ ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

jQuery์—๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ API์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ID๋‚˜ ํด๋ž˜์Šค๋ณ„๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ jQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์š”์†Œ์™€์˜ ๊ด€๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋“ฑ ๋ณต์žกํ•œ ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// Select every item within the list of people within the contacts element
$('#contacts ul.people li');

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์„ ํƒ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐœ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฐŒ๋Š” ๋“ฏ์ด ๋ฅ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‘ ๋ฒˆ์งธ ์žฅ์ ์€ ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ์ฐจ์ด์ ์„ ์ถ”์ƒํ™”ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋‹น์‹œ์—๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

ํ‘œ์ค€ํ™”๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์™€ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ ๊ฐ„์˜ ์ˆ˜๋งŽ์€ ์ฐจ์ด์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด์„ธ์š” ์ด ์ดˆ๊ธฐ jQuery ์†Œ์Šค ์ฝ”๋“œ jQuery.browser๋ฅผ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”. ๋‹ค์Œ์€ ํ•œ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

// If Mozilla is used
if ( jQuery.browser == "mozilla" || jQuery.browser == "opera" ) {
        // Use the handy event callback
        jQuery.event.add( document, "DOMContentLoaded", jQuery.ready );

// If IE is used, use the excellent hack by Matthias Miller
// http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited
} else if ( jQuery.browser == "msie" ) {

        // Only works if you document.write() it
        document.write("<scr" + "ipt id=__ie_init defer=true " + 
                "src=javascript:void(0)></script>");

        // Use the defer script hack
        var script = document.getElementById("__ie_init");
        script.onreadystatechange = function() {
                if ( this.readyState == "complete" )
                        jQuery.ready();
        };

        // Clear from memory
        script = null;

// If Safari  is used
} else if ( jQuery.browser == "safari" ) {
        // Continually check to see if the document.readyState is valid
        jQuery.safariTimer = setInterval(function(){
                // loaded and complete are both valid states
                if ( document.readyState == "loaded" || 
                        document.readyState == "complete" ) {

                        // If either one are found, remove the timer
                        clearInterval( jQuery.safariTimer );
                        jQuery.safariTimer = null;

                        // and execute any waiting functions
                        jQuery.ready();
                }
        }, 10);
}

๊ทธ๋ฆฌ๊ณ  jQuery ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ•จ์ •์— ๋Œ€ํ•œ ๊ฑฑ์ •์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ ํŒ€์˜ ์ฑ…์ž„์œผ๋กœ ๋Œ๋ฆด ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— jQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ Ajax์™€ ๊ฐ™์€ ๋ณด๋‹ค ๋ณต์žกํ•œ ๊ธฐ์ˆ ์„ ๋” ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์‹ค์ƒ ์›น์‚ฌ์ดํŠธ์˜ ํ‘œ์ค€ ์ข…์†์„ฑ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜๋‚  ๊ทธ๊ฒƒ์€ ์ธํ„ฐ๋„ท์˜ ์—„์ฒญ๋‚œ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. W3Techs๋Š” ์ด๋ ‡๊ฒŒ ๋ฏฟ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์‚ฌ์ดํŠธ์˜ 74%๊ฐ€ jQuery๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค..

jQuery ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ํ†ต์ œ๋„ ๋”์šฑ ๊ณต์‹ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2011๋…„์— ํŒ€ jQuery ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.. ๊ทธ๋ฆฌ๊ณ  2012๋…„ jQuery ๋ณด๋“œ์—์„œ๋Š” jQuery ์žฌ๋‹จ์œผ๋กœ ๋ณ€ํ™˜.

2015๋…„์— jQuery ์žฌ๋‹จ์€ Dojo ์žฌ๋‹จ๊ณผ ํ•ฉ๋ณ‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. JS ์žฌ๋‹จ์„ ๋งŒ๋“ค๋ ค๋ฉด, Node.js ์žฌ๋‹จ๊ณผ ๋ณ‘ํ•ฉ๋˜์–ด 2019-m ์ƒ์„ฑ OpenJS ์žฌ๋‹จ, ๊ทธ ์•ˆ์—์„œ jQuery๋Š” โ€œํš๊ธฐ์ ์ธ ํ”„๋กœ์ ํŠธ.ยป

๋ณ€ํ™”ํ•˜๋Š” ์ƒํ™ฉ

๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ์—๋Š” jQuery ์ธ๊ธฐ๋ฅผ ์žƒ์—ˆ๋‹ค. GitHub ๋‚ด ์‚ฌ์ดํŠธ์˜ ํ”„๋ŸฐํŠธ์—”๋“œ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.. ๋ถ€ํŠธ์ŠคํŠธ๋žฉ v5 jQuery๋ฅผ ์ œ๊ฑฐ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฑด ๊ทธ์˜ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค"์ผ๋ฐ˜ JavaScript์— ๋Œ€ํ•œ ๊ฐ€์žฅ ํฐ ํด๋ผ์ด์–ธํŠธ ์ข…์†์„ฑ"(ํ˜„์žฌ ํฌ๊ธฐ๋Š” 30KB, ์ถ•์†Œ ๋ฐ ์••์ถ•๋จ). ์›น ๊ฐœ๋ฐœ์˜ ์—ฌ๋Ÿฌ ์ถ”์„ธ๋กœ ์ธํ•ด ํ•„์ˆ˜ ๋„๊ตฌ๋กœ์„œ์˜ jQuery์˜ ์œ„์น˜๊ฐ€ ์•ฝํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ะ‘ั€ะฐัƒะทะตั€ั‹

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ธํ•ด ๋ธŒ๋ผ์šฐ์ €์˜ ์ฐจ์ด์ ๊ณผ ์ œํ•œ ์‚ฌํ•ญ์ด ๋œ ์ค‘์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ํ‘œ์ค€ํ™”๊ฐ€ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž(Apple, Google, Microsoft ๋ฐ Mozilla)๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ํ‘œ์ค€ ์•ˆ์— ์›น ํ•˜์ดํผํ…์ŠคํŠธ ์‘์šฉ ๊ธฐ์ˆ  ์‹ค๋ฌด ๊ทธ๋ฃน.
๋ธŒ๋ผ์šฐ์ €๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋ฉด์—์„œ ์—ฌ์ „ํžˆ ์„œ๋กœ ๋‹ค๋ฅด์ง€๋งŒ ๊ณต๊ธ‰์—…์ฒด๋Š” ์ ์–ด๋„ ๋ธŒ๋ผ์šฐ์ € ๋Œ€์‹  ๊ณตํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜๊ตฌ ์ „์Ÿ ํ•จ๊ป˜. ์ด์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ € API์—๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ: API ๊ฐ€์ ธ ์˜ค๊ธฐ jQuery์—์„œ Ajax ํ•จ์ˆ˜๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// jQuery
$.getJSON('https://api.com/songs.json')
    .done(function (songs) {
        console.log(songs);
    })

// native
fetch('https://api.com/songs.json')
    .then(function (response) {
        return response.json();
    })
    .then(function (songs) {
        console.log(songs);
    });

๋ฐฉ๋ฒ• ์ฟผ๋ฆฌ์„ ํƒ๊ธฐ ะธ ์ฟผ๋ฆฌ์„ ํƒ๊ธฐ๋ชจ๋‘ ์ค‘๋ณต๋œ jQuery ์„ ํƒ๊ธฐ:

// jQuery
const fooDivs = $('.foo div');

// native
const fooDivs = document.querySelectorAll('.foo div');

์ด์ œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ํด๋ž˜์Šค๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๋ชฉ๋ก:

// jQuery
$('#warning').toggleClass('visible');

// native
document.querySelector('#warning').classList.toggle('visible');

์‚ฌ์ดํŠธ jQuery๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. jQuery ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋Š” ์ƒˆ๋กœ์šด API์— ๋Œ€ํ•ด ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ jQuery๋ฅผ ๊ณ ์ˆ˜ํ•˜์ง€๋งŒ, ์•Œ๊ณ  ๋‚˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ jQuery์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ์ด์ œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํ›จ์”ฌ ๋” ํšจ๊ณผ์  CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ.

๋‘ ๋ฒˆ์งธ ์ด์œ ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์ด ์‚ฌ์šฉํ•˜๋Š” "์—๋ฒ„๊ทธ๋ฆฐ" ๊ฐฑ์‹  ์ „๋žต, Apple Safari๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ฐœ์ž… ์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ OS ์—…๋ฐ์ดํŠธ์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Š” ์ƒˆ๋กœ์šด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ๊ณผ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌ๋˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์‹ ๋ฒ„์ „์ด ์ถœ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•ด๋„ ๋˜๋‚˜์š” ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. jQuery๋‚˜ ํด๋ฆฌํ•„์„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ์ž์‹  ์žˆ๊ฒŒ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์ด์œ ๋Š” Internet Explorer๊ฐ€ ์ „ํ˜€ ๋ฌด๊ด€ํ•œ ์ƒํƒœ์— ๊ฐ€๊นŒ์›Œ์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. IE๋Š” ์˜ค๋žซ๋™์•ˆ ์ „ ์„ธ๊ณ„ ์›น ๊ฐœ๋ฐœ์˜ ๊ณจ์นซ๊ฑฐ๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋Š” ๋„๋ฆฌ ํผ์ ธ ์žˆ์—ˆ์œผ๋ฉฐ IE๋Š” 2000๋…„๋Œ€๋ฅผ ์ง€๋ฐฐํ–ˆ๊ณ  ์ง€์†์ ์ธ ์—…๋ฐ์ดํŠธ ์ „๋žต์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๋ฒ„์ „์ด ์—ฌ์ „ํžˆ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

2016๋…„ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋Š” IE ํ๊ธฐ๋ฅผ ๊ฐ€์†ํ™”ํ–ˆ๊ณ , ์ง€์› ์ค‘๋‹จ 11๋ฒˆ์งธ ๋ฐ ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” IE XNUMX๋กœ ์ง€์›์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์  ๋” ๋งŽ์€ ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ IE ํ˜ธํ™˜์„ฑ์„ ๋ฌด์‹œํ•˜๋Š” ์‚ฌ์น˜๋ฅผ ๋ˆ„๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

jQuery์กฐ์ฐจ๋„ IE 8 ์ดํ•˜ ์ง€์›์„ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 2.0, 2013๋…„์— ์ถœํŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ค๋ž˜๋œ ์‚ฌ์ดํŠธ์™€ ๊ฐ™์ด ์ผ๋ถ€ ๊ฒฝ์šฐ์—๋Š” IE ์ง€์›์ด ์—ฌ์ „ํžˆ ํ•„์š”ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ์ ์  ๋” ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ

jQuery์˜ ์ถœํ˜„ ์ดํ›„ ์ตœ์‹  ๋ฆฌ๋”๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‘, ๋ชจ๋‚œ ะธ ๋ทฐ. jQuery์— ๋น„ํ•ด ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‰ฝ๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  jQuery๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ์—๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ ์ดˆ๊ธฐ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ž‘์—…์€ ์„œ๋ฒ„์— ๋งก๊น๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— React, Angular ๋ฐ Vue ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML, ์ฝ”๋“œ, ์‹ฌ์ง€์–ด CSS๊นŒ์ง€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ์ž์ฒด ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ์‚ฌ์ดํŠธ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์žฅ์ ์€ ์ตœ์‹  ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์–‘์„ ์„ค๋ช…ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์ž‘์—…์„ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋งก๊ธฐ๋Š” ์„ ์–ธ์  ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ณ ์ˆ˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ jQuery ์ฝ”๋“œ๋ฅผ ํŠน์ง•์ง“๋Š” ๋ช…๋ นํ˜• ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋ฐ˜๋Œ€๋ฉ๋‹ˆ๋‹ค.

jQuery์—์„œ๋Š” ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ ์–ธ์  ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” "์ด ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ฅด๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ„๊ทธ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋“ค์€ ์›น ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ์— ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ฑ„ํƒํ–ˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด jQuery์˜ ์ธ๊ธฐ๊ฐ€ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.

jQuery๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ ํ•ด์•ผ jQuery๋ฅผ ์‚ฌ์šฉ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋ฉด ๋ณต์žก์„ฑ์„ ์˜๋ฏธ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์ดํŠธ์—์„œ jQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฒ˜์Œ์—๋Š” ๊ดœ์ฐฎ์•„ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์–ด๋Š ์กฐ๊ฐ์ด ํŽ˜์ด์ง€์˜ ์–ด๋Š ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๋Š” ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋กœ ๋น ๋ฅด๊ฒŒ ์ด์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋Ÿฐ ์ƒํ™ฉ์— ์ฒ˜ํ•ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™”๋ฅผ ์‹œ๋„ํ•  ๋•Œ ์–ด๋ ค์šด ์ผ์ฒ˜๋Ÿผ ๋Š๊ปด์กŒ์Šต๋‹ˆ๋‹ค. jQuery ์„ ํƒ๊ธฐ๋Š” ์„œ๋ฒ„์—์„œ ์ƒ์„ฑ๋œ HTML ๊ตฌ์กฐ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒƒ๋„ ๊นจ์ง€์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ ๋ฐ˜๋Œ€ํŽธ์—๋Š” ์•ฝ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ฑ์ด๋‚˜ ๋™์  ์ฝ˜ํ…์ธ ๋งŒ ํ•„์š”ํ•œ ๋‹จ์ˆœํ•œ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ API๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ํ›จ์”ฌ ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ jQuery๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋” ๊ฐ•๋ ฅํ•œ ๊ฒƒ์ด ํ•„์š”ํ•˜๋”๋ผ๋„ ์ „๋ฌธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ก์‹œ ์˜ค์Šค Ajax์˜ ๊ฒฝ์šฐ ๋˜๋Š” Animate.css ์• ๋‹ˆ๋ฉ”์ด์…˜์šฉ. ์ด๋Š” ์ž‘์€ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ๋ชจ๋“  jQuery๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

jQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ์ด์œ ๋Š” ๊ทธ๊ฒƒ์ด ์›น ์‚ฌ์ดํŠธ์˜ ํ”„๋ŸฐํŠธ ์—”๋“œ์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ API๋‚˜ ํŠน์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐ์šฐ๋Š” ๋Œ€์‹  jQuery ๋ฌธ์„œ๋งŒ ์ฝ๊ณ  ์ฆ‰์‹œ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ นํ˜• ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ™•์žฅ์„ฑ์ด ์ข‹์ง€ ์•Š์ง€๋งŒ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์„ ์–ธ์  ์ ‘๊ทผ ๋ฐฉ์‹๋ณด๋‹ค ๋ฐฐ์šฐ๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ œํ•œ๋œ ์‚ฌ์ดํŠธ์˜ ๊ฒฝ์šฐ jQuery๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ฐจ๋ถ„ํ•˜๊ฒŒ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋ณต์žกํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ๋‚˜ ์ปดํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์‚ฌ์ดํŠธ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณต์žกํ•ด์ง€์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๊ณ  jQuery๋ณด๋‹ค ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ๊ด€์‹ฌ์ด ์—†๋‹ค๋ฉด jQuery๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์˜ IE๋ฅผ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด jQuery๋Š” IE๊ฐ€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜€๋˜ ์‹œ์ ˆ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Prospection

jQuery๋Š” ์กฐ๋งŒ๊ฐ„ ์‚ฌ๋ผ์ง€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋…€ ์ ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœ, ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„ API ์‚ฌ์šฉ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ชจ๋“  ์„ธ๋Œ€์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ, ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฉด์—์„œ ๋Œ€์ฒด๋˜์—ˆ์ง€๋งŒ jQuery๋Š” ํ˜„๋Œ€ ์›น ์ƒ์„ฑ์— ๋งค์šฐ ๊ธ์ •์ ์ธ ์—ญํ• ์„ ํ•ด์™”์Šต๋‹ˆ๋‹ค.

jQuery์˜ ๊ธฐ๋Šฅ์ด ํฌ๊ฒŒ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์€ ํ–ฅํ›„ ๋ช‡ ๋…„ ๋™์•ˆ ๊ณ„์† ๋Š๋ฆฌ์ง€๋งŒ ๊พธ์ค€ํžˆ ๊ฐ์†Œํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์›น ์‚ฌ์ดํŠธ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณด๋‹ค ํ˜„๋Œ€์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฉฐ jQuery์— ์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ ์  ๋” ๋“œ๋ฌผ์–ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์‚ฌ๋žŒ๋“ค์€ ์›น ๊ฐœ๋ฐœ ๋„๊ตฌ๊ฐ€ ์“ธ๋ชจ์—†์–ด์ง€๋Š” ์†๋„๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ๋น ๋ฅธ ๋ฐœ์ „์˜ ์ฆ๊ฑฐ์ž…๋‹ˆ๋‹ค. jQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ์ผ์„ ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋…€์˜ ํ›„๊ณ„์ž๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€