ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MJDD] 3์žฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์‹คํ–‰ ๋ฐฉ๋ฒ•
    Language/JavaScript 2024. 12. 5. 16:34
    728x90

    ๐Ÿšจ ์ด ๊ธ€์€ '๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive (์ด์›…๋ชจ ์ €)'๋ฅผ ์ฝ๊ณ , ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.


    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์‹คํ–‰ ๋ฐฉ๋ฒ•

    3.1 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํฌ๊ฒŒ ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” Node.js ํ™˜๊ฒฝ์ด ์žˆ๋‹ค. ๋‘ ํ™˜๊ฒฝ์€ ์šฉ๋„์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
    ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์€ HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด ์›นํŽ˜์ด์ง€๋ฅผ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉ์ ์ด์ง€๋งŒ, Node.js๋Š” ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค. ๊ฒฐ๊ตญ ์„œ๋กœ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, DOM API์˜ ๊ฒฝ์šฐ Node์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜๋Œ€๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค. ๋ณด์•ˆ์ƒ์˜ ์ด์œ ์ด๋‹ค.
    DOM API์™€ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์˜ API๋ฅผ Web API๋ผ๊ณ  ํ•œ๋‹ค.

    ๋ธŒ๋ผ์šฐ์ €๋Š” ECMAScript์™€ Web API๋ฅผ, Node.js๋Š” ECMAScript์™€ ๊ณ ์œ ์˜ API๋ฅผ ์ง€์›ํ•œ๋‹ค.

    DOM๊ณผ Web API์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์•Œ์•„๋ณด์ž

    3.2 ์›น ๋ธŒ๋ผ์šฐ์ €

    ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ ์œ ์œจ์ด 2024๋…„ 6์›” ๊ธฐ์ค€ ์•ฝ 65%, ์‚ฌํŒŒ๋ฆฌ๊ฐ€ ์•ฝ 18%๋กœ ๊ณผ์ ํ•˜๊ณ  ์žˆ๋‹ค. ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋Š” Node์—์„œ๋„ ์‚ฌ์šฉ๋œ๋‹ค.

    3.2.1 ๊ฐœ๋ฐœ์ž ๋„๊ตฌ

    ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋ฐœ์ž๋„๊ตฌ ๊ธฐ๋Šฅ๋“ค์„ ๋ด๋ณด์ž.

    • Elements : ๋กœ๋”ฉ๋œ ์›นํŽ˜์ด์ง€์˜ DOM๊ณผ CSS๋ฅผ ํŽธ์ง‘ํ•ด ๋ Œ๋”๋ง๋œ ๋ทฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Console : ์—๋Ÿฌ ํ™•์ธ, console.log ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•œ๋‹ค.
    • Sources : ์›นํŽญ์ง€์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Network : ์›นํŽ˜์ด์ง€์— ๊ด€๋ จ๋œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ •๋ณด์™€ ์„ฑ๋Šฅ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Application : ์›น ์Šคํ† ๋ฆฌ์ง€, ์„ธ์…˜, ์ฟ ํ‚ค ๋“ฑ์„ ํ™•์ธ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    3.2.2 Console

    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์‚ดํŽด๋ด์•ผ ํ•  ๊ณณ์ด๋‹ค. ์ฃผ๋กœ console.log๋ฅผ ์‚ฌ์šฉํ•ด ํ™•์ธํ•œ๋‹ค.
    ์ฝ˜์†”์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ(REPL; REad Eval Print Loop)์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    3.2.3 ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

    ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋ฉด script ํƒœ๊ทธ์— ํฌํ•จ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅด ์‹คํ–‰ํ•œ๋‹ค.
    ๋‹ค์Œ html ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด์–ด๋ณด๋ฉด

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>counter</title>
      </head>
      <body>
        <div id="counter">0</div>
        <button id="increase">+</button>
        <button id="decrease">-</button>
        <script>
          const $counter = document.getElementById("counter-x");
          const $increase = document.getElementById("increase");
          const $decrease = document.getElementById("decrease");
    
          let num = 0;
          const render = function () {
            $counter.innerHTML = num;
          };
    
          $increase.onclick = function () {
            num++;
            console.log("increase ๋ฒ„ํŠผ ํด๋ฆญ", num);
            render();
          };
    
          $decrease.onclick = function () {
            num--;
            console.log("decrease ๋ฒ„ํŠผ ํด๋ฆญ", num);
            render();
          };
        </script>
      </body>
    </html>

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    '+' ๋˜๋Š” '-' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด "Uncaught TypeError:Cannot set property 'innerHTML'of null"๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    3.2.4 ๋””๋ฒ„๊น…

    sources ํŒจ๋„์— ๊ฐ€์„œ ๋ณด๋ฉด ๋””๋ฒ„๊น…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋””๋ฒ„๊น…์„ ํ•ด๋ณด๋ฉด $counter ๋ณ€์ˆ˜์˜ ๊ฐ’์ด null์ธ์ง€ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    13๋ฒˆ์งธ ์ค„์—์„œ $counter ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ HTML ์š”์†Œ์˜ ์•„์ด๋””๋ฅผ counter-x๋กœ ์ž˜๋ชป ์ง€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ๋˜ ์—๋Ÿฌ์˜€๋‹ค.

    3.3 Node.js

    ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์ด๋ฅผ ๊ด€๋ฆฌํ•  ๋„๊ตฌ๋“ค์ด ํ•„์š”ํ•˜๋‹ค.

    3.3.1 Node.js์™€ npm ์†Œ๊ฐœ

    2009๋…„ ๋ผ์ด์–ธ ๋‹ฌ์ด ๋ฐœํ‘œํ•œ Node.js๋Š” ํฌ๋กฌ V8 ์ž๋ฐ”์Šผ๋ฅด๋น„ํŠธ ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค.
    npm์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ด๋‹ค. Node.js์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ๋“ค์„ ํŒจํ‚ค์ง€ํ™”ํ•ด์„œ ๋ชจ์•„๋‘” ์ €์žฅ์†Œ ์—ญํ• ๊ณผ ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ CLI(Command line interface)๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

    CLI์— ๋Œ€ํ•ด์„œ๋Š” ๋˜ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž

    3.3.2 Node.js ์„ค์น˜

    $ node -v
    $ npm -v

    ์„ค์น˜ ํ›„ ๋ฒ„์ „์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    3.3.3 Node.js REPL

    Node.js๊ฐ€ ์ œ๊ณตํ•˜๋Š” REPL์„ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ๊ฒฐ๊ณผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    ํ„ฐ๋ฏธ๋„์—์„œ $ node๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ >๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    3.4 ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ์ฝ”๋“œ

    ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค.


    ๋” ์•Œ์•„๋ณผ๋งŒํ•œ ๊ฒƒ

    • DOM
    • Web API
    • CLI(Command Line Interface)
Designed by Tistory.