์„œ๋ฒ„ ์ธก JavaScript Node.js 13.0 ๋ฆด๋ฆฌ์Šค

์‚ฌ์šฉ ๊ฐ€๋Šฅ ์„๋ฐฉํ•˜๋‹ค Node.js 13.0,JavaScript์—์„œ ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋™์‹œ์— Node.js 12.x์˜ ์ด์ „ ๋ฒ„์ „์˜ ์•ˆ์ •ํ™”๊ฐ€ ์™„๋ฃŒ๋˜์–ด 4๋…„ ๋™์•ˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ถœ์‹œ๋˜๋Š” ์žฅ๊ธฐ ์ง€์› ๋ฆด๋ฆฌ์Šค ๋ฒ”์ฃผ๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Node.js 10.0์˜ ์ด์ „ LTS ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์ง€์›์€ 2021๋…„ 8.0์›”๊นŒ์ง€ ์ง€์†๋˜๋ฉฐ, ๋งˆ์ง€๋ง‰ LTS ๋ถ„๊ธฐ 2020์— ๋Œ€ํ•œ ์ง€์›์€ XNUMX๋…„ XNUMX์›”๊นŒ์ง€ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ฐœ๋Ÿ‰:

  • V8 ์—”์ง„์ด ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 7.8๋Š” ์ƒˆ๋กœ์šด ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์ค„์ด๋ฉฐ, WebAssembly ์‹คํ–‰ ์ค€๋น„ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตญ์ œํ™” ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋ฐ˜ ์œ ๋‹ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ „์ฒด ์ง€์›์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ICU (International Components for Unicode) - ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ง€์ง€ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ๋กœ์ผ€์ผ๋กœ ์ž‘์—…ํ•˜์„ธ์š”. ์ด์ œ ์ „์ฒด icu ๋ชจ๋“ˆ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
  • API ์•ˆ์ •ํ™” ์ž‘์—…์ž ์Šค๋ ˆ๋“œ, ํ—ˆ์šฉ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ ์—ฌ๋Ÿฌ ๋ณ‘๋ ฌ ์Šค๋ ˆ๋“œ์—์„œ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Worker_threads ๋ชจ๋“ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. Workers Threads API์— ๋Œ€ํ•œ ์•ˆ์ •์ ์ธ ์ง€์›๋„ Node.js 12.x์˜ LTS ๋ถ„๊ธฐ๋กœ ๋ฐฑํฌํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์กฐ๋ฆฝ์„ ์œ„ํ•ด ํ•„์ˆ˜ ์ตœ์†Œ macOS 10.11(Xcode 10 ํ•„์š”), AIX 7.2, Ubuntu 16.04, Debian 9, EL 7, Alpine 3.8, Windows 7/2008;
  • Python 3์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์— Python 2์™€ Python 3์ด ๋ชจ๋‘ ์žˆ๋Š” ๊ฒฝ์šฐ Python 2๊ฐ€ ๊ณ„์† ์‚ฌ์šฉ๋˜์ง€๋งŒ ์‹œ์Šคํ…œ์— Python 3๋งŒ ์„ค์น˜๋œ ๊ฒฝ์šฐ ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • HTTP ํŒŒ์„œ์˜ ์ด์ „ ๊ตฌํ˜„(โ€œโ€”http-parser=legacyโ€)์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ˜ธ์ถœ ๋ฐ ์†์„ฑ FSWatcher.prototype.start(), ChildProcess._channel, ReadStream ๋ฐ WriteStream ๊ฐœ์ฒด์˜ open() ๋ฉ”์„œ๋“œ, request.connection, response.connection, module.createRequireFromPath();
  • ๋‹ค์Œ ๋‚˜์™”๋‹ค ์—ฌ๋Ÿฌ ๋ฒ„๊ทธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ˆ˜์ •ํ•œ 13.0.1 ์—…๋ฐ์ดํŠธ. ํŠนํžˆ npm 6.12.0์—์„œ ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ฒ„์ „ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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 ์‹œ์Šคํ…œ์—์„œ๋Š”, Windows์—์„œ๋Š” IOCP๋ฅผ ํ†ตํ•ด. ์Šค๋ ˆ๋“œ ํ’€์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ฒ ์ด์˜ค, ๋น„์ฐจ๋‹จ ๋ชจ๋“œ์—์„œ DNS ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด ํ†ตํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. C-์•„๋ ˆ์Šค. ์ฐจ๋‹จ์„ ์œ ๋ฐœํ•˜๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ์Šค๋ ˆ๋“œ ํ’€ ๋‚ด์—์„œ ์‹คํ–‰๋œ ๋‹ค์Œ ์‹ ํ˜ธ ์ฒ˜๋ฆฌ๊ธฐ์ฒ˜๋Ÿผ ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ๋ช…๋ช…๋˜์ง€ ์•Š์€ ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. Google์—์„œ ๊ฐœ๋ฐœํ•œ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ JavaScript ์ฝ”๋“œ ์‹คํ–‰์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. V8 (๋˜ํ•œ Microsoft๋Š” Chakra-Core ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ Node.js ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

Node.js์˜ ํ•ต์‹ฌ์€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํŽ„ AnyEvent, ๋ฃจ๋น„ ์ด๋ฒคํŠธ ๋จธ์‹ , ํŒŒ์ด์ฌ ํŠธ์œ„์ŠคํŠธ ะธ ๊ตฌํ˜„ Tcl์˜ ์ด๋ฒคํŠธ์™€ ๋‹ฌ๋ฆฌ Node.js์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ˆจ๊ฒจ์ ธ ์žˆ์œผ๋ฉฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. node.js์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•  ๋•Œ ์˜ˆ๋ฅผ ๋“ค์–ด "var result = db.query("select..");"๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  ์ด๋ฒคํŠธ ์ค‘์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—… ์™„๋ฃŒ ๋ฐ ํ›„์† ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ Node.js๋Š” ๋น„๋™๊ธฐ ์‹คํ–‰ ์›์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” "db.query("select..", function (result) {result process});"๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ์ œ์–ด๋Š” ์ฆ‰์‹œ ์ถ”๊ฐ€ ์ฝ”๋“œ๋กœ ์ „๋‹ฌ๋˜๊ณ  ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. .

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€