๐Ÿคทโ€โ™€๏ธ ๊ฐœ๋…๊ณต๋ถ€: 2. Node.js๊ฐ€ ๋ญ˜๊นŒ? (npm, package.json...)

Ko Seoyoungยท2021๋…„ 3์›” 8์ผ
0
post-custom-banner

๐Ÿง Node.js๋ž€?

๋‹ค์Œ์€ ๊ณต์‹๋ฌธ์„œ์—์„œ ์†Œ๊ฐœํ•œ node.js์ด๋‹ค.

Node.js๋Š” Chrome V8 JavaScript ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ JavaScript ๋Ÿฐํƒ€์ž„์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋Ÿฐํƒ€์ž„์ด๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ตฌ๋™๋˜๋Š” ํ™˜๊ฒฝ์„ ๋งํ•œ๋‹ค. Javascript์˜ ๋Ÿฐํƒ€์ž„์€ Web Browser์™€ Node.js๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

Node.js๋Š” ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜(event-driven: ์ด๋ฒคํŠธ ํ˜ธ์ถœ์— ๋”ฐ๋ผ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋œป), Non-Blocking I/O ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด ๊ฐ€๋ณ๊ณ  ํšจ์œจ์ ์ด๋‹ค. ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์‹ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ด์„œ I/O ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•œ ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ ํ•ฉํ•˜๋‹ค.

์ •๋ฆฌ: Node.js๋Š” ๋ฐฑ์•ค๋“œ ๋˜๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‹ค!

์˜ˆ์ „์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์ด ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์— ์กด์žฌํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ, ๊ทธ๋ ‡๋‹ค๋ฉด Node.js๋Š” ์–ด๋– ํ•œ ํ•„์š”์„ฑ์— ์˜ํ•ด ์ƒ๊ธฐ๊ฒŒ ๋œ ๊ฒƒ์ผ๊นŒ?!

๋…ธ๋“œ ํƒ„์ƒ ๋ฐฐ๊ฒฝ

https://www.youtube.com/watch?v=EeYvFl7li9E
๋…ธ๋“œ๋Š” 2009๋…„ ์œ„ ์˜์ƒ ์† Ryan Dhal์ด ๊ณ ์•ˆํ•ด ๋‚ธ ์–ธ์–ด์ด๋‹ค.

JSP๋‚˜ PHP ์–ธ์–ด๋กœ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ฉด ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์•„ํŒŒ์น˜์™€ ๊ฐ™์€ ์›น ์„œ๋ฒ„์—์„œ ๋™์ž‘ํ•œ๋‹ค. ์•„ํŒŒ์น˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋น„๋™๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  1. ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์— ์—ฐ๊ฒฐ์„ ์š”์ฒญ
  2. ์ผ์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑ

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

๋ฐ”๋กœ ๋…ธ๋“œ๊ฐ€, ์ด๋Ÿฐ ํ˜„์‹ค์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค.

frontend์—์„œ node.js?

npm์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๋ชจ๋“  CLI(Babel, webpack, ๊ฑธํ”„, CRA, Vue-CLI ๋“ฑ๋“ฑ)๋Š” Node.js๋ฅผ ์ด์šฉํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.


๐Ÿง NPM์ด๋ž€?

