JavaScript๋ก ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํ ํ๋ซํผ์ธ Node.js 19.0์ด ์ถ์๋์์ต๋๋ค. Node.js 19๋ 2023๋ 18์๊น์ง ์ ๋ฐ์ดํธ๊ฐ ์ ๊ณต๋๋ ์ ๊ท ์ง์ ๋ธ๋์น์ ๋๋ค. ์์ผ๋ก ๋ฉฐ์น ๋ด์ Node.js 2025 ๋ธ๋์น์ ์์ ํ๊ฐ ์๋ฃ๋์ด LTS ์ํ๋ฅผ ๋ฐ๊ฒ ๋๋ฉฐ 16.0๋ 2023์๊น์ง ์ง์๋ฉ๋๋ค. Node.js 14.0์ ์ด์ LTS ๋ธ๋์น ์ ์ง ๊ด๋ฆฌ๋ 2023๋ XNUMX์๊น์ง ์ง์๋๋ฉฐ, ๋ง์ง๋ง LTS ๋ธ๋์น XNUMX XNUMX๋ ์ ์ธ XNUMX๋ XNUMX์๊น์ง ์ ์ง๋ฉ๋๋ค.
์ฃผ์ ๊ฐ์ ์ฌํญ:
- V8 ์์ง์ด Chromium 10.7์์ ์ฌ์ฉ๋๋ ๋ฒ์ 107๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค. Node.js 18 ๋ธ๋์น์ ๋น๊ตํ์ฌ ์์ง์ ๋ณ๊ฒฝ ์ฌํญ ์ค ์๋ก์ด ๊ธฐ๋ฅ formatRange๋ฅผ ์ถ๊ฐํ๋ Intl.NumberFormat API์ ์ธ ๋ฒ์งธ ๋ฒ์ ๊ตฌํ์ด ์ฃผ๋ชฉ๋ฉ๋๋ค. (), formatRangeToParts() ๋ฐ selectRange(), ์ธํธ ๊ทธ๋ฃนํ, ๋ฐ์ฌ๋ฆผ ๋ฐ ์ ๋ฐ๋ ์ค์ ์ ์ํ ์๋ก์ด ์ต์ , ๋ฌธ์์ด์ ์ญ์ง์๋ก ํด์ํ๋ ๊ธฐ๋ฅ. ํฌํจ๋ ์ข ์์ฑ llhttp 8.1.0 ๋ฐ npm 8.19.2๋ ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- ๊ฐ์ ธ์จ ํ์ผ์ด ๋ณ๊ฒฝ๋ ๋ ํ๋ก์ธ์ค๊ฐ ๋ค์ ์์๋๋๋ก ๋ณด์ฅํ๋ ๊ฐ์ ๋ชจ๋์ ๊ตฌํ๊ณผ ํจ๊ป ์คํ์ ์ธ "node -watch" ๋ช ๋ น์ด ์ ์๋์์ต๋๋ค(์๋ฅผ ๋ค์ด "node -watch index.js"๊ฐ ์คํ๋๋ฉด ํ๋ก์ธ์ค๋ index.js๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก ๋ค์ ์์๋ฉ๋๋ค).
- ๋๊ฐ๋ ๋ชจ๋ HTTP/HTTPS ์ฐ๊ฒฐ์ ๋ํด HTTP 1.1 ์ฐ๊ฒฐ ์ ์ง ๋ฉ์ปค๋์ฆ ์ง์์ด ํ์ฑํ๋์ด ๋์ผํ ์ฐ๊ฒฐ ๋ด์์ ์ฌ๋ฌ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํน์ ์๊ฐ ๋์ ์ฐ๊ฒฐ์ ์ด์ด ๋ก๋๋ค. Keep-Alive๋ ์ฒ๋ฆฌ๋๊ณผ ์ฑ๋ฅ์ ํฅ์์ํฌ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ ์ด๊ธฐ ์ ํ ์๊ฐ์ 5์ด๋ก ์ค์ ๋ฉ๋๋ค. ์๋ฒ ์๋ต์์ Keep-Alive HTTP ํค๋ ๊ตฌ๋ฌธ ๋ถ์์ ๋ํ ์ง์์ด HTTP ํด๋ผ์ด์ธํธ ๊ตฌํ์ ์ถ๊ฐ๋์์ผ๋ฉฐ Keep-Alive๋ฅผ ์ฌ์ฉํ๋ ๋นํ์ฑ ํด๋ผ์ด์ธํธ์ ์๋ ์ฐ๊ฒฐ ํด์ ๊ฐ Node.js HTTP ์๋ฒ ๊ตฌํ์ ์ถ๊ฐ๋์์ต๋๋ค.
- WebCrypto API๋ Ed25519, Ed448, X25519 ๋ฐ X448 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ์ธํ๊ณ ์์ ์นดํ ๊ณ ๋ฆฌ๋ก ์ด์ ๋์์ต๋๋ค. WebCrypto ๋ชจ๋์ ์ก์ธ์คํ๋ ค๋ฉด ์ด์ globalThis.crypto ๋๋ require('node:crypto').webcrypto๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- DTrace, SystemTap ๋ฐ ETW(Windows์ฉ ์ด๋ฒคํธ ์ถ์ ) ์ถ์ ๋๊ตฌ์ ๋ํ ์ง์์ด ์ ๊ฑฐ๋์์ผ๋ฉฐ, ์ ์ ํ ์ง์ ๊ณํ ์์ด ์ต์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ถ์ ์ ํ๋ค๊ณ ๊ฐ์ฃผ๋์์ต๋๋ค.
Node.js ํ๋ซํผ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฒ ์ ์ง ๊ด๋ฆฌ์ ์ผ๋ฐ ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ ์์ฑ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. Node.js์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ํ์ฅํ๊ธฐ ์ํด HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ๊ตฌํ์ด ํฌํจ๋ ๋ชจ๋, ํตํฉ์ฉ ๋ชจ๋์ ์ฐพ์ ์ ์๋ ๋๊ท๋ชจ ๋ชจ๋ ๋ชจ์์ด ์ค๋น๋์์ต๋๋ค. ๋ค์ํ ์น ํ๋ ์์ํฌ, WebSocket ๋ฐ Ajax ํธ๋ค๋ฌ, DBMS ์ปค๋ฅํฐ(MySQL, PostgreSQL, SQLite, MongoDB), ํ ํ๋ฆฟ ์์ง, CSS ์์ง, ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ๋ฐ ์ธ์ฆ ์์คํ (OAuth), XML ํ์.
๋ง์ ์์ ๋ณ๋ ฌ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด Node.js๋ ๋น์ฐจ๋จ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐ ์ฝ๋ฐฑ ํธ๋ค๋ฌ ์ ์์ ๊ธฐ๋ฐํ ๋น๋๊ธฐ ์ฝ๋ ์คํ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. ๋ฉํฐํ๋ ์ฑ ์ฐ๊ฒฐ์ ์ง์๋๋ ๋ฐฉ๋ฒ์ epoll, kqueue, /dev/poll ๋ฐ select์ ๋๋ค. ์ฐ๊ฒฐ ๋ค์คํ๋ฅผ ์ํด Unix ์์คํ ์ libev ๋ฐ Windows์ IOCP์ ๋ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ธ libuv ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. libeio ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๋ ํ์ ์์ฑํ๊ณ c-ares๋ฅผ ํตํฉํ์ฌ ๋น์ฐจ๋จ ๋ชจ๋์์ DNS ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ์ฐจ๋จ์ ์ ๋ฐํ๋ ๋ชจ๋ ์์คํ ํธ์ถ์ ์ค๋ ๋ ํ ๋ด์์ ์คํ๋ ๋ค์ ์ ํธ ์ฒ๋ฆฌ๊ธฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฆ ์๋ ํ์ดํ(ํ์ดํ)๋ฅผ ํตํด ๋ค์ ์ ์กํฉ๋๋ค. JavaScript ์ฝ๋์ ์คํ์ Google์์ ๊ฐ๋ฐํ V8 ์์ง์ ์ฌ์ฉํ์ฌ ์ ๊ณต๋ฉ๋๋ค(๋ํ Microsoft๋ Chakra-Core ์์ง์ผ๋ก Node.js ๋ฒ์ ์ ๊ฐ๋ฐ ์ค์ ๋๋ค).
๋ณธ์ง์ ์ผ๋ก Node.js๋ Perl AnyEvent, Ruby Event Machine, Python Twisted ํ๋ ์์ํฌ ๋ฐ Tcl ์ด๋ฒคํธ ๊ตฌํ๊ณผ ์ ์ฌํ์ง๋ง Node.js์ ์ด๋ฒคํธ ๋ฃจํ๋ ๊ฐ๋ฐ์์๊ฒ ์จ๊ฒจ์ ธ ์์ผ๋ฉฐ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ ์ฌํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์. node.js์ฉ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ ๋ ์๋ฅผ ๋ค์ด "var result = db.query("select..");"๋ฅผ ์ํํ๋ ๋์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ์ธ๋ถ ์ฌํญ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์์
์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ํ์ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ์ ํจ๊ป Node.js๋ ๋น๋๊ธฐ ์คํ ์์น์ ์ฌ์ฉํฉ๋๋ค. ์ฝ๋๋ "db.query("select..", function (result) {result processing});"๋ก ๋ณํ๋๋ฉฐ, ์ฌ๊ธฐ์ ์ ์ด๋ ์ถ๊ฐ ์ฝ๋๋ก ์ฆ์ ์ ๋ฌ๋๊ณ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru