๐ŸผBefore Start Mini Node Server (1)

๐ŸณNode.js?

์ •์˜ 1. V8 ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ Javascript ๋Ÿฐํƒ€์ž„

V8 ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ Javascript ๋Ÿฐํƒ€์ž„ ์ž…๋‹ˆ๋‹ค ๋ผ๊ณ  ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ V8 ์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์—”์ง„ ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๊ณ„ (์ปดํ“จํ„ฐ) ๊ฐ€ ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๊ฒŒ ์ปดํŒŒ์ผ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

ํ•œ ์ค„๋กœ ๋‹ค์‹œ ์ •์˜ํ•˜๋ฉด,

์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ ํ•ด์ฃผ๋Š” ์—”์ง„์œผ๋กœ ๋นŒ๋“œ ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ตฌ๋™์ค‘์ธ ํ™˜๊ฒฝ์ด๋‹ค.

์ •์˜ 2. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ ๋…ผ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ ๋…ผ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ ์ด๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์ด๋ฒคํŠธ๋Š”

๐ŸŽ์ด๋ฒคํŠธ - ์œ ์ €์˜ ๋ฒ„ํŠผ ํด๋ฆญ์ด๋‚˜ ๋„คํŠธ์›Œํฌ์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ ๋“ฑ

๐ŸŽ๋ธ”๋กœํ‚น - ๋‹ค์Œ ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ํ˜„์žฌ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ ์ดํ›„์— ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ. (๋™๊ธฐ)

๐ŸŽ๋…ผ๋ธ”๋กœํ‚น - ๋‹ค์Œ ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ํ˜„์žฌ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Œ. (๋น„๋™๊ธฐ)

์ €๋ฒˆ์— ๋ฐฐ์› ๋˜ ์ปคํ”ผ ์ฃผ๋ฌธ๋ฐ›๋Š” ๊ณผ์ • (์ฃผ๋ฌธ๋ฐ›๊ธฐ - ์ƒท ์ถ”์ถœ - ์ปคํ”ผ ์ œ์กฐ - ์ „๋‹ฌ - ์ƒˆ ์ฃผ๋ฌธ๋ฐ›๊ธฐ) ์„ ๋™๊ธฐ, ๋น„๋™๊ธฐ๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๐ŸŽI/O ๋ชจ๋ธ - ์ธํ’‹์„ ์ฃผ๋ฉด ์•„์›ƒํ’‹์„ ์ฃผ๋Š” ๋ชจ๋ธ

์ฆ‰, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ ๋…ผ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ ์˜ ์˜๋ฏธ๋Š”,

์œ ์ €์˜ ํด๋ฆญ์ด๋‚˜ ๋„คํŠธ์›Œํฌ์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋…ผ๋ธ”๋กœํ‚น์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” Input Output model ์„ ์˜๋ฏธ! ํ•œ๋‹ค!

๊ทธ๋ž˜์„œ Node.js ๋Š” js ๋ฅผ ์ปดํŒŒ์ผ ํ•ด์„œ ๊ตฌ๋™ํ•˜๊ณ  ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ๋…ผ๋ธ”๋กœํ‚น ๋ชจ๋ธ๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

๐ŸณNode Core modules (Built-in Module)

๋…ธ๋“œ๋ฅผ ์„ค์น˜๋ฅผ ํ–ˆ๋‹ค๋ฉด ์ด์ œ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฐ›์•„์˜ค์ง€ ์•Š์•„๋„ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ฝ”์–ด ๋ชจ๋“ˆ๋“ค์ด ์žˆ๋‹ค.

node ์™€ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋ง๋˜์–ด ์žˆ๋Š” ๋ชจ๋“ˆ์„ ์˜๋ฏธํ•˜๋ฉฐ, require(โ€œโ€) ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ - fs, http, url, path ๋“ฑ์˜ ๋ชจ๋“ˆ์€, node.js ๊ฐ€ ์„ค์น˜๋˜์—ˆ๋‹ค๋ฉด package manager ์—์„œ ๋ณ„๋„ ์„ค์น˜๊ฐ€ ํ•„์š” ์—†๋‹ค.

๐ŸณCore modules ์ค‘์— http module ?

์•„ ์ด http ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์“ฐ๋Š”๊ตฌ๋‚˜.

์ฆ‰, Node.js๊ฐ€ HTTP(Hypter Text Transfer Protocol)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋„๋ก ํ•˜๋Š” ๋นŒํŠธ์ธ ๋ชจ๋“ˆ ์ด๋ฉด์„œ

HTTP ๋ชจ๋“ˆ์€ ์„œ๋ฒ„ ํฌํŠธ๋ฅผ ์•Œ์•„๋ณด๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ response๋ฅผ ์ฃผ๋Š” HTTP ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐ŸณNPM - Node Package Manager

์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ํฐ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒํƒœ๊ณ„ ์ค‘ ํ•˜๋‚˜. (Node Package Manager)