Node.js์˜ ํŒจํ‚ค์ง€ ์ƒํƒœ๊ณ„์ธ NPM(Node Packaged Manager)์€ ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ๊ทœ๋ชจ๊ฐ€ ํฐ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒํƒœ๊ณ„('the world's largest software registry')์ด๋‹ค. npm์€ website, CLI, registry 3๊ฐ€์ง€ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์•ฑ์Šคํ† ์–ด๋‚˜ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์Šคํ† ์–ด์— ๋งŒ๋“  ์•ฑ ๋“ค์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ณ , ์•ฑ์„ ์„ค์น˜ํ•ด ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ npm์—๋Š” Node.js๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฐ์ข… ์ฝ”๋“œ ํŒจํ‚ค์ง€(์˜คํ”ˆ์†Œ์Šค)๋“ค์ด ๋ชจ์—ฌ์žˆ๊ณ , ์šฐ๋ฆฌ๋Š” ๊ทธ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์œ ํŠœ๋ธŒ ์˜์ƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์ž. npm ์— react-youtube๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋“ฑ๋กํ•œ ๊ด€๋ จ ํŒจํ‚ค์ง€๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์ ํŠธ ํ„ฐ๋ฏธ๋„์—์„œ cli๋กœ ์„ค์น˜, ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜๋Š” ์ฃผ๊ฐ„ ๋‹ค์šด๋กœ๋“œ ์ˆ˜์ด๋‹ค. ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•จ์œผ๋กœ์จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์•ˆ์ •์„ฑ์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

+ yarn?

yarn ๋˜ํ•œ npm๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ด๋‹ค. npm๊ณผ ๊ฐ™์ด package.json์— ์˜์กด์„ฑ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
(npm๋ณด๋‹ค quickly, securely, and reliably๋ผ๊ณ  ํ•˜์ง€๋งŒ ์š”์ฆ˜์€ npm์ด๋‚˜ yarn์ด๋‚˜ ๋น„๋“ฑ๋น„๋“ฑํ•˜๋‹ค๊ณ  ํ•จ)


๐Ÿง package.json์ด๋ž€?

package.json์€ ํ”„๋กœ์ ํŠธ ์ •๋ณด์™€ ์˜์กด์„ฑ(dependencies)์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฌธ์„œ์ด๊ณ , ํ™•์žฅ์ž์ธ jsonํฌ๋งท์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
package.json ๊ตฌ์„ฑ

์ด๋ฏธ ์ž‘์„ฑ๋œ package.json๋ฌธ์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ํŒจํ‚ค์ง€(์˜คํ”ˆ์†Œ์Šค)๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์–ด๋–ค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋“ฑ์„ ๊ธฐ๋กํ•จ์œผ๋กœ์จ ์–ด๋Š ๊ณณ์—์„œ๋„ ๋™์ผํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

(ex) ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ํŽ˜์ด์Šค๋ถ ๋กœ๊ทธ์ธ 1.4.5๋ฒ„์ „, ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ 1.5.2๋ฒ„์ „, ๋ฆฌ์•กํŠธ ์ฟ ํ‚ค..๋“ฑ๋“ฑ์„ ์‚ฌ์šฉํ•ด์š”~! ์ด๋Ÿฐ ์ •๋ณด๋“ค! ํ”„๋กœ์ ํŠธ์—์„œ npm install ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ •์˜๋œ ์˜์กด์„ฑ ๋ชจ๋“ˆ๋“ค์ด ์ž๋™์œผ๋กœ node_modulesํด๋”์— ์„ค์น˜๋œ๋‹ค. )

  • npm init: ํŒจํ‚ค์ง€๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, package.json ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ๋‹ค.

+ npm install -D ๊ฐ€ ๋ญ˜๊นŒ?

โ€”save-dev/-D

์œ„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ ๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๊ณ  ์„ค์น˜ํ•œ๋‹ค.

ex) typescript๋‚˜ eslint ๋“ฑ์€ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ -D๋กœ ์„ค์น˜ํ•œ๋‹ค

"eslint": "^7.30.0",
"typescript": "^3.7.2"

์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ์ž๋ฃŒ

Node.js๋ž€?

https://perfectacle.github.io/2017/06/18/what-is-node-js/

https://edu.goorm.io/learn/lecture/557/ํ•œ-๋ˆˆ์—-๋๋‚ด๋Š”-node-js/lesson/21762/node-js-๋ž€

npm

https://heropy.blog/2018/02/18/node-js-npm/#:~:text=package.json%20์€%20ํ”„๋กœ์ ํŠธ%20์ •๋ณด,๋“ค์ด%20์ถ”๊ฐ€๋ %20์ˆ˜%20์žˆ์Šต๋‹ˆ๋‹ค

์ด๋ฒคํŠธ ๋ฃจํ”„?

https://www.youtube.com/watch?v=8aGhZQkoFbQ

profile
Web Frontend Developer ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป #React #Nextjs #ApolloClient
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€