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

์ผ์–ด๋‚ฌ๋‹ค ์„๋ฐฉํ•˜๋‹ค Node.js 14.0,JavaScript์—์„œ ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Node.js 14.0์€ ์žฅ๊ธฐ ์ง€์› ๋ธŒ๋žœ์น˜์ด์ง€๋งŒ ์ด ์ƒํƒœ๋Š” ์•ˆ์ •ํ™” ํ›„ 14.0์›”์—๋งŒ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. Node.js XNUMX์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ–‰๋˜๋‹ค 2023๋…„ 12.0์›”๊นŒ์ง€. Node.js 2022์˜ ์ด์ „ LTS ๋ธŒ๋žœ์น˜ ์œ ์ง€ ๊ด€๋ฆฌ๋Š” 10.0๋…„ 2021์›”๊นŒ์ง€ ์ง€์†๋˜๋ฉฐ, ๋งˆ์ง€๋ง‰ LTS ๋ธŒ๋žœ์น˜ 13์˜ XNUMX๋…„ ์ „์ธ XNUMX๋…„ XNUMX์›”๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. XNUMX.x ์Šคํ…Œ์ด์ง• ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ์ง€์›์€ ์˜ฌํ•ด XNUMX์›”์— ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

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

  • ์ฆ‰์„์—์„œ ๋˜๋Š” ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์ƒ์„ฑ๋˜๋Š” ๊ธฐ๋Šฅ์ด ์•ˆ์ •ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง„๋‹จ ๋ณด๊ณ ์„œ, ์ถฉ๋Œ, ์„ฑ๋Šฅ ์ €ํ•˜, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜, ๊ณผ๋„ํ•œ CPU ๋กœ๋“œ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜ ์ถœ๋ ฅ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ—˜์  API ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ๋กœ์ปฌ ์ €์žฅ์†Œ ์ฝœ๋ฐฑ ํ˜ธ์ถœ ๋ฐ ์•ฝ์†์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” AsyncLocalStorage ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. AsyncLocalStorage๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›น ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์—ฐ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋กœ๋“œ ์‹œ ์‹คํ—˜์  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ๋“ค ECMAScript 6 ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‚ด๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ESM ๋ชจ๋“ˆ ์ž์ฒด์˜ ๊ตฌํ˜„์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์‹คํ—˜์ ์ž…๋‹ˆ๋‹ค.
  • V8 ์—”์ง„์ด ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 8.1 (1, 2, 3)์—๋Š” ์ƒˆ๋กœ์šด ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž "??"์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. (์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ NULL์ด๊ฑฐ๋‚˜ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€), "?." ์—ฐ์‚ฐ์ž ์ „์ฒด ์†์„ฑ ๋˜๋Š” ํ˜ธ์ถœ ์ฒด์ธ(์˜ˆ: ์‚ฌ์ „ ํ™•์ธ ์—†์ด "db?.user?.name?.length")์— ๋Œ€ํ•œ ์ผํšŒ์„ฑ ํ™•์ธ, ์ง€์—ญํ™”๋œ ์ด๋ฆ„์„ ์–ป๊ธฐ ์œ„ํ•œ Intl.DisplayName ๋ฉ”์„œ๋“œ ๋“ฑ
  • Streams API์˜ ์ผ๊ด€์„ฑ์„ ๊ฐœ์„ ํ•˜๊ณ  Node.js ๊ธฐ๋ณธ ๋ถ€๋ถ„์˜ ๋™์ž‘ ์ฐจ์ด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ Streams API ๊ฐœ์ •์ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด http.OutgoingMessage์˜ ๋™์ž‘์€ stream.Writable์— ๊ฐ€๊น๊ณ  net.Socket์€ stream.Duplex์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. autoDestroy ์˜ต์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ "true"๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์™„๋ฃŒ ์‹œ "_destroy"๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • ์‹คํ—˜์  API ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ทธ๋žฌ๋‹ˆ (์›น์–ด์…ˆ๋ธ”๋ฆฌ ์‹œ์Šคํ…œ ์ธํ„ฐํŽ˜์ด์Šค), ์šด์˜ ์ฒด์ œ์™€์˜ ์ง์ ‘์ ์ธ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(ํŒŒ์ผ, ์†Œ์ผ“ ๋“ฑ ์ž‘์—…์„ ์œ„ํ•œ POSIX API).
  • ์š”๊ตฌ์‚ฌํ•ญ ์ฆ๊ฐ€ ์ตœ์†Œ ๋ฒ„์ „ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ํ”Œ๋žซํผ: macOS 10.13(High Sierra), GCC 6, Windows ์ตœ์‹  7/2008R2.

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

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