๋‚˜๋Š” Yarn ๋„ ๋™์‹œ์— ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์˜ˆ๋กœ Jquery source ๋ฅผ script ์— ๋ฐ•์•„๋†“๊ณ  ์‚ฌ์šฉ ํ–ˆ๋‹ค๋ฉด, ์ด์ œ๋Š” npm install ๋กœ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด ์กŒ๋‹ค.

์„ค์น˜๊ฐ€ ๋˜๋ฉด package.json ์˜ dependency ์— ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.

๐ŸณDetail of Package.json

1. run script?

start, build, test ๊ฐ™์€๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๋„ค?: cli (ํ„ฐ๋ฏธ๋„ ๋“ฑ) ์—์„œ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

2. dev-dependencies

production ๊ณผ ๊ด€๊ณ„ ์—†๋Š” ๊ฐœ๋ฐœ๋งŒ์„ ์œ„ํ•œ dependency ์ด๋‹ค.

yarn add @babel/core โ€”dev ๋˜๋Š” npm install @babel/core โ€”save-dev ์ด๋Ÿฐ ์‹์œผ๋กœ -dev ์ฆ‰, ๊ฐœ๋ฐœ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค ํ•ด์„œ โ€”dev ์˜ต์…˜์„ ์ค˜์„œ ๋“ฑ๋กํ•œ๋‹ค.

3. dependencies

์ง์ ‘ production ๊ณผ ๊ด€๋ จ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ค์ด ๋‹ด๊ฒจ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ ํ•  ๋•Œ๋Š” yarn add react ํ˜น์€ npm install โ€”save react (npm ์—์„œ๋Š” โ€”save ์˜ต์…˜์„ ์ค˜์•ผ ํ•œ๋‹ค)

4. why save?

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ํ•˜๋Š” npm install ์€ package.json ์— ์žˆ๋Š” dependency ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ค์น˜๊ฐ€ ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ dependency ์— ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์ฝ”๋“œ์—์„œ๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์“ฐ๊ณ  ์žˆ์ง€๋งŒ npm install ๋กœ๋Š” ์„ค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋“ˆ์ด ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋œจ๊ณ , ํŒ€์›๊ฐ„์˜ ๋ถˆํ™”๊ฐ€ ์‹นํŠธ๊ฒŒ ๋œ๋‹ค.

5. npm start

package.json ์— ์ •์˜๋˜์–ด ์žˆ๋‹ค. ๋ณดํ†ต node index.js ๋ผ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

์„œ๋ฒ„๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค ํ•˜๋ฉด ํ•œ๋ฒˆ ์ผœ์ง€๊ณ  ์ €์žฅ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜์ง€๋Š” ๋ชปํ•ด์„œ ๊ป๋‹ค๊ฐ€ ์ผœ์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

5-1. nodemon

  1. ์œ„์˜ npm start ์‹œ ์ƒ๊ธฐ๋Š” ๋‹จ์ ์„ ์—†์• ์ฃผ๊ณ  ๋ฐ˜์˜์‚ฌํ•ญ์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์˜ํ•ด ์ฃผ๋Š” ์—ญํ• ์ด๋‹ค!
  2. ๋นˆ ํด๋”์—์„œ npm init ์„ ํ†ตํ•ด description ๋“ฑ์„ ์จ์ฃผ๋Š”๋ฐ ๋ณดํ†ต ๋‹ค ์—”ํ„ฐ์น˜๊ณ  ๋งŒ๋“ ๋‹ค.
  3. root ๊ฒฝ๋กœ์—์„œ index.js ๋ฅผ ๋งŒ๋“ค์–ด์„œ console.log ์•„๋ฌด๊ฑฐ๋‚˜ ์ ์–ด ๋ณธ๋‹ค.
  4. cli ์—์„œ๋Š” node index.js ๋ผ ํ•ด์„œ ์‹คํ–‰ํ•˜๊ฒ ์ง€?
  5. package.json ์—์„œ๋Š” โ€œstartโ€: โ€œnode index.jsโ€ ๋กœ ์จ์ฃผ๊ณ  cli ์— npm start ์ณ๋ณด๋ฉด ์‹คํ–‰๋œ๋‹ค.
  6. npm install โ€”save nodemon ์„ค์น˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  โ€œstartโ€ : nodemon index.js

nodemon ์€ ๋งค๋ฒˆ ์„œ๋ฒ„๋ฅผ ์ผœ๊ณ  ๋”์ด ์—†์ด ํ•œ ๋ฒˆ cli ์— ์„œ๋ฒ„๋ฅผ ์ผœ๋†“์œผ๋ฉด, ์šฐ๋ฆฌ์˜ ์ˆ˜์ •์‚ฌํ•ญ์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ฐ˜์˜์‹œ์ผœ ์ค€๋‹ค.


Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook