JavaScript๋ก ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํ ํ๋ซํผ์ธ Node.js 16.0์ด ์ถ์๋์์ต๋๋ค. Node.js 16.0์ ์ฅ๊ธฐ ์ง์ ๋ธ๋์น๋ก ๋ถ๋ฅ๋๋๋ฐ, ์ด ์ํ๋ ์์ ํ ์ดํ์ธ 16.0์์๋ง ๋ถ์ฌ๋ ์์ ์ ๋๋ค. Node.js 2023์ 14.0๋ 2023์๊น์ง ์ง์๋ฉ๋๋ค. Node.js 12.0์ ์ด์ LTS ๋ธ๋์น ์ ์ง ๊ด๋ฆฌ๋ 2022๋ 10.0์๊น์ง ์ง์๋๋ฉฐ, ๋ง์ง๋ง LTS ๋ธ๋์น 10์ XNUMX๋ ์ ์ธ XNUMX๋ XNUMX์๊น์ง ์ ์ง๋ฉ๋๋ค. XNUMX LTS ๋ถ๊ธฐ์ ๋ํ ์ง์์ด XNUMX์ผ ํ์ ์ค๋จ๋ฉ๋๋ค.
์ฃผ์ ๊ฐ์ ์ฌํญ:
- V8 ์์ง์ด ๋ฒ์ 9.0(Node.js 15์์๋ ๋ฆด๋ฆฌ์ค 8.6 ์ฌ์ฉ)์ผ๋ก ์ ๋ฐ์ดํธ๋์ด ์ ๊ท์์ ๋ํ "indices" ์์ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค(์ผ์น ๊ทธ๋ฃน์ ์์ ๋ฐ ๋ ์์น๊ฐ ์๋ ๋ฐฐ์ด ํฌํจ). , Node.js 16์ Atomics ๋ฉ์๋ .waitAsync(Atomics.wait์ ๋น๋๊ธฐ ๋ฒ์ )๋ ์ต์์ ๋ชจ๋์์ wait ํค์๋ ์ฌ์ฉ์ ์ง์ํฉ๋๋ค. ์ ๋ฌ๋ ์ธ์ ์๊ฐ ํจ์์ ์ ์๋ ๋งค๊ฐ๋ณ์์ ์ผ์นํ์ง ์๋ ์ํฉ์์ ํจ์ ํธ์ถ์ด ๊ฐ์ํ๋์์ต๋๋ค.
- Timers Promises API๊ฐ ์์ ํ๋์ด Promise ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅ์ผ๋ก ๋ฐํํ๋ ํ์ด๋จธ ์์ ์ ์ํ ๋์ฒด ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ ๊ณตํ๋ฏ๋ก util.promisify()๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. 'ํ์ด๋จธ/์ฝ์'์์ { setTimeout }์ ๊ฐ์ ธ์ต๋๋ค. ๋น๋๊ธฐ ํจ์ run() { setTimeout(5000)์ ๊ธฐ๋ค๋ฆฝ๋๋ค. console.log('์๋ ํ์ธ์, ์๋!'); } ๋ฌ๋ฆฌ๋ค();
- ์ํธํ ํด์ ์กฐ์, ๋์งํธ ์๋ช ์์ฑ ๋ฐ ํ์ธ, ๋ค์ํ ์ํธํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ, ์ํธํ ๋ณด์ ์์ฑ๊ณผ ๊ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ธก๋ฉด์์ ๊ธฐ๋ณธ ์ํธํ ์์ ์ ์ํํ๋๋ก ์ค๊ณ๋ Web Crypto API์ ์คํ์ ๊ตฌํ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์์์ ์ซ์. API๋ ํค๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
- N-API(์ ๋์จ ๊ฐ๋ฐ์ฉ API)๊ฐ ๋ฒ์ 8๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- ํจํค์ง ๊ด๋ฆฌ์ NPM 7.10์ ์ ๋ฆด๋ฆฌ์ค๋ก ์ ํ๋์์ต๋๋ค.
- AbortController ์น API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ ์ ํํ Promise ๊ธฐ๋ฐ API์์ ์ ํธ๋ฅผ ์ทจ์ํ ์ ์๋ AbortController ํด๋์ค์ ๊ตฌํ์ด ์์ ํ๋์์ต๋๋ค.
- ์์ฑ, ์ฒ๋ฆฌ ๋๋ ํจํค์ง๋ ๋ชจ๋์ ์๋ณธ ์์ค ์ฝ๋์ ๋น๊ตํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ค ๋งต ํ์์ ์ธ ๋ฒ์งธ ๋ฒ์ ์ ๋ํ ์ง์์ด ์์ ํ๋์์ต๋๋ค.
- ๋ ๊ฑฐ์ ์น API์์ ํธํ์ฑ์ ์ํด buffer.atob(data) ๋ฐ buffer.btoa(data) ๋ฉ์๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- M1 ARM ์นฉ์ด ํ์ฌ๋ ์๋ก์ด Apple ์ฅ์น์ฉ ์ด์ ๋ธ๋ฆฌ ๊ตฌ์ฑ์ด ์์๋์์ต๋๋ค.
- Linux ํ๋ซํผ์์๋ ์ปดํ์ผ๋ฌ ๋ฒ์ ์๊ตฌ ์ฌํญ์ด GCC 8.3์ผ๋ก ๋์์ก์ต๋๋ค.
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});"๋ก ๋ณํ๋๋ฉฐ, ์ฌ๊ธฐ์ ์ ์ด๋ ์ถ๊ฐ ์ฝ๋๋ก ์ฆ์ ์ ๋ฌ๋๊ณ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์ฒ๋ฆฌ๋ฉ๋๋ค.
๋ํ Node.js ์ฐฝ์์๊ฐ ์ฐจ์ธ๋ Deno ํ๋ซํผ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ์ค๋ฆฝํ Deno ํ์ฌ๊ฐ 4.9๋ง ๋ฌ๋ฌ์ ํฌ์๋ฅผ ๋ฐ์๋ค๋ ์ ๋ ์ฃผ๋ชฉํ ๋งํฉ๋๋ค. Deno๋ ๋ชฉ์ ์ Node.js์ ์ ์ฌํ์ง๋ง Node.js ์ํคํ
์ฒ์์ ๋ฐ์ํ๋ ๊ฐ๋
์ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ณด๋ค ์์ ํ ํ๊ฒฝ์ ์ ๊ณตํ๋ ค๊ณ ํฉ๋๋ค. Deno์ ๋น์ฆ๋์ค ์๋ฃจ์
์ ์์ ํ ๊ฐ๋ฐฉ๋ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ๊ฒ์ด๋ฉฐ, ๋ณ๋์ ์ ๋ฃ ๊ธฐ๋ฅ์ ๊ฐ์ถ Open Core ๋ชจ๋ธ์ Deno ํ๋ซํผ์์ ํ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ์ธ์๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru