-
[MJDD] 3์ฅ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์คํ ๋ฐฉ๋ฒLanguage/JavaScript 2024. 12. 5. 16:34728x90
๐จ ์ด ๊ธ์ '๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ 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)
'Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MIFB_22] Javascript ๋ฐฐ์ด ํ์ฉ์์ (0) 2024.12.10 [MJDD] 2์ฅ ์๋ฐ์คํฌ๋ฆฝํธ๋? (2) 2024.11.28 [MJDD] 1์ฅ ํ๋ก๊ทธ๋๋ฐ (0) 2024.11.28 [MJDD] ๋ค์ด๊ฐ๋ฉฐ (0) 2024.11.26 [JavaScript] ์ค์ฝํ (0) 2024.11.24