๋กœ์ผ“๐Ÿพ
article thumbnail

 

Node.js๋ฅผ ๊ฐœ๋ฐœํ•œ ๋ผ์ด์–ธ ๋‹ฌ(Ryan Dahl) ์€ ์ง€๋‚œ 2018๋…„ 6์›” Javascript ์ตœ๋Œ€ ์ฝ˜ํผ๋Ÿฐ์Šค์ธ JSConf 2018์—์„œ

10 Things I Regret About Node.js  ์„ ๋ฐœํ‘œํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ Node.js๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ƒ๊ฒผ๋˜ ํ›„ํšŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋Ÿฐํƒ€์ž„์ธ Deno.js๋ฅผ ๋ฐœํ‘œํ•˜์˜€์Šต๋‹ˆ๋‹ค. (Node์—์„œ de๋ฅผ no ์•ž์— ์“ด๊ฑด๋ฐ ์ด๊ฑฐ ๋ˆˆ์น˜์ฑ„๊ณ  ์†Œ๋ฆ„์ด.. )

 

๋ผ์ด์–ธ ๋‹ฌ์€ Node.js ๋งŒ๋“ค๋ฉด์„œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ HTTP ์„œ๋ฒ„(Event driven HTTP server)์— ์ƒ๋‹นํžˆ ๋งŽ์€ ์‹ฌํ˜ˆ์„ ๊ธฐ์šธ์˜€์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Node.js๋ฅผ ๋งŒ๋“ค๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ์ด ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ HTTP ์„œ๋ฒ„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ์—ฌ์ „ํžˆ Node๋Š” ์ข‹์€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋Ÿฐํƒ€์ž„์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

 

JSConf 2018 ๋ผ์ด์–ธ ๋‹ฌ

 

๊ทธ๋ฆฌ๊ณ  2012๋…„ ๋ผ์ด์–ธ ๋‹ฌ์ด Node๋ฅผ ๋– ๋‚˜๋ฉด์„œ Node๊ฐ€

  • HTTP, HTTPS์™€ ๊ฐ™์€ ํ”„๋กœํ† ์ฝœ ์ง€์›
  • IOCP๋ผ๋Š” ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ windows์— ๋…ธ๋“œ๋ฅผ porting ๊ฐ€๋Šฅ
  • Linux์™€ Mac์—์„œ๋„ ๋ฌด๋ฆฌ ์—†์ด ์ž‘๋™
  • API๋„ ์•ˆ์ •์ ์ด๋ฉด์„œ NPM์˜ ๋“ฑ์žฅ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด ์ž์œ ๋กญ๊ฒŒ ๋ชจ๋“ˆ๋„ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ์— ๋ผ์ด์–ธ ๋‹ฌ์€ "Node ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ" ๋ฅผ ์„ ์–ธํ–ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ผ์ด์–ธ ๋‹ฌ์˜ ์ฐฉ๊ฐ์ด์˜€์ฃ . ํ•˜๋ฌผ๋ฉฐ ๋ณธ์ธ์ด ๋งŒ๋“ค์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Node๋ณด๋‹ค Go Language๊ฐ€ ๋” ์ข‹์œผ๋‹ˆ Go๋ฅผ ์‚ฌ์šฉ ํ•˜๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. 

(10๊ฐ€์ง€ ํ›„ํšŒ ์ค‘ ํ•˜๋‚˜๊ฐ€ Promise๋ฅผ ์‚ฌ์šฉ ์•ˆํ•œ ๊ฒƒ์ธ๋ฐ Go๋Š” ์ด์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ์‚ฌ์ดํŠธ )

 

์ด์ œ ๋ง‰ Node๋ฅผ ๊ณต๋ถ€ํ•ด๊ฐ€๋ฉด์„œ ์žฌ๋ฏธ๋ฅผ ๋ถ™์ด๊ณ  ์žˆ๋Š”๋ฐ ๋งŒ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•ˆ์ข‹์œผ๋‹ˆ ์“ฐ์ง€๋ง๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์ฐธ ์”์“ธํ•˜๋”๋ผ๊ณ ์š” ใ… ใ… ใ… 

 

์ด์–ด์„œ ๋ผ์ด์–ธ ๋‹ฌ์€ Node๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋น„์œ ํ•ฉ๋‹ˆ๋‹ค.

๋ญ”๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ๋งŒ๋“  ๊ฒŒ ๋ณด์ด๋Š” ๋ฐ ์ง€๊ธˆ ๋‹น์žฅ์€ ๊ทธ๊ฒŒ ๋ฒ„๊ทธ ๊ฐ™์ง€ ์•Š๊ฒŒ ๋™์ž‘ํ•˜์—ฌ ํฐ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒ„๊ทธ๋Š” ๋ฒ„๊ทธ์ธ๊ฑฐ์ฃ . ๊ทธ๋ฆฌ๊ณ  ์„ค๊ณ„์ƒ์˜ ๊ฒฐํ•จ์ด ์žˆ๋Š” ๊ฑธ ์•Œ๋ฉด์„œ๋„ ์ง€๊ธˆ์€ ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒ ์ด๋ฏธ ๋„ˆ๋ฌด ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿผ Node๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์•„์‰ฌ์›€์ด ๋‚จ์•˜๋˜ ๋ผ์ด์–ธ ๋‹ฌ์˜ ํ›„ํšŒ๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ์„๊นŒ์š”?

(10๊ฐ€์ง€๋ผ๊ณ ๋Š” ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ 10๊ฐ€์ง€๋Š” ์•„๋‹Œ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.)


10๊ฐ€์ง€ ํ›„ํšŒ

1. Promises๋ฅผ ๊ณ ์ง‘ํ•˜์ง€ ์•Š์€ ๊ฒƒ(Not sticking with Promises)

2.๋ณด์•ˆ ๋ฌธ์ œ์— ๋” ์‹ ๊ฒฝ ์“ฐ์ง€ ๋ชปํ•œ ๊ฒƒ(Security)

3.๋นŒ๋“œ์‹œ์Šคํ…œ(GYP) 1

4.๋นŒ๋“œ์‹œ์Šคํ…œ(GYP) 2

5.ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ํŒŒ์ผ(package.json) 1

6. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ํŒŒ์ผ(package.json) 2

7.๋ชจ๋“ˆ ์‹œ์Šคํ…œ(node_modules)

8.Require ๋ฌธ๋ฒ•์„ ์“ธ ๋•Œ js ํ™•์žฅ์ž๋ฅผ ์•ˆ ์จ๋„ ๋˜๊ฒŒ ํ•œ ๊ฒƒ

9.index.js

10.deno

 


1. Promises๋ฅผ ๊ณ ์ง‘ํ•˜์ง€ ์•Š์€ ๊ฒƒ

 

Node์˜ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์€ ํ˜„์žฌ callback API๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Node๋Š” Promises๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2009๋…„์— ๋ผ์ด์–ธ ๋‹ฌ์ด Promises๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ฐ€ 2010๋…„์— ๋ณธ์ธ ๊ณ ์ง‘์œผ๋กœ ์ธํ•˜์—ฌ ๋‹ค์‹œ ์‚ญ์ œํ•˜์˜€๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Promises๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŽธ์ด ๋” ๊ฐ„๋‹จํ•ด ๋ณด์ด๊ณ , Promises๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด callback๋งˆ๋‹ค Promises ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ ํ•ด์ค˜์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ด์ง€ ๋ชปํ• ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ ๋ชจ์–‘์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ผ์ด์–ธ ๋‹ฌ์˜ ์‹ค์ˆ˜๋Š” ๋” ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ async/await ์ƒํƒœ๊ณ„ ๋ฅผ ๋”๋””๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

 

2. ๋ณด์•ˆ ๋ฌธ์ œ์— ๋” ์‹ ๊ฒฝ ์“ฐ์ง€ ๋ชปํ•œ ๊ฒƒ(Security)

 

Node๋Š” ๋ชจ๋“  ๊ฑธ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ด๋ผ๊ณ ๋Š” 1๋„ ์—†์Šต๋‹ˆ๋‹ค. Node ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ์‹œ์Šคํ…œ ์ฝœ์— ์ ‘๊ทผ ๋˜ํ•œ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.  Node ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ์œ ์ง€๋˜๊ณ  ๋ฐœ์ „ํ•˜๋Š”์ง€๋ฅผ ๊ณ ๋ คํ–ˆ์—ˆ์œผ๋ฉด ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์ด ๊ฐ–์ง€ ๋ชปํ•  ๋ณด์•ˆ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์—ˆ์„ ํ…๋ฐ ๊ทธ๋Ÿฌ์ง€ ๋ชปํ•˜์—ฌ ์•„์‰ฌ์›€์„ ํ† ๋กœํ–ˆ์Šต๋‹ˆ๋‹ค.

 

3. ๋นŒ๋“œ์‹œ์Šคํ…œ(GYP) 1

 

๊ฐ€์žฅ ํ›„ํšŒ์Šค๋Ÿฌ์šด ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Node๋Š” GYP๋ผ๋Š” ๋ฉ”ํƒ€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ํฌ๋กฌ์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ช‡ ๋…„ํ›„ ํฌ๋กฌ์—์„œ๋Š” GYP์„ ๋ฒ„๋ฆฌ๊ณ  GN์œผ๋กœ ๊ฐˆ์•„ํƒ€์ง€๋งŒ Node๋Š” GYP๋ฅผ ๊ทธ๋Œ€๋กœ ์•ˆ๊ณ ๊ฐ‘๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ Node๋งŒ์ด ์œ ์ผํ•˜๊ฒŒ GYP๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (GYP์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ ๋”์งํ•  ์ •๋„๋กœ ๊ตฌ๋ฆฌ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

Node ์ง€์› ๋•Œ๋ฌธ์— GYP wrapper๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๊ฑฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด๋‚˜ ๋งŽ์€ ์–‘์˜ ๋ถˆํ•„์š”ํ•˜๊ณ  ๋ณต์žกํ•œ ๊ธฐ์ˆ ๋“ค์ด ์‚ฌ์šฉ๋˜๊ณ  ์ด๋ฅผ Node์˜ ๊ฐ€์žฅ ์‹ฌ๊ฐํ•œ ์‹คํŒจ๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๊ตฌ๊ธ€์˜ GN์ด GYP๋ณด๋‹ค 20๋ฐฐ ์ •๋„ ๋น ๋ฅด๊ฒŒ ๋นŒ๋“œ ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

(์ € ๊ฐ™์€ ํ•™๋ถ€์ƒ์—๊ฒ ๋นŒ๋“œ์‹œ์Šคํ…œ ๋ถ€๋ถ„์€ ๋งŽ์ด ์ดํ•ดํ•˜๊ธฐ ํž˜๋“  ๋ถ€๋ถ„์ด์˜€์Šต๋‹ˆ๋‹ค.)

 

4. ๋นŒ๋“œ์‹œ์Šคํ…œ(GYP) 2

 

GYP๋ฅผ ์ด์šฉํ•ด ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๋ฉด์„œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ C++ ๋ฐ”์ธ๋”ฉ์„ ํ•˜๋„๋ก ํ–ˆ๋Š”๋ฐ, FFI(Foreign Function Interface)๋ฅผ ์ œ๊ณตํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค๋Š” ์•„์‰ฌ์›€์„ ํ† ๋กœํ–ˆ์Šต๋‹ˆ๋‹ค.

 

5. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ํŒŒ์ผ(package.json) 1

 

Node.js๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ์ด ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด Go์™€ java์—์„œ ์–ธ์–ด ์ž์ฒด์ ์œผ๋กœ ๊ตฌํ˜„์ด ๋˜๋Š” ์ŠคํŽ™๋“ค์ด ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (go๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„๋์Šต๋‹ˆ๋‹ค.) ์ด ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ 3rd ํŒŒํ‹ฐ ํ”„๋กœ์ ํŠธ๋กœ ๋–ผ์–ด ๋†“๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ฃ . ๊ทธ๋Ÿฐ๋ฐ ๋…ธ๋“œ๋Š” npm์ด๋ผ๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” package.json. ํŒŒ์ผ์ด main() ํ•จ์ˆ˜์—์„œ ์ฐพ๋„๋ก ๋˜์–ด์žˆ์–ด npm์— ์˜์กด์ ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ์ ์„ ์Šค์Šค๋กœ ๋น„ํŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ facebook์—์„œ ๋งŒ๋“  yarn์ด๋ผ๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๊ฐ€ npm์„ ๋Œ€์ฒดํ•˜๊ณ  ์žˆ์ง€๋งŒ package.json์€ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜๋„ํ•˜์ง„ ์•Š์•˜์ง€๋งŒ defacto(์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€)๊ฐ€ ๋œ ์…ˆ์ด์ฃ .
๋˜, ์ด package.json ํŒŒ์ผ์€ ๋ชจ๋“ˆ์„ ์ฐพ์„ ๋•Œ ๋ช…์‹œ์ ์ด์ง€ ์•Š๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ฌ์šด ์ดํ•ด๋ฅผ ์œ„ํ•ด ์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

https://tinyclouds.org/jsconf2018.pdf

 

6. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ํŒŒ์ผ(package.json) 2

 

package.json ํŒŒ์ผ์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ํŒŒ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์žกํžˆ๋„๋ก ๋งŒ๋“ค์–ด์„œ ๋ผ์ด์„ ์Šค, ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ, ์„ค๋ช… ๋“ฑ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ํ•„์š” ์—†๋Š” ์ •๋ณด๊นŒ์ง€ ๋‹ค ํฌํ•จ์‹œ์ผœ ๋„ˆ๋ฌด ๋ฌด๊ฑฐ์›Œ์กŒ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

 

7. ๋ชจ๋“ˆ ์‹œ์Šคํ…œ(node_modules)

 

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํŒŒ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์˜ ์•ฝ์ ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ resolving ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ๋ฐ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฏธ์นœ ๋“ฏ์ด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. node_modules ํด๋” ๋’ค์— ๊น”๋ฆฐ ๊ฐœ๋…์ธ vendored-by-default(์„œ๋“œ ํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋””ํดํŠธ๋กœ ๊ฐ™์ด ์„ค์น˜ํ•˜๋Š” ๊ฒƒ)๋Š” ์—ฐ๊ฒฐํ•˜๋Š” ์ƒ๋Œ€๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ ์•Œ์ˆ˜ ์žˆ๋„๋ก ํ•œ ์˜๋„์˜€์ง€๋งŒ(ํ™˜๊ฒฝ๋ณ€์ˆ˜์ฒ˜๋Ÿผ), ์ง€๊ธˆ ๋ฐฉ์‹์€ ๋ธŒ๋ผ์šฐ์ € ์ž‘๋™ ๋ฐฉ์‹์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚ฌ๊ณ , ์ด๋Š” ๋ณธ์ธ์˜ ์‹ค์ˆ˜๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

https://tinyclouds.org/jsconf2018.pdf

 

8. Require ๋ฌธ๋ฒ•์„ ์“ธ ๋•Œ js ํ™•์žฅ์ž๋ฅผ ์•ˆ ์จ๋„ ๋˜๊ฒŒ ํ•œ ๊ฒƒ

 

Node๊ฐ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ธŒ๋ผ์šฐ์ € ๋‚ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ๊ณผ ํ‘œ์ค€์ด ๋‹ฌ๋ผ์„œ ๋ชจ๋“ˆ ๋กœ๋”๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ Node์—์„œ๋Š” Require("poo.js") ์—์„œ Require("poo")์ฒ˜๋Ÿผ import ๊ด€๋ จ .js ํ™•์žฅ์ž ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  deno์—์„œ ์ด ๋ถ€๋ถ„์ด ํ™•์‹คํ•˜๊ฒŒ ๋ฐ”๋€๊ฒŒ ๋ˆˆ์— ๋„์ฃ .

 

9. index.js

 

๊ทธ๋ƒฅ ๊ท€์—ฌ์›Œ์„œ default๋ฅผ index.js๋กœ ํ–ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ includeํ•  ๋•Œ index.js๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ท€์—ฌ์šธ๊ฒƒ ๊ฐ™์•˜๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ถˆํ•„์š”ํ•œ ๋„์ž…์ด์˜€์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ชจ๋“ˆ ๋กœ๋”ฉ ์‹œ์Šคํ…œ์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

10. Deno

 

๋ผ์ด์–ธ ๋‹ฌ์ด Node์— ๊ด€ํ•œ ํ›„ํšŒ์— ๋Œ€ํ•ด ๋ฐœํ‘œ๋ฅผ ํ•œ ํ›„ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต๊ฐœํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ Deno์˜€์Šต๋‹ˆ๋‹ค. 

 

๋ผ์ด์–ธ ๋‹ฌ์ด ๊ฐœ๋ฐœํ•œ ๊ฐœ์„ ๋˜๊ณ  ๋” ์•ˆ์ „ํ•œ Node์ž…๋‹ˆ๋‹ค. Node๋Š” JavaScript๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋Ÿฐํƒ€์ž„์ธ ๊ฒƒ์ฒ˜๋Ÿผ, Deno๋Š” TypeScript๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Command-line ๋Ÿฐํƒ€์ž„์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

https://javascript.plainenglish.io/what-is-deno-and-what-happens-to-node-js-now-57aae2afa2bc

 

(git hub ํ”„๋กœ์ ํŠธ ๋งํฌ: https://github.com/ry/deno)

 

6๊ฐœ์ธ๊ฐ€ 5๊ฐœ์˜€๋˜ ๋ธŒ๋žœ์น˜๊ฐ€ ํ˜„์žฌ๋Š” 494๊ฐœ์ธ๊ฑฐ ๋ณด๋ฉด ํ™œ๋ฐœํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ™•์‹คํžˆ TypeScript๊ฐ€ 40% ์ด์ƒ์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜ : https://ebbnflow.tistory.com/257?category=842625


๋งบ์œผ๋ฉฐ..

 

๋ฌผ๋ก  3๋…„ ์ „ ๋ฐœํ‘œํ•œ ๋‚ด์šฉ์ด์ง€๋งŒ ์ด์ œ ๋ง‰ Node.js์— ๋Œ€ํ•ด ์•Œ์•„๊ฐ€๊ณ  ์žˆ๋Š” ์ €์—๊ฒ ์ถฉ๊ฒฉ์ ์ธ ์˜์ƒ์ด์˜€๋˜๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.  ๋งŒ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•ˆ์ข‹๋‹ค๋Š”๋ฐ... ์ฐธ ใ… ใ… ใ… ใ…  ๊ณ„์† Node๋ฅผ ๊ณต๋ถ€ํ•ด์•ผํ•˜๋‚˜ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค...

๊ฒฐ๊ตญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ๊ฒƒ๋„ ์ธ๊ฐ„์ด ๋งŒ๋“  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—  ๋ผ์ด์–ธ ๋‹ฌ ๊ฐ™์€ ์ฒœ์žฌ ๊ฐœ๋ฐœ์ž๋„ ์‹ค์ˆ˜๋ฅผ ํ•˜๋Š”๊ตฌ๋‚˜ ๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

Deno ๊ฐ™์€ ๊ฒฝ์šฐ Node์™€ ์•„์ง ์—ฐ๊ฒฐ์„ฑ์ด ์—†์–ด ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์ง€๋งŒ JSConf ๋ฐœํ‘œ ํ›„ 3๋…„์ด๋ผ๋Š” ์‹œ๊ฐ„์ด ํ˜๋ ธ๊ณ  Deno๋ผ๋Š” ์ƒˆ๋กœ์šด ์„œ๋ฒ„์‚ฌ์ด๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์„œ๋ฒ„์‚ฌ์ด๋“œ ์ƒํƒœ๊ณ„์— ์–ด๋– ํ•œ ์˜ํ–ฅ์„ ์ค„์ง€ ๊ธฐ๋Œ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

[์ฐธ๊ณ ]

www.youtube.com/watch?v=M3BM9TB-8yA

gocoder.tistory.com/1578

ebbnflow.tistory.com/257

jsdevelopers.medium.com/10-things-i-regret-about-node-js-ryan-dahl-e56b78dffe8c

www.samsungsds.com/kr/insights/github-June-Trend.html

 

 

 

 

 

 

profile on loading

Loading...