๐ฒ Node.js๋ ๋ฌด์์ธ๊ฐ?
๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, Node.js๋ Chrome V8 Javascript ์์ง์ผ๋ก ๋น๋๋ Javascript ๋ฐํ์์ด๋ค.
์ ๊น, ๊ทธ๋ผ Chrome V8 Javascript๋ ๋ฌด์์ด๊ณ , ๋ฐํ์์ ๋ฌด์์ผ๊น?
๋จผ์ Chrome V8์ ๋ํด์ ์์๋ณด์.
โ๏ธ Chrome V8 ์์ง์ด๋?
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. C++๋ก ์ฐ์ฌ์ง ์คํ์์ค๋ก ๋์ ํผํฌ๋จผ์ค์ ์๋ฐ์คํฌ๋ฆฝํธ *์น ์ด์ ๋ธ๋ฆฌ ์์ง์ด๋ค. Chrome๊ณผ Node.js ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ฒ๋ค์๋ ์ฐ์ธ๋ค. ECMAScript์ ์น ์ด์ ๋ธ๋ฆฌ๋ฅผ ๊ตฌํํ๊ณ , ์๋์ฐ7 ์ด์๋ฒ์ , MacOs 10.12 ์ด์ ๋ฒ์ ... ๋ฑ์์ ๋์๊ฐ๋ค. V8์์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๊ฑฐ๋ C++ ์ดํ๋ฆฌ์ผ์ด์ ์์๋ ์ธ ์ ์๋ค.
* ์น ์ด์ ๋ธ๋ฆฌ : C++๋ฑ์ ์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์น์์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค. ์ต์ ์น ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ ์๋ก์ด ์ ํ์ ์ฝ๋.
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows 7 or later, macOS 10.12+, and Linux systems that use x64, IA-32, ARM, or MIPS processors. V8 can run standalone, or can be embedded into any C++ application.
โ๏ธ Run time ์ด๋?
์์ฝ
: ๋ฐํ์์๋ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐํ์ ์์คํ ์ด ์๋ค.
: ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ค์ ํ๋ก๊ทธ๋จ ์ธ์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
: ๋ฐํ์ ์์คํ ์ ์ปดํจํฐ ์ธ์ด๋ฅผ ์คํํ๊ธฐ ์ํ ์ํํธ์จ์ด์ด๋ค. (์คํํด์ฃผ๋ ํ๊ฒฝ, ์คํํด์ฃผ๋ ๊ฒ)
์๋ฅผ ๋ค์ด, ๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๋ฉด
console.log("Hello K-World!");
๋ฐํ์ ํ๊ฒฝ์์ ์คํํ๊ธฐ ์ ์๋ ๊ทธ๋ฅ ์ฝ๋์ด๋ค. ๋ฐํ์ ํ๊ฒฝ์์ ์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด "Hello K-World"๋ฅผ ๋ณผ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์์ธํ
- run time library
์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์, ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋ฐํ์(์คํ) ์ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ปดํ์ผ๋ฌ์์ ์ฌ์ฉํ๋ ํน์ ํ๋ก๊ทธ๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์ฌ๊ธฐ์๋ ์ ๋ ฅ, ์ถ๋ ฅ ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ฅ์ด ํฌํจ๋๋ค.
In computer programming, a runtime library is a special program library used by a compiler, to implement functions built into a programming language, during the runtime (execution) of a computer program. This often includes functions for input and output, or for memory management.
- run time system
๋ฐํ์ ์์คํ (๋ฐํ์ ์์คํ ์ด๋ผ๊ณ ๋ถ๋ฅด๊ฑฐ๋ ๋ฐํ์์ด๋ผ๊ณ ๋ถ๋ฆ)์ ๋ช๋ช ์ปดํจํฐ ์ธ์ด๋ก ์์ฑ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์คํ์ ์ง์ํ๊ธฐ ์ํด์ ์ค๊ณ๋ ์ํํธ์จ์ด์ด๋ค. ๋ฐํ์ ์์คํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก์ฐ ๋ ๋ฒจ(์ ์์ค) ๋ช ๋ น์ ๊ตฌํ์ ํฌํจํ๊ณ ํ์ด ๋ ๋ฒจ(๊ณ ์์ค)์ ๋ช ๋ น ๋ํ ๊ตฌํํ ์ ์์ผ๋ฉฐ ์ ํ ๊ฒ์ฌ, ๋๋ฒ๊น , ์ฝ๋ ์์ฑ, ์ต์ ํ๊น์ง ์ง์ํ๋ค. ๋ช๋ช์ ๋ฐํ์ ์์คํ ์๋น์ค๋ ์ดํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ธ์ค ํ ์ ์์ง๋ง, ์์ ์ค์ผ์ฅด๋ง, ๋ฆฌ์์ค ๊ด๋ฆฌ ๊ฐ์ ๋ค๋ฅธ ์๋น์ค๋ค์ ์์ธ์คํ ์ ์๋ค.
A run-time system (also called runtime system or just runtime) is software designed to support the execution of computer programs written in some computer language. The run-time system contains implementations of basic low-level commands and may also implement higher-level commands and may support type checking, debugging, and even code generation and optimization. Some services of the run-time system are accessible to the programmer through an application programming interface, but other services (such as task scheduling and resource management) may be inaccessible.
stackover flow (Wikipedia ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ / ๋ฐํ์ ์์คํ )
๊ทธ๋์ ๋ค์ Node.js๊ฐ ๋ฌด์์ธ๊ฐ๋ก ๋์๊ฐ์๋ฉด, ๋ ธ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ฃผ๋ ๊ฒ(๋ฐํ์ ์์คํ )์ด๋ผ๊ณ ๋ณผ ์ ์๊ฒ ๋ค.
๊ธฐ์กด์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ ์น ๋ธ๋ผ์ฐ์ ์์์๋ง ์คํํ ์ ์์๋ค. (๋ธ๋ผ์ฐ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ๋ด์ฅํ๊ณ ์์ผ๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.) ๊ทธ๋์ ๋ธ๋ผ์ฐ์ ์ธ์ ํ๊ฒฝ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํ ์ฌ๋ฌ ์๋๊ฐ ์์๋ค. ๊ทธ๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ์๋ ๋ฌธ์ ๋๋ฌธ์ ํฐ ํธ์์ ์ป์ง ํฐ ํธ์์ ์ป์ง ๋ชปํ๋ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ! 2008๋ ๊ตฌ๊ธ์ด V8์์ง์ ์ฌ์ฉํ ํฌ๋กฌ์ ์ถ์ํ๋ฉด์ ์ํฉ์ด ๋ฐ๋์๋ค. V8์์ง์ ๊ทธ๋ํ ์๋ํ๋ ์ฌ๋ฌ ๋ค๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง๊ณผ ๋ค๋ฅด๊ฒ ๋งค์ฐ ๋นจ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ ์์ค์๋ค. ์ด๋ฌํ ์๋ ๋ฌธ์ , ๊ทธ๋ฆฌ๊ณ ์คํ์์ค๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ฉด์ ๋ผ์ด์ธ ๋ฌ(Ryan Dahl)์ด 2009๋ V8 ์์ง ๊ธฐ๋ฐ์ ๋ ธ๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ค.
๋ ธ๋๋ V8๊ณผ ํจ๊ป libuv๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉํ๋ค. V8๊ณผ libuv๋ C์ C++๋ก ๊ตฌํ๋์ด์๊ณ , ๋ด๊ฐ ์ฝ๋ฉํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ ธ๋๊ฐ V8 liuv์ ์ฐ๊ฒฐํด์ค๋ค๊ณ ํ๋ค.
libuv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ธ๋์ ํน์ฑ์ธ ์ด๋ฒคํธ ๊ธฐ๋ฐ, ๋ ผ ๋ธ๋กํน I/O ๋ชจ๋ธ์ ๊ตฌํํ๊ณ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฒคํธ ๊ธฐ๋ฐ, ๋ ผ ๋ธ๋กํน I/O๋ ๋ ๋ฌด์์ผ๊น?
๋ค์ ๊ธ์์ ์ด๋ฒคํธ์ ๋ ผ ๋ธ๋กํน I/O์ ๋ํด ๋ ์์๋ณด๋ ค๊ณ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
node.js ๊ณต์๋ฌธ์ https://nodejs.org/ko/
node.js ๊ต๊ณผ์ https://thebook.io/080229/ch01/01/
Chrome V8 ์์ง https://v8.dev/
WebAssembly ๋ชจ์ง๋ผ ๊ณต์๋ฌธ์ https://developer.mozilla.org/ko/docs/WebAssembly
What is run time? https://stackoverflow.com/questions/3900549/what-is-runtime.
'Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js] express์์ html ์ฌ์ฉํ๊ธฐ | ๋ ๋๋ง ํ๊ธฐ (0) | 2022.03.21 |
---|---|
[Node.js] Request log ๋จ๊ธฐ๋ ๋ฏธ๋ค์จ์ด (0) | 2022.03.21 |
[Node.js] ๋ ธ๋ Restful API ๋ ๋ฌด์์ผ๊น? (0) | 2022.01.31 |
[Node.js] ๋ ธ๋ package.json ์ฌ์ฉ๋ฒ (1) | 2022.01.31 |
[Node.js] Express ์ค์นํ๊ธฐ | ๋ ธ๋js ํ๋ ์์ํฌ ์ฌ์ฉํ๊ธฐ (0) | 2022.01.29 |