๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Back
NodeJs
01-Node.js

1. Node.js๋ž€?

1.1 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด?

์ปดํ“จํ„ฐ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—†๋‹ค๋ฉด? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

cf. ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์ด๋ฏธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์žˆ๊ธฐ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

A JavaScript engine is a software component that executes JavaScript code. The first JavaScript engines were mere interpreters, but all relevant modern engines use just-in-time compilation for improved performance. JavaScript engines are typically developed by web browser vendors, and every major browser has one.

JavaScript ์—”์ง„์€ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ตœ์ดˆ์˜ JavaScript ์—”์ง„์€ ๋‹จ์ˆœํ•œ interpreter ์˜€์ง€๋งŒ, ๋ชจ๋“  ๊ด€๋ จ ์ตœ์‹  ์—”์ง„์€ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด Just-In-Time ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. JavaScript ์—”์ง„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ € ๊ณต๊ธ‰์—…์ฒด์—์„œ ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋ชจ๋“  ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €์— ํ•˜๋‚˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


1.2 ์ปดํ“จํ„ฐ๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด?

์ปดํ“จํ„ฐ ํ”„๋กœ์„ธ์„œ๋Š” ์˜ค์ง 0๊ณผ 1๋งŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋จธ์‹  ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™˜ ๊ณผ์ •์€ ์ปดํŒŒ์ผ๊ณผ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ†ตํ•ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

  • Interpreter : ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ํ•œ์ค„ ์”ฉ ๋ฒˆ์—ญ
  • Compiler : ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜

1.3 JIT Compiliation (Just In Time)

์ดˆ๊ธฐ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๊ทธ์ € Interpreter ์˜€๋‹ค๋ฉด ํ˜„์žฌ๋Š” JIT Compiliation์„ ์ด์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด Interpreter ์–ธ์–ด๋Š” ์ปดํŒŒ์ผ ๋˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋ณด๋‹ค ํ•œ์ค„ ํ•œ์ค„ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์žฌ ์›น์—์„œ๋Š” ์ง€๋„ ๊ธฐ๋Šฅ๋“ฑ ๊ต‰์žฅํžˆ Heavyํ•œ ๊ธฐ๋Šฅ๋“ค๋„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ์—, ํ˜„์žฌ๋Š” ๋” ๋‚˜์€ ํผํฌ๋จผ์Šค๋ฅผ ์œ„ํ•ด์„œ JIT ์ปดํŒŒ์ผ์„ ์ด์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

In computing, just-in-time (JIT) compilation (also dynamic translation or run-time compilations)[1] is a way of executing computer code that involves compilation during execution of a program (at run time) rather than before execution.

JIT compilation is a combination of the two traditional approaches to translation to machine codeโ€”ahead-of-time compilation (AOT), and interpretationโ€”and combines some advantages and drawbacks of both.

-wikipedia


1.4 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—”์ง„์˜ ์ข…๋ฅ˜

Google์˜ V8์€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” JavaScript ์—”์ง„์ž…๋‹ˆ๋‹ค. SpiderMonkey๋Š” Firefox ๋ฐ ํ•ด๋‹น ํฌํฌ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Mozilla์—์„œ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. JavaScriptCore๋Š” Apple์˜ Safari ๋ธŒ๋ผ์šฐ์ €์šฉ ์—”์ง„์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ WebKit ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Chakra๋Š” Internet Explorer ๋ธŒ๋ผ์šฐ์ €์˜ ์—”์ง„์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์›๋ž˜ Edge ๋ธŒ๋ผ์šฐ์ €์šฉ์œผ๋กœ Microsoft์— ์˜ํ•ด ๋ถ„๊ธฐ๋˜์—ˆ์ง€๋งŒ, Edge๋Š” ๋‚˜์ค‘์— Chromium ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ €๋กœ ์žฌ๊ตฌ์ถ•๋˜์–ด ํ˜„์žฌ V8์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ChromeV8
FirefoxSpiderMonkey
SafariJavascriptCore
Internet ExplorerCharkra

2. Node.js ์—ญ์‚ฌ

  • 1995๋…„, Netscape ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JavaScript๋ฅผ ์†Œ๊ฐœ
  • 2008๋…„, Web 2.0, Google์ด Chrome ๋ธŒ๋ผ์šฐ์ € ๋ฐœํ‘œ, Chrome ๋ธŒ๋ผ์šฐ์ €๋Š” JS์—”์ง„์œผ๋กœ V8์—”์ง„์„ ์‚ฌ์šฉ
    • V8์—”์ง„ ๋•๋ถ„์— JS ์†๋„๊ฐ€ ๋นจ๋ผ์ง
  • 2009๋…„, Ryan Dahi๊ฐ€ Node.js ์ฐฝ์‹œ
    • ๋ธŒ๋ผ์šฐ์ € ์™ธ๋ถ€์—์„œ V8์—”์ง„์„ ์‚ฌ์šฉํ•ด JS๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ฌ
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ ์ด์šฉํ•˜๋ ค๋ฉด? Node.js๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

3. Node.js Runtime

3.1 Runtime์ด๋ž€?

  • ๋Ÿฐํƒ€์ž„ : ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ์˜๋ฏธ
  • Node.js๋‚˜ ํฌ๋กฌ ๋“ฑ์˜ ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €๋“ค์—์„œ JS๊ฐ€ ๊ตฌ๋™๋˜๊ธฐ์— Node.js๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋“ค๋„ JS ๋Ÿฐํƒ€์ž„์ด๋‹ค.
  • Node.js๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋„ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์•„๋‹Œ JS ๋Ÿฐํƒ€์ž„์ด๋‹ค.
1
Runtime Enviroment----------------------------------------
2
3
v8 ---> Node.js API ---> Node.js bindings ---> libuv
4
5
^ V8 : js์ฝ”๋“œ ์‹คํ–‰
6
^ libuv : db์ ‘๊ทผ, ํŒŒ์ผ ์ฝ๋”” ๋“ฑ v8์ด ๋‹ค๋ฃจ๋Š” ๊ฒƒ ์ด์™ธ์—๋Š” libuv๊ฐ€ ์ฒ˜๋ฆฌ
7
^ Node.js API : ํŒŒ์ผ ์‹œ์Šคํ…œ์ด๋‚˜, crypto ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ ๋“ฑ์˜ API
8
: API๋Š” JS๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ๋„ ์žˆ์ง€๋งŒ, C++๋‚˜ C๋กœ ๋˜์–ด์žˆ์Œ
9
----------------------------------------------------------

v8์ด ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  Node.js APIs๋“ค ์ค‘ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , Node.js ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด์„œ libuv์— ์˜ํ•ด์„œ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.


4. Node.js ์„ค์น˜

1
node --version # node ๋ฒ„์ „ ํ™•์ธ
2
node # node ํ™˜๊ฒฝ ์ง„์ž…
3
.exit # node ํ™˜๊ฒฝ ๋น ์ ธ๋‚˜์˜ค๊ธฐ (ํ˜น์€ Ctrl + C๋ฅผ 2๋ฒˆ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.)

4.1 REPL

1
READ(์ฝ๊ธฐ), EVAL(ํ‰๊ฐ€), PRINT(์ถœ๋ ฅ)๋ฅผ ๋ฐ˜๋ณต
  • REPL(Read-Eval(evaluation)-Print Loop)
    • ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ๊ทธ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•ด์ฃผ๋Š” ํ™˜๊ฒฝ
  • REPL ํ™˜๊ฒฝ์€ ๊ฐ„๋‹จํ•œ JS ์ฝ”๋“œ ๋“ฑ์„ ์ฆ‰์„์—์„œ ์‹คํ–‰ํ•ด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณผ ๋–„ ์‚ฌ์šฉ

5. Browser API & Node.js API

  • ๋‘˜ ๋‹ค ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ API๊ฐ€ console API๊ฐ€ ์žˆ๋‹ค.
  • cf. Node.js๋Š” V8์—”์ง„์„ ์‚ฌ์šฉํ•ด ์ตœ์‹  ECMAScript ๊ธฐ์ค€์œผ๋กœ ๊ณ„์† ์—…๋ฐ์ดํŠธํ•˜๊ธฐ์— ์ตœ์‹  JS ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ € API์ธ window ๊ฐ์ฒด ์‚ฌ์šฉ
    • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด๋กœ Node.js repi ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ
  • Node.js API์ธ Process ๊ฐ์ฒด ์‚ฌ์šฉ
    • node.js์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฐ์ฒด์ผ๋ฟ, ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

์•„์˜ˆ ๋‹ค๋ฅธ API

๋ธŒ๋ผ์šฐ์ € APINode.js API
windowglobal
documentprocess
history(๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ)module
location(๋ธŒ๋ผ์šฐ์ € ํ˜„์žฌ์œ„์น˜, url ๋“ฑ)filename
navigator(ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ์ •๋ณด ๋“ฑ)require()

๋น„์Šทํ•œ API๋“ค(Node.js๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์˜ Convention์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ)

๋ธŒ๋ผ์šฐ์ € APINode.js API
urlurl
settimeoutsettimeout

๋ธŒ๋ผ์šฐ์ € API์™€ Node.js API ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์ค„์ด๋ ค๊ณ  ๋…ธ๋ ฅํ•จ