Skip to content

๐Ÿฅ ๋ณ‘์•„๋ฆฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” node.js ๋ฐ”๋กœ ์•Œ๊ธฐ

Notifications You must be signed in to change notification settings

Jeong-jeong/Node-js-prac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

76 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿฅ ๋ณ‘์•„๋ฆฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” node.js ๋ฐ”๋กœ ์•Œ๊ธฐ

reference: Do it! Node.js ํ”„๋กœ๊ทธ๋ž˜๋ฐ by ์ •์žฌ๊ณค, Node.js ๊ต๊ณผ์„œ by ์ œ๋กœ์ดˆ

<Do it! Node.js ํ”„๋กœ๊ทธ๋ž˜๋ฐ>

JS์˜ ๊ฐ์ฒด์™€ ํ•จ์ˆ˜ -21.03.23(ํ™”)

โœ”๏ธ JS๋Š” ๋™์ ํƒ€์ดํ•‘(dynamic type language) ์–ธ์–ด.

  • ๊ฐ’์— ๋”ฐ๋ผ ๋ณ€์ˆ˜ type์ด ๋‹ฌ๋ผ์ง.

โœ”๏ธ Object

  • ์ ํ‘œ๊ธฐ๋ฒ•๊ณผ ๊ด„ํ˜ธํ‘œ๊ธฐ๋ฒ•
    • ์ ํ‘œ๊ธฐ๋ฒ• : ์œ ํšจํ•œ ๋ณ€์ˆ˜ ์‹๋ณ„์ž์ผ ๊ฒฝ์šฐ (๊ณต๋ฐฑX, ์ˆซ์ž์‹œ์ž‘X, $ or _ ์ œ์™ธํ•œ ํŠน์ˆ˜ ๋ฌธ์žX)
    • ๊ด„ํ˜ธํ‘œ๊ธฐ๋ฒ• : ๋ชจ๋“  ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ property ํ‚ค๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅโ•
      ๐Ÿ‘‰๐Ÿป ๋Œ€๊ด„ํ˜ธํ‘œ๊ธฐ๋ฒ•์€ ๋Ÿฐํƒ€์ž„์— ํ‰๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅโ•

โœ”๏ธ Function

  • ํ•จ์ˆ˜ ์„ ์–ธ์‹๊ณผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹

โœ”๏ธ Array

  • for ๋ฐ˜๋ณต๋ฌธ๊ณผ forEach
  • ๋ฐฐ์—ด์˜ ๋‚ด์žฅํ•จ์ˆ˜ (push, pop, unshift, shift)
  • delete์™€ splice, slice

โœ”๏ธ Call-Back function

  • ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
  • ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ํด๋กœ์ €์ž„
    • ํด๋กœ์ €: ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜์–ด๋„, ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ๋ฒ”์œ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด๋ถ€ํ•จ์ˆ˜

ํ”„๋กœํ†  ํƒ€์ž… ๊ฐ์ฒด -21.03.24(์ˆ˜)

โœ”๏ธ Prototype

  • ๊ฐ์ฒด์˜ ์›ํ˜• = ํ”„๋กœํ† ํƒ€์ž… (class ์—ญํ• )
  • ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค๊ณ  new ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์ƒˆ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.
  • ์ฆ‰ ํ•จ์ˆ˜๋ฅผ ๋ถ•์–ด๋นต ํ‹€์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ! ๐Ÿคช

๋…ธ๋“œ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์•Œ์•„๋ณด๊ธฐ -21.03.25(๋ชฉ)

๐Ÿ‘พ ์ฃผ์†Œ ๋ฌธ์ž์—ด ๋ถ„๋ฆฌ

  • ํ˜•์‹: https:// (IP) / ์š”์ฒญ path ? ์š”์ฒญ parameter (์ด๋ฆ„ = ๊ฐ’)
    • ์š”์ฒญ parameter ์‚ฌ์ด์‚ฌ์ด๋Š” & ๋กœ ์—ฐ๊ฒฐ๋จ.
    • ์ด์ค‘ ๊ฒ€์ƒ‰์–ด๋Š” query = ๊ฐ’

โœ”๏ธ url ๋ชจ๋“ˆ์„ require๋กœ ๋ถˆ๋Ÿฌ์™€ ๋ณ€์ˆ˜์— ํ• ๋‹น.(๊ฐ์ฒดํ˜•ํƒœ)

  • ๊ฐ์ฒด.parse('์ฃผ์†Œ') ์‹คํ–‰ํ•˜๋ฉด ๋ฌธ์ž์—ด์„ ๊ฐ์ฒด๋กœ ๋ฆฌํ„ดํ•ด์คŒ.
  • format('๋ณ€ํ™˜๋œ ๊ฐ์ฒด')๋Š” ์›๋ž˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜.

โœ”๏ธ querystring ๋ชจ๋“ˆ์„ require๋กœ ๋ถˆ๋Ÿฌ์™€ ๋ณ€์ˆ˜์— ํ• ๋‹น.(๊ฐ์ฒดํ˜•ํƒœ)

  • parse('์ด๋ฏธ ํ•œ๋ฒˆ parse๋œ ์ฃผ์†Œ')๋ฅผ ๋„ฃ์œผ๋ฉด ๋‹ค์‹œ parseํ•ด์คŒ.

๐Ÿ‘พ ์ด๋ฒคํŠธ

  • ๋…ธ๋“œ์˜ ๊ฐ์ฒด๋Š” EventEmitter๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ฐ์ฒด์˜ on(), emit() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
  • UI ์  ์ด๋ฒคํŠธ ์•„๋‹˜.

โœ”๏ธ EventEmitter

  • A ๋ชจ๋“ˆ์—์„œ B ๋ชจ๋“ˆ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ.
  • emit()
    • ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ƒ„
  • on()
    • ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์Œ

๋…ธ๋“œ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์•Œ์•„๋ณด๊ธฐ2 -21.03.29(์›”)

๐Ÿ‘พ ํŒŒ์ผ์„ ์ฝ์–ด ์ถœ๋ ฅํ•ด๋ณด๊ธฐ
โœ”๏ธ fs ๋ชจ๋“ˆ์„ require๋กœ ๋ถˆ๋Ÿฌ์™€ ๋ณ€์ˆ˜์— ํ• ๋‹น.

  • fs.readFileSync() : file์„ ๋‹ค ์ฝ์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ (๋™๊ธฐ์‹)
  • fs.readFile() : file์„ ๋‹ค ์ฝ์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ , ๋‹ค ์ฝ์œผ๋ฉด ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‹คํ–‰ (๋น„๋™๊ธฐ์‹)

๐Ÿ‘พ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์“ฐ๊ธฐ

  • fs.writeFile('๊ฒฝ๋กœ', '๋‚ด์šฉ', ์ฝœ๋ฐฑํ•จ์ˆ˜) ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ

๐Ÿ‘พ ํŒŒ์ผ์„ ์ง์ ‘ ์—ด๊ณ  ๋‹ซ์œผ๋ฉด์„œ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ

  • open(path, flags, [, mode][, callback])
    • mode: w, r ๋กœ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ๊ถŒํ•œ ๋ถ€์—ฌ
  • read (fd, buffer, offset(index), length, position [, callback])
    • fd: ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์€ fd
  • write (fd, buffer, offset, length, position [, callback])
  • close (fd [, callback])

โœ”๏ธ Buffer

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ „์†กํ•  ๋•Œ ์ผ์‹œ์ ์œผ๋กœ ๋ณด๊ด€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

โœ”๏ธ stream

  • ์—ฐ์†๋œ byte๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ํ†ต๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ํ†ต๋กœ

๐Ÿ‘พ ๋กœ๊ทธ ํŒŒ์ผ ๋‚จ๊ธฐ๊ธฐ

  • winston ์™ธ์žฅ ๋ชจ๋“ˆ ์‚ฌ์šฉ

๊ฐ„๋‹จํ•œ ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ -21.03.30(ํ™”)

โœ”๏ธ http & express

  • ๋…ธ๋“œ์— ๊ธฐ๋ณธ์œผ๋กœ ๋“ค์–ด์žˆ๋Š” http ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด ์›น ์„œ๋ฒ„๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ฆ.
  • ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„ express ์‚ฌ์šฉ.

โœ”๏ธ server

  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์•„ ํ•„์š”ํ•œ ์‘๋‹ต์„ ํ•จ.
    • server ๊ฐ์ฒด.listen('ํฌํŠธ๋ฒˆํ˜ธ', ์„œ๋ฒ„ ์‹คํ–‰์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜)
    • listen() = ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋Œ€๊ธฐ.
  • ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ port๋ฅผ ์‚ฌ์šฉ.
  • server ๊ฐ์ฒด๋Š” eventemitter๋ฅผ ์ด๋ฏธ ์ƒ์†ํ•ด์„œ emit, on () ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

๐Ÿ‘พ ๋งฅ์—์„œ ip ํ™•์ธ ๋ฐฉ๋ฒ•

  • ipconfig getifaddr en0

โœ”๏ธ event

  • connection = ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†ํ–ˆ์„ ๋•Œ ์ด๋ฒคํŠธ
    • connection ์ด๋ฒคํŠธ ๋ฐœํ–‰์‹œ ๋‚ด๋ถ€์ ์œผ๋กœ socket์ด ๋งŒ๋“ค์–ด์ง.
    • ํด๋ผ์ด์–ธํŠธ socket์—์„œ .address ๋ฉ”์„œ๋“œ ๋“ฑ์„ ํ†ตํ•ด ip๋„ ๋ฐ›์•„์˜ค๊ธฐ ๊ฐ€๋Šฅ.
  • request = ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ ๋ณด๋‚ผ ๋•Œ ์ด๋ฒคํŠธ
    • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ req, res๋ฅผ ๋ฐ›์Œ.
    • res.writeHead() ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ผ ํ—ค๋”๋ฅผ ๋งŒ๋“ฆ.
    • res.write() ๋กœ html ์‘๋‹ต body ๋ฐ์ดํ„ฐ ๋งŒ๋“ฆ.
    • res.end() ๋กœ ์ „์†ก
  • ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ฝ์–ด์„œ ๋ณด๋‚ด๊ธฐ
    • fs ๋ชจ๋“ˆ์„ ๋ฐ›์•„์˜ค๊ธฐ
    • 1๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํŒŒ์ผ ์ด๋ฆ„
    • 2๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ err๊ฐ์ฒด์™€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Œ.
    • ๋‹ค์Œ๊ณผ์ •์€ ์œ„์™€ ๊ฐ™์Œ
  • ๋งˆ์ธํƒ€์ž… : ํŒŒ์ผ์„ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๋ฐ›์•„์„œ ๋ณด์—ฌ์ค„๊ฑด์ง€ ์ง€์ •ํ•˜๋Š” ๊ฒƒ.

๐Ÿ‘พ ๋‹ค๋ฅธ ์›น์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ํ•„์š”ํ•œ ๊ณณ์— ์‚ฌ์šฉ 7ใ…๋Šฅ!

  • http ๋ชจ๋“ˆ์— get ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Œ.

express๋กœ ์›น ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ -21.04.01(๋ชฉ)

โœ”๏ธ express

  • ๋ฏธ๋“ค์›จ์–ด, ๋ผ์šฐํ„ฐ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•˜๊ธฐ.
  • express๋Š” http ๋ชจ๋“ˆ์„ ๋ฌด์กฐ๊ฑด ์”€.
  • express ๋ชจ๋“ˆ๋กœ ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ํ•จ์ˆ˜๋กœ ์‹คํ–‰ํ•ด ๋ณ€์ˆ˜์— ๋‹ด์œผ๋ฉด express server ๊ฐ์ฒด๊ฐ€ ๋จ.
    • **set()**๋กœ ํฌํŠธ ์„ค์ •ํ•˜๊ธฐ
    • .set('port', process.env.PORT || 3000)
    • http.createServer() ์ธ์ž๋กœ port ์„ค์ •ํ•œ ๋ณ€์ˆ˜๋ฅผ ๋‹ด์œผ๋ฉด express ์„œ๋ฒ„๊ฐ€ ๋งŒ๋“ค์–ด์ง.
    • **get()**๋กœ ํฌํŠธ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
    • .get('port')

๐Ÿ‘พ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์‘๋‹ต ๋ฐ›๊ธฐ

  • ๋ฏธ๋“ค์›จ์–ด

    • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ค‘๊ฐ„์— ๊ฐ€๋กœ์ฑ„์„œ ๋ฐ›์Œ.
    • ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋“ฑ๋ก ๊ฐ€๋Šฅ => use() ์‚ฌ์šฉ
      • 1๋ฒˆ์งธ ์ธ์ž๋กœ ์š”์ฒญ path๋ฅผ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์Œ => '/' ๋“ฑ๋“ฑ
      • ์ธ์ž๋กœ req, res, next๋ฅผ ๋ฐ›์Œ. => use(function (req, res, next) {})
    • next()๋กœ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๋ฐ›์Œ
    • writeHead(), end() ํ•  ํ•„์š”์—†์ด res.send() ๋กœ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ
      • send () ์ธ์ž๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ›์œผ๋ฉด JSON ํฌ๋งท์œผ๋กœ render๋˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๊ฒŒ ์˜ค๋ฅ˜ ํ™•๋ฅ ์ด ์ ๋‹ค!๐Ÿ”ฅ
    • res.redirect()
      • ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์›น ์„œ๋ฒ„ ์•ˆ์— ๋‹ค๋ฅธ ์š”์ฒญ path๋กœ ์—ฐ๊ฒฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค!!! => ๋กœ๊ทธ์ธ ์œ ๋„ ๊ธฐ๋Šฅ ๋“ฑ๋“ฑ
  • ์š”์ฒญ path์™€ ์š”์ฒญ parameter

    • http://localhost:3000 = ip์™€ port ๋ฒˆํ˜ธ
    • http://localhost:3000/users = ํŠน์ • ๊ฒฝ๋กœ = ์š”์ฒญ path
    • http://localhost:3000/users?name=mike = ? ๋’ค์— ํ‚ค์™€ ๊ฐ’์€ ์š”์ฒญ parameter
      • & ๋กœ ์—ฐ๊ฒฐ
      • ๐Ÿ‘‰๐Ÿป ์ฃผ์†Œ์ฐฝ์— ์š”์ฒญ parameter๊ฐ€ ๋ฐ”๋กœ ๋ณด์ด๋Š” ๋ฐฉ์‹: get
      • req.query. => get ๋ฐฉ์‹์œผ๋กœ ์ „์†กํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์ธ
      • req.body. => post ๋ฐฉ์‹์œผ๋กœ ์ „์†กํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์ธ
  • router

    • ์š”์ฒญ path์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ๋งŒ๋“ฆ.
    • ex) / path > A ํ•จ์ˆ˜, /users > B ํ•จ์ˆ˜

๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉํ•˜๊ธฐ -21.04.02(๊ธˆ)

๐Ÿ‘พ ๋ฏธ๋“ค์›จ์–ด
์šฐ๋ฆฌ๊ฐ€ ์ผ์ผ์ด ๋งŒ๋“ค์ง€ ์•Š๊ณ , ๋‚จ๋“ค์ด ๋งŒ๋“ค์–ด๋†“์€ ๋ฏธ๋“ค์›จ์–ด๋“ค์„ ์‚ฌ์šฉํ•ด๋ณด์ž

  • static ๋ฏธ๋“ค์›จ์–ด
    • require('serve-static')
    • ํŠน์ • ํด๋”๋ฅผ ์˜คํ”ˆํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ
    • ์›น ๋ธŒ๋ผ์šฐ์ €๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์˜ ํŒŒ์ผ๋“ค์„ ์•„๋ฌด๊ฑฐ๋‚˜ ๊ฐ€์ ธ๊ฐ€๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์—
      ํŠน์ •ํ•œ ํด๋”๋งŒ ์—ด์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
      • path.join()์œผ๋กœ ๊ฒฝ๋กœ ์„ค์ •
      • path๋Š” ์™ธ์žฅ๋ชจ๋“ˆ์ด๋ผ require ํ•ด์ค˜์•ผ ํ•จ.
      • 1๋ฒˆ์งธ ์ธ์ž ๐Ÿ‘‰๐Ÿป__dirname: ํ˜„์žฌ ํŒŒ์ผ์ด ์‹คํ–‰๋˜๋Š” ํด๋”์˜ path๋ฅผ ์˜๋ฏธ.
      • 2๋ฒˆ์งธ ์ธ์ž ๐Ÿ‘‰๐Ÿป 'ํด๋” ์ด๋ฆ„' : ๋…ธ์ถœ์„ ํ—ˆ์šฉํ•  ํด๋”๋ช…
      • ํ˜„์žฌ ํด๋”์˜ ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด use()์˜ 1๋ฒˆ์งธ ์ธ์ž๋กœ ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์–ด์คŒ.
        • app.use('ํด๋”๊ฒฝ๋กœ', static(path.join(__dirname, 'ํด๋”์ด๋ฆ„'')))
  • body parser
    • post ๋ฐฉ์‹ ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ๋Š” bodyParser ์™ธ์žฅ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ. ์„ค์น˜ ํ•„์š”
    • app.use(bodyParser.urlencoded({extended: false}))
    • app.use(bodyParser.json());
    • post ๋ฐฉ์‹์€ header์— ๋ฐ”๋กœ ์ •๋ณด๋ฅผ ์ฃผ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ”๋””์•ˆ์— ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— bodyParser๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ.
    • req.body.name || req.query.name ๐Ÿ‘‰๐Ÿป post ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ฉด get ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์•„๋ผ
  • postman
    • post ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ŠคํŠธ ํˆด

์š”์ฒญ ๋ผ์šฐํŒ…ํ•˜๊ธฐ -21.04.05(์›”)

๐Ÿ‘พ Router
๊ฐ๊ฐ์˜ ์š”์ฒญ path ๋ณ„๋กœ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.

  • let router = express.Router()

  • app.use('/', router) ๋ฏธ๋“ค์›จ์–ด๋กœ ๋“ฑ๋ก

  • ์œ„ ๋‘ ์ฝ”๋“œ ์‚ฌ์ด์— router ์‚ฌ์šฉ

    • router.route(์š”์ฒญ path).post(function (req, res) {})
      ๐Ÿ‘‰๐Ÿป ๋ฏธ๋“ค์›จ์–ด์ฒ˜๋Ÿผ ๋ชจ๋“  ๊ฑธ ๋ฐ›๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์š”์ฒญ path๋กœ ๋“ค์–ด์˜จ req๋งŒ ๋ฐ›์Œ
  • url parameter

    • ์š”์ฒญ path์— parameter๋ฅผ ๋„ฃ๋Š” ํ˜•์‹
    • let paramName = req.params.name; ๐Ÿ‘‰๐Ÿป req ์•ˆ์— params๋ผ๋Š” ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด๊ฐ
    • ๋ฐฉ๋ฒ•:
      • ์š”์ฒญ์‹œ: action="/process/login/mike"
      • ์‘๋‹ต์‹œ: router.route('/process/login/:name').post( (req, res)=> { ๐Ÿ‘พ ์˜ค๋ฅ˜ ํ…์ŠคํŠธ ๋ณด์—ฌ์ฃผ๊ธฐ
  • app.all('*', (req, res) => { res.status(404).send(ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋‚ด์šฉ) })

    • all() : ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค~
    • status(404) : ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
    • status(200) : ์ •์ƒ
  • express-error-hander ๋ฏธ๋“ค์›จ์–ด๋กœ ์˜ค๋ฅ˜ ํŽ˜์ด์ง€ ๋ณด๋‚ด๊ธฐ

  • let errHandler = require('express-error-hander');

  • let eH = errHandler({ static: { '404': './public/404.html' } });

  • app.use(errHadler.httpError(404));

  • app.use(eH);

์ฟ ํ‚ค์™€ ์„ธ์…˜ ๊ด€๋ฆฌํ•˜๊ธฐ -21.04.08(๋ชฉ)

๐Ÿ‘พ ์ฟ ํ‚ค์™€ ์„ธ์…˜
โœ”๏ธ์ฟ ํ‚ค

  • ํด๋ผ์ด์–ธํŠธ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋Š” ์ •๋ณด.
  • ์‚ฌ์šฉ๋ฐฉ๋ฒ•:
    • cookie-parser ๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉ
    • let cookieParser = require('cookie-parser');
    • cookie-parser ์„ค์ •: app.use(cookieParser());
    • res ๊ฐ์ฒด์˜ cookie() ๐Ÿ‘‰๐Ÿป ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ด ๋‚ด์šฉ์„ ์ €์žฅํ•ด์ค˜!
      • ex) res.cookie(user, {๋‚ด์šฉ}) ๐Ÿ‘‰๐Ÿป ๊ฐœ๋ฐœ์ž๋„๊ตฌ application Cookies ๋ถ€๋ถ„์— user ํ‚ค ๊ฐ’์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ!
    • req ๊ฐ์ฒด์˜ cookies๋กœ ์„ค์ •๋œ ์ฟ ํ‚ค ์ •๋ณด ํ™•์ธ
    • redirect() : ๋‹ค๋ฅธ path๋กœ ์˜ฎ๊น€

โœ”๏ธ์„ธ์…˜

  • ์›น ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์ •๋ณด

  • ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๋“ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ.

  • ์„ธ์…˜์€ ์ฟ ํ‚ค๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— cookie-parser๊ฐ€ ํ•„์š”.

    • Cookies๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ฉด connect.sid๋กœ ์„ธ์…˜์ด ๋งŒ๋“ค์–ด์ง.
  • let expressSession = require('express-session');

  • ๋กœ๊ทธ์ธํ•˜๋ฉด ์„ธ์…˜์ด ๋งŒ๋“ค์–ด์ง€๊ณ , ๋กœ๊ทธ์•„์›ƒํ•˜๋ฉด ์„ธ์…˜์ด ์‚ญ์ œ๋˜๋„๋ก ๋งŒ๋“ค์–ด๋ณด์ž!

    • ๊ฐœ์š”: ์„ธ์…˜ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ์ƒํ’ˆ ํŽ˜์ด์ง€๋กœ, ์—†์œผ๋ฉด ๋กœ๊ทธ์ธ ์œ ๋„
    • ๋กœ๊ทธ์ธ ์„ฑ๊ณตํ•˜๋ฉด ์ƒํ’ˆ ํŽ˜์ด์ง€๋กœ ๋‹ค์‹œ ๋„˜๊ฒจ์คŒ.
    • ๋กœ๊ทธ์•„์›ƒ์„ ํ•˜๋ฉด ์„ธ์…˜์˜ user ์ •๋ณด๋ฅผ ์—†์• ์„œ ๋‹ค์‹œ ์ƒํ’ˆํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์œ ๋„
      • req ๊ฐ์ฒด์˜ session์œผ๋กœ ์„ค์ •๋œ ์„ธ์…˜ ์ •๋ณด ํ™•์ธ
      • if (req.session.user) {redirect(path)} ๐Ÿ‘‰๐Ÿป ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์œ ๋„
      • ๋กœ๊ทธ์•„์›ƒ์‹œ req.session.destroy() ๋กœ ์„ธ์…˜ ์ •๋ณด ์‚ญ์ œ ๐Ÿ”ฅ ์‚ฌ์‹ค ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๊ฒ€์ฆ์€ passport๊ฐ€ ์•Œ์•„์„œ ํ•ด์คŒ. (๋‚˜์ค‘์— ๋ฐฐ์›€)

ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ -21.04.10(ํ† )

๐Ÿ‘พ ํŒŒ์ผ ์—…๋กœ๋“œ

  • ํŒŒ์ผ ์—…๋กœ๋“œ์‹œ POST ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•ด์•ผ ํ•จ

    • body-parser ๋ฏธ๋“ค์›จ์–ด ์‚ฌ์šฉ ํ•„์š”
    • fs, cors ๋ชจ๋“ˆ๋„ ์‚ฌ์šฉ
  • ํŒŒ์ผ ์—…๋กœ๋“œ์šฉ ๋ฏธ๋“ค์›จ์–ด

    • let multer = require('multer')
    • let fs = require('fs')
  • ํด๋ผ์ด์–ธํŠธ์—์„œ ajax๋กœ ์š”์ฒญ ์‹œ CORS(๋‹ค์ค‘ ์„œ๋ฒ„ ์ ‘์†) ์ง€์›

    • let cors = require('cors')
    • ์„œ๋ฒ„์ชฝ์—์„œ ์–ด๋–ค ์ •๋ณด๋ฅผ option์œผ๋กœ ์ฃผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์ ‘์†ํ•œ ๊ฒƒ์„ ํ—ˆ์šฉ~.
    • ex) ๋‹ค๋ฅธ ip๋ฅผ ๊ฐ€์ง„ ๊ณณ์—์„œ ์›น ์„œ๋ฒ„์— ์ ‘์†ํ•ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ฒ ๋‹ค ํ•  ๋•Œ cors ์‚ฌ์šฉ.
  • ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๋ฉด ์–ด๋””์— ์ €์žฅ๋˜๊ฒŒ ํ•  ๊ฒƒ์ž„?

    • diskStorage({}) ์—”์ง„
      • post๋กœ ์ „์†ก๋œ ํŒŒ์ผ์˜ ์ €์žฅ๊ฒฝ๋กœ์™€ ํŒŒ์ผ๋ช… ๋“ฑ์„ ์ฒ˜๋ฆฌ.
  • html ํŒŒ์ผ์— form ์†์„ฑ์œผ๋กœ enctype='multipart/form-data' ํ•„์š”.

    • ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ๋•Œ multipart ๋ฐ์ดํ„ฐ ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ.
  • multer์— ์˜ํ•ด ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜๋ฉด req.files ๊ฐ์ฒด์•ˆ์— ๋“ค์–ด๊ฐ.

โญ๏ธ ์›น์„œ๋ฒ„ ๊ด€๋ จ ์š”์•ฝ - 21.04.10(ํ† )

๐Ÿ‘พ ์›น ์„œ๋ฒ„

  • ์›น ์„œ๋ฒ„๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ์š”์ฒญ(req)์„ ๋ฐ›์•„ ์‘๋‹ต(res)์„ ์คŒ.
  • express๋กœ ์ฒ˜๋ฆฌ.

๐Ÿ‘พ ์‘๋‹ต ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

    1. ๋ฏธ๋“ค์›จ์–ด ๐Ÿ‘‰๐Ÿป ๋ชจ๋“  ์š”์ฒญ ์ฒ˜๋ฆฌ
    1. ๋ผ์šฐํ„ฐ ๐Ÿ‘‰๐Ÿป ์š”์ฒญ path์— ๋”ฐ๋ผ ๋ถ„๊ธฐ
    1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ

๐Ÿ‘พ ์ฟ ํ‚ค, ์„ธ์…˜

  • ๋กœ๊ทธ์ธ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅ. ์ƒํƒœ ์œ ์ง€

๐Ÿ‘พ ํŒŒ์ผ ์—…๋กœ๋“œ

<Node.js ๊ต๊ณผ์„œ ๊ฐœ์ • 2ํŒ>

โญ๏ธ ํ”„๋ŸฐํŠธ์•ค๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ - 21.05.20(๋ชฉ)

๐Ÿ‘พ AJAX

  • ํŽ˜์ด์ง€ ์ด๋™์—†์ด ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š” ๊ธฐ์ˆ .
  • AJAX ์š”์ฒญ ๋ฐฉ๋ฒ•: axios ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ์˜ˆ์ •
    • axios.get, post => ๋‚ด๋ถ€์— new Promise๊ฐ€ ๋“ค์–ด์žˆ์–ด
      then, catch, async, await ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
    • axios.post๋Š” ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ๋ณด๋ƒ„!.

๐Ÿ‘พ FormData

  • const formData = new FormData()
  • append ๋ฉ”์„œ๋“œ๋กœ ํ‚ค -๊ฐ’ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ.
  • has, get, getAll, delete, set

๐Ÿ‘พ AJAX ์š”์ฒญ์‹œ ์ฃผ์†Œ์— ํ•œ๊ธ€์ด ์žˆ๋Š” ๊ฒฝ์šฐ

  • encodeURIComponent ์‚ฌ์šฉ
    • ํ•œ๊ธ€ ์ฃผ์†Œ ๋ถ€๋ถ„๋งŒ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋กœ ๊ฐ์‹ธ๊ธฐ
    • ๋ฐ›๋Š” ์ชฝ์—์„  decodeURIComponent()๋กœ ๋ณต๊ตฌ

๐Ÿ‘พ data attribute & dataset

  • ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
    • html ํƒœ๊ทธ ์†์„ฑ: data-
    • dataset์œผ๋กœ ํ™•์ธ

โญ๏ธ ๋…ธ๋“œ ๊ธฐ๋Šฅ - 21.05.28(๊ธˆ)

๐Ÿ‘พ ๋…ธ๋“œ์˜ ์ฝ˜์†” ๊ธฐ๋Šฅ REPL (Read, Eval, Print, Loop)

  • ๋…ธ๋“œ์˜ ์ฝ˜์†”์€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ํ•ด์„ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์ข…๋ฃŒํ•  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ์ฝ˜์†”์—์„œ REPL๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋ช…๋ น์–ด node

๐Ÿ‘พ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค๊ธฐ

  • ๋ชจ๋“ˆ: ํŠน์ •ํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜, ๋ณ€์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ

    • ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค์–ด๋‘๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์— ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
    • ๋ฐฉ๋ฒ•: module.exports์— ๋‹ด๊ธฐ
      • ๊ฐ์ฒด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜, ๋ณ€์ˆ˜๋„ ๋Œ€์ž… ๊ฐ€๋Šฅ.
  • ES2015 ๋ชจ๋“ˆ ์Šคํƒ€์ผ

    • ๋ฐฉ๋ฒ•: import, export default
    • ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ js๋กœ ํ•˜๋ฉฐ ES2015 ๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• :
      • package.json์— type: 'module' ์†์„ฑ ๋„ฃ๊ธฐ.

๐Ÿ‘พ ๋…ธ๋“œ ๋‚ด์žฅ ๊ฐ์ฒด

  • global ๊ฐ์ฒด(์ „์—ญ๊ฐ์ฒด) = ๋ธŒ๋ผ์šฐ์ €์˜ window ๊ฐ์ฒด

    • ์ƒ๋žต ๊ฐ€๋Šฅ ex) global.require ๐Ÿ‘‰๐Ÿป require, global.console ๐Ÿ‘‰๐Ÿป console
    • window๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ  : DOM์ด๋‚˜ BOM์ด ์—†์œผ๋ฏ€๋กœ
    • global ์†์„ฑ์— ๊ฐ’์„ ๋„ฃ์–ด ํŒŒ์ผ ๊ฐ„ ๊ณต์œ  ๊ฐ€๋Šฅ. (๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ)
  • global.console

    • console.time & console.timeEnd
      • console.timeEnd(๋ ˆ์ด๋ธ”)๊ณผ ๋Œ€์‘๋˜์–ด ๊ฐ™์€ ๋ ˆ์ด๋ธ”์„ ๊ฐ€์ง„ time๊ณผ timeEnd ์‚ฌ์ด์˜ ์‹คํ–‰์‹œ๊ฐ„ ์ธก์ •
    • console.table(๋ฐฐ์—ด)
      • ๋ฐฐ์—ด ์š”์†Œ๋กœ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๋„ฃ์œผ๋ฉด ๊ฐ์ฒด ์†์„ฑ๋“ค์ด 'ํ…Œ์ด๋ธ” ํ˜•์‹'์œผ๋กœ ํ‘œํ˜„๋จ.
    • console.dir(๊ฐ์ฒด, ์˜ต์…˜)
      • ๊ฐ์ฒด๋ฅผ ์ฝ˜์†”์— ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉ.
      • ์˜ต์…˜ colors: true๋กœ ํ•˜๋ฉด ์ฝ˜์†”์— ์ƒ‰์ด ์ถ”๊ฐ€๋˜์–ด ๋ณด๊ธฐ ํŽธํ•ด์ง.
      • ์˜ต์…˜ depth: ๊ฐ์ฒด๋ฅผ ๋ช‡ ๋‹จ๊ณ„๊นŒ์ง€ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •. ๊ธฐ๋ณธ๊ฐ’ > 2
    • console.trace(๋ ˆ์ด๋ธ”)
      • ์—๋Ÿฌ ์œ„์น˜ ์ถ”์ . ๋ณดํ†ต ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.
    • โญ๏ธ __filename, __dirname
      • ํ˜„์žฌ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋‚˜ ํŒŒ์ผ๋ช…์„ ์•Œ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
      • console.log(__filename)
        • ์‹คํ–‰์‹œ ํ˜„์žฌ ํŒŒ์ผ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ๋ช…๊นŒ์ง€ ๋‚˜์˜ด.
      • console.log(__dirname)
        • ์‹คํ–‰์‹œ ํ˜„์žฌ ํŒŒ์ผ ๊ฒฝ๋กœ๊นŒ์ง€ ๋‚˜์˜ด.
    • module, exports, require
      • ๐Ÿง exports
        • ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ๋•Œ module.exports ๋ง๊ณ ๋„ ๊ทธ๋ƒฅ exports ๊ฐ์ฒด๋กœ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.
        • module.exports์™€ exports๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•จ.
          • console.log(module.exports === exports)
        • โŒ ๋‹จ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
      • ๐Ÿง require
        • require === ํ•จ์ˆ˜, ํ•จ์ˆ˜ === ๊ฐ์ฒด, ๋”ฐ๋ผ์„œ require === ๊ฐ์ฒด
        • require.cache
          • ํ•œ๋ฒˆ requireํ•œ ํŒŒ์ผ์€ require.cache์— ๋‹ค ์ €์žฅ๋จ.
        • require.main
          • ๋…ธ๋“œ ์‹คํ–‰ ์‹œ ์ฒซ ๋ชจ๋“ˆ์„ ๊ฐ€๋ฆฌํ‚ด.
          • ํ˜„์žฌ ํŒŒ์ผ์ด ์ฒซ ๋ชจ๋“ˆ์ธ์ง€ ์•„๋Š” ๋ฐฉ๋ฒ•: require.main === module
    • node์—์„œ์˜ this
      • ์ตœ์ƒ์œ„ ์Šค์ฝ”ํ”„์— ์กด์žฌํ•˜๋Š” this === module.exports(exports ๊ฐ์ฒด)
      • ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€ ๋‚ด๋ถ€์˜ this === global ๊ฐ์ฒด
    • process
      • ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ.
        • ๐Ÿง process.env
        • ์‹œ์Šคํ…œ ํ™˜๊ฒฝ๋ณ€์ˆ˜
        • ์„œ๋น„์Šค์˜ ์ค‘์š”ํ•œ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ๋„ ์‚ฌ์šฉ๋จ. ex) ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ
          • process.env.SECRET_ID
          • process.env.SECRET_CODE
        • ๐Ÿง process.nextTick(์ฝœ๋ฐฑ)
        • microtask = process.nextTick , Promise
          • ์ด๋ฒคํŠธ๋ฃจํ”„๊ฐ€ ๋‹ค๋ฅธ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ณด๋‹ค nextTick์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์šฐ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•จ.
          • promise ๋˜ํ•œ ๋‹ค๋ฅธ ์ฝœ๋ฐฑ๋ณด๋‹ค ์šฐ์„ ์‹œ๋จ.
        • ๐Ÿง process.exit(์ฝ”๋“œ)
          • ์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ. ์ˆ˜๋™์œผ๋กœ ๋…ธ๋“œ๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.

โญ๏ธ ๋…ธ๋“œ ๊ธฐ๋Šฅ - ๋…ธ๋“œ ๋‚ด์žฅ ๋ชจ๋“ˆ - 21.06.02(์ˆ˜)

  • os ๋ชจ๋“ˆ
    • ์šด์˜์ฒด์ œ ์ •๋ณด
    • ์ฃผ๋กœ ์ปดํ“จํ„ฐ ๋‚ด๋ถ€ ์ž์›์— ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ.
    • ์šด์˜์ฒด์ œ ๋ณ„๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
  • path ๋ชจ๋“ˆ
    • ํด๋”, ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ž‘
    • ์šด์˜์ฒด์ œ ๋ณ„๋กœ ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ
    • ํŒŒ์ผ ๊ฒฝ๋กœ์—์„œ ํŒŒ์ผ๋ช…/ ํ™•์žฅ์ž๋งŒ ๋”ฐ๋กœ ๋–ผ์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ์Œ.
  • url ๋ชจ๋“ˆ
    • ์ธํ„ฐ๋„ท ์ฃผ์†Œ ์‰ฝ๊ฒŒ ์กฐ์ž‘
    • url.parse(์ฃผ์†Œ) : ์ฃผ์†Œ๋ถ„ํ•ด
    • url.format(๊ฐ์ฒด) : ๋ถ„ํ•ด๋œ ์ฃผ์†Œ ์กฐ๋ฆฝ
    • searchParams
      • new URL๋กœ myURL์ด๋ผ๋Š” ์ฃผ์†Œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ๊ทธ ์•ˆ์— searchParams ๊ฐ์ฒด๊ฐ€ ์žˆ์Œ.
      • search ๋ถ€๋ถ„์„ ์กฐ์ž‘ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ ์ง€์›.
  • querystring ๋ชจ๋“ˆ
    • WHATWG ๋ฐฉ์‹์˜ url ๋Œ€์‹  ๊ธฐ์กด ๋…ธ๋“œ์˜ url์„ ์‚ฌ์šฉ์‹œ search ๋ถ€๋ถ„ ์กฐ์ž‘ ๋ชจ๋“ˆ
    • querystring.parse(query) : url์˜ query ๋ถ€๋ถ„์„ JS ๊ฐ์ฒด๋กœ ๋ถ„ํ•ด
    • querystring.stringify(๊ฐ์ฒด) ๋ถ„ํ•ด๋œ query ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋‹ค์‹œ ์กฐ๋ฆฝ

โญ๏ธ ๋…ธ๋“œ ๊ธฐ๋Šฅ - ๋…ธ๋“œ ๋‚ด์žฅ ๋ชจ๋“ˆ - 21.06.03(๋ชฉ)

  • crypto

    • ์•”ํ˜ธํ™” ๊ด€๋ จ ๋ชจ๋“ˆ
    • ๋ณตํ˜ธํ™”
      • ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ์›๋ž˜๋Œ€๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ.
    • ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”
      • ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์—†๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹
      • ์ฃผ๋กœ ๐Ÿ’•ํ•ด์‹œ ๊ธฐ๋ฒ•๐Ÿ’• ์‚ฌ์šฉ
        • ๋ฌธ์ž์—ด์„ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹.
        • createHash(์•Œ๊ณ ๋ฆฌ์ฆ˜): ์‚ฌ์šฉํ•  ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
          • sha 512 ์ฃผ๋กœ ์‚ฌ์šฉ
        • update(๋ฌธ์ž์—ด): ๋ณ€ํ™˜ํ•  ๋ฌธ์ž์—ด
        • digest(์ธ์ฝ”๋”ฉ): ์ธ์ฝ”๋”ฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜.
          • ๋ณ€ํ™˜๋œ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜.(base64, hex)
          • base64 : ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์ด ๊ฐ€์žฅ ์งง์Œ.
      • ์ถฉ๋Œ
        • ๋‹ค๋ฅด๊ฒŒ ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์ด ๊ฐ™์€ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ํ˜„์ƒ.
        • ํ•ดํ‚น์šฉ ์ปดํ“จํ„ฐ๊ฐ€ ์ด๋ฅผ ์•Œ์•„๋‚ด ํ•ดํ‚น.
      • ๐Ÿ’•pbkdf2 ์•Œ๊ณ ๋ฆฌ์ฆ˜๐Ÿ’•
        • ๊ธฐ์กด ๋ฌธ์ž์—ด + salt ๋ฌธ์ž์—ด * ๋ฐ˜๋ณต(๋Œ€๋žต 10๋งŒ ๋ฒˆ)
        • randomBytes(): 64๋ฐ”์ดํŠธ ๊ธธ์ด์˜ ๋ฌธ์ž์—ด ์ƒ์„ฑ. = salt
          • randomBytes์ด๋ฏ€๋กœ ์‹คํ–‰์‹œ๋งˆ๋‹ค ๊ฒฐ๊ณผ๊ฐ’ ๋‹ฌ๋ผ์ง.
        • pbkdf2(๋น„๋ฐ€๋ฒˆํ˜ธ, salt, ๋ฐ˜๋ณตํšŸ์ˆ˜, ์ถœ๋ ฅ๋ฐ”์ดํŠธ, ํ•ด์‹œ์•Œ๊ณ ๋ฆฌ์ฆ˜)
    • ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™”
      • ๋ณตํ˜ธํ™” ๊ฐ€๋Šฅ, key ํ•„์š”
      • createCipheriv(์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ‚ค, iv)
      • cipher.update(๋ฌธ์ž์—ด, ์ธ์ฝ”๋”ฉ, ์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ)
        • ๋ณดํ†ต ๋ฌธ์ž์—ด์€ utf8 ์ธ์ฝ”๋”ฉ
        • ์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ์€ base64 ๋งŽ์ด ์‚ฌ์šฉ
      • cipher.final(์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ) : ์•”ํ˜ธํ™” ์™„๋ฃŒ
      • ๋ณตํ˜ธํ™”๋Š” ์œ„ ๊ณผ์ •์— de๋งŒ ๋„ฃ์œผ๋ฉด ๋จ.
  • util module

    • ๊ฐ์ข… ํŽธ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋‘” ๋ชจ๋“ˆ
    • util.deprecate: ํ•จ์ˆ˜๊ฐ€ deprecated ๋์Œ์„ ์•Œ๋ ค์คŒ.
      • ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ, ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€ ๋„ฃ๊ธฐ.
    • util.promisify ์ฝœ๋ฐฑ ํŒจํ„ด์„ ํ”„๋กœ๋ฏธ์Šค ํŒจํ„ด์œผ๋กœ ๋ณ€๊ฒฝ
  • worker_threads

    • ๋…ธ๋“œ์—์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…
  • child_porcess

    • ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋ผ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ.
    • require('child_process').exec
    • const process = exec(๋ช…๋ น์–ด)
    • stdout ํ‘œ์ค€์ถœ๋ ฅ(์„ฑ๊ณต)
    • stderr ํ‘œ์ค€์—๋Ÿฌ(์—๋Ÿฌ)

โญ๏ธ ๋…ธ๋“œ ๊ธฐ๋Šฅ - ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผํ•˜๊ธฐ - 21.06.04(๊ธˆ)

  • ๐Ÿ‘พ fs ๋ชจ๋“ˆ
    • ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“ˆ (ํŒŒ์ผ(ํด๋”) ์ƒ์„ฑ, ์‚ญ์ œ, ์ฝ๊ธฐ, ์“ฐ๊ธฐ)
    • ์ฝ๊ธฐ: fs.readFile(๊ฒฝ๋กœ, ์ฝœ๋ฐฑํ•จ์ˆ˜)
      • readFile์˜ ๊ฒฐ๊ณผ๋ฌผ์€ Buffer ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜๋ฏ€๋กœ toString์œผ๋กœ ๋ณ€ํ™˜.
      • ๋ณดํ†ต์€ ํ”„๋กœ๋ฏธ์Šค ํ˜•์‹์œผ๋กœ ๋ฐ”๊ฟˆ.
        • const fs = require('fs').promises
    • Sync ๋ฉ”์„œ๋“œ
      • ๋™๊ธฐ๋ฐฉ์‹. ์ด์ „ ์ž‘์—… ์™„๋ฃŒ ํ›„ ๋‹ค์Œ ์ž‘์—… ์ง„ํ–‰
      • ex) fs.readFileSync
    • ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ์‹
      • ๐Ÿ’• Buffer: ๋…ธ๋“œ๊ฐ€ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ํŒŒ์ผ ํฌ๊ธฐ๋งŒํผ์˜ ๊ณต๊ฐ„์„ ๋งˆ๋ จํ•˜๊ณ , ํŒŒ์ผ๋ฐ์ดํ„ฐ(buffer)๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ›„ ์กฐ์ž‘๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ.
        • Buffer.from(๋ฌธ์ž์—ด) : ๋ฌธ์ž์—ด์„ ๋ฒ„ํผ๋กœ ๋ณ€ํ™˜
        • Buffer.alloc(๋ฐ”์ดํŠธ) : ๋นˆ๋ฒ„ํผ ์ƒ์„ฑ
        • ๋ฒ„ํผ์˜ ๋‹จ์ !!
          • (๋ฉ”๋ชจ๋ฆฌ๋ฌธ์ œ) ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ์— ๊ทธ๋งŒํผ์˜ ๋ฒ„ํผ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ.
      • ๐Ÿ’• Stream
        • ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ํ•ด ์—ฌ๋Ÿฌ๋ฒˆ ๋‚˜๋ˆ  ๋ณด๋‚ด๋Š” ๋ฐฉ์‹
          • ํŒŒ์ผ ์ฝ๊ธฐ: createReadStream
          • ํŒŒ์ผ ์“ฐ๊ธฐ: createWriteStream
          • ๋‚˜๋ˆ ์ง„ ์กฐ๊ฐ: chunk
          • ์ŠคํŠธ๋ฆผ๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ: ํŒŒ์ดํ•‘ํ•˜๋‹ค
          • ๋™์˜์ƒ ๊ฐ™์€ ํฐ ํŒŒ์ผ ์ „์†ก์‹œ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•จ.

โญ๏ธ ๋…ธ๋“œ ๊ธฐ๋Šฅ - ๊ธฐํƒ€ fs ๋ฉ”์„œ๋“œ ์•Œ์•„๋ณด๊ธฐ - 21.06.05(ํ† )

  • ๐Ÿ‘พ fs ๋ชจ๋“ˆ - ์ƒ์„ฑ

    • fs.access(๊ฒฝ๋กœ, ์˜ต์…˜, ์ฝœ๋ฐฑ)
      • ํด๋” / ํŒŒ์ผ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ง€ ์ฒดํฌ.
      • ์˜ต์…˜
        • F_OK: ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€
        • R_OK: ์ฝ๊ธฐ ๊ถŒํ•œ ์—ฌ๋ถ€
        • W_OK: ์“ฐ๊ธฐ ๊ถŒํ•œ ์—ฌ๋ถ€
        • ํŒŒ์ผ / ํด๋” ๊ถŒํ•œ์ด ์—…๋‹ค๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ : 'ENOENT'
    • fs.mkdir(๊ฒฝ๋กœ, ์ฝœ๋ฐฑ)
      • ํด๋” ๋งŒ๋“œ๋Š” ๋ฉ”์„œ๋“œ.
      • ์ด๋ฏธ ํด๋”๊ฐ€ ์žˆ๋‹ค๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ access ๋ฉ”์„œ๋“œ๋กœ ์šฐ์„  ํ™•์ธ.
    • fs.open(๊ฒฝ๋กœ, ์˜ต์…˜, ์ฝœ๋ฐฑ)
      • ํŒŒ์ผ์˜ ์•„์ด๋””(fd ๋ณ€์ˆ˜)๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ.
      • ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ๊ฒฝ๋กœ์— ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ๊ทธ ์•„์ด๋””๋ฅผ ๊ฐ€์ ธ์˜ด.
      • ๊ฐ€์ ธ์˜จ ์•„์ด๋””๋กœ fs.read, fs.write๋กœ ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ์Œ.
      • ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋กœ w(์“ฐ๊ธฐ), r(์ฝ๊ธฐ), a(์ถ”๊ฐ€) ์„ค์ •.
    • fs.rename(๊ฒฝ๋กœ, ์˜ต์…˜, ์ฝœ๋ฐฑ)
      • ํŒŒ์ผ ์ด๋ฆ„ ๋ฐ”๊พธ๋Š” ๋ฉ”์„œ๋“œ.
  • ๐Ÿ‘พ fs ๋ชจ๋“ˆ - ์‚ญ์ œ

  • fs.readdir(๊ฒฝ๋กœ, ์ฝœ๋ฐฑ)

    • ํด๋” ์•ˆ์˜ ๋‚ด์šฉ๋ฌผ ํ™•์ธ.
  • fs.unlink(๊ฒฝ๋กœ, ์ฝœ๋ฐฑ)

    • ํŒŒ์ผ ์‚ญ์ œ.
    • ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
  • fs.rmdir(๊ฒฝ๋กœ, ์ฝœ๋ฐฑ)

    • ํด๋” ์‚ญ์ œ.
    • ํด๋” ์•ˆ์— ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๋จผ์ € ๋‚ด๋ถ€ ํŒŒ์ผ์„ ๋ชจ๋‘ ์ง€์›Œ์•ผ ํ•จ.
  • ๐Ÿ‘พ fs ๋ชจ๋“ˆ - ๋ณต์‚ฌ

    • fs.copyFile(๋ณต์‚ฌํ•  ํŒŒ์ผ, ๋ณต์‚ฌ๋  ๊ฒฝ๋กœ, ์ฝœ๋ฐฑ)
  • ๐Ÿ‘พ fs ๋ชจ๋“ˆ - ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ์‹œ

โญ๏ธ ๋…ธ๋“œ ๊ธฐ๋Šฅ - ๊ธฐํƒ€ fs ๋ฉ”์„œ๋“œ ์•Œ์•„๋ณด๊ธฐ - 21.06.06(์ผ)

  • ๐Ÿ‘พ ์Šค๋ ˆ๋“œํ’€

    • ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๋†“์€ ์Šค๋ ˆ๋“œ๋ฅผ ๋ชจ์•„๋‘” ๋ฌถ์Œ.
    • ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌ.
    • ์Šค๋ ˆ๋“œํ’€ ๊ฐœ์ˆ˜ ์ œํ•œ: ํ„ฐ๋ฏธ๋„์— UV_THREADPOOL_SIZE = ์ˆซ์ž ์ž…๋ ฅ.
  • ๐Ÿ‘พ event

    • on(์ด๋ฒคํŠธ๋ช…, ์ฝœ๋ฐฑ)
      • ์ด๋ฒคํŠธ๋ช…๊ณผ ๋ฐœ์ƒ ์‹œ ์ฝœ๋ฐฑ ์—ฐ๊ฒฐ. (์ด๋ฒคํŠธ ๋ฆฌ์Šค๋‹)
    • addListener(์ด๋ฒคํŠธ๋ช…, ์ฝœ๋ฐฑ)
      • on๊ณผ ๋™์ผ
    • emit(์ด๋ฒคํŠธ๋ช…)
      • ์ด๋ฒคํŠธ ํ˜ธ์ถœ
    • once(์ด๋ฒคํŠธ๋ช…, ์ฝœ๋ฐฑ)
      • ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์ด๋ฒคํŠธ.
    • removeAllListeners(์ด๋ฒคํŠธ๋ช…)
      • ์ด๋ฒคํŠธ์— ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ œ๊ฑฐ
    • removeListener(์ด๋ฒคํŠธ๋ช…, ๋ฆฌ์Šค๋„ˆ)
      • ์ด๋ฒคํŠธ์— ์—ฐ๊ฒฐ๋œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ๊ฑฐ
    • off(์ด๋ฒคํŠธ๋ช…, ์ฝœ๋ฐฑ)
      • removeListener์™€ ๋™์ผ
    • listenerCount(์ด๋ฒคํŠธ๋ช…)
      • ํ˜„์žฌ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋ช‡ ๊ฐœ ์—ฐ๊ฒฐ๋๋Š”์ง€ ํ™•์ธ.
    • +

โญ๏ธ ๋…ธ๋“œ ๊ธฐ๋Šฅ - ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•˜๊ธฐ - 21.06.07(์›”)

  • ๋…ธ๋“œ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ๊ฐœ์ด๋ฏ€๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ํ•ด์•ผ ํ•œ๋‹ค.

    • ์˜ˆ์™ธ: ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ ์—๋Ÿฌ
    • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ์—๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ๊ธฐ๋ก๋˜๋”๋ผ๋„ ์ž‘์—…์ด ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์ง„ํ–‰๋˜๋„๋ก ์ฒ˜๋ฆฌ.
  • ๐Ÿ‘พ try / catch ์‚ฌ์šฉ

    • ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์€ ๋ถ€๋ถ„์— ์‚ฌ์šฉํ•˜๋ฉด ์ž‘์—…์ด ๋ฉˆ์ถ”์ง€ ์•Š์Œ.
    • throw๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ try/ catch๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
      • ์•ˆ๊ทธ๋Ÿผ ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉˆ์ถค.
  • ๐Ÿ‘พ ๋…ธ๋“œ ๋‚ด์žฅ ๋ชจ๋“ˆ์˜ ์—๋Ÿฌ

    • ๋…ธ๋“œ ๋‚ด์žฅ ๋ชจ๋“ˆ์˜ ์—๋Ÿฌ๋Š” ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š์Œ.
    • ์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•ด๋‘๊ณ  ๋‚˜์ค‘์— ์›์ธ ์ฐพ๊ธฐ.
  • ๐Ÿ‘พ Promise์˜ ์—๋Ÿฌ

    • ํ”„๋กœ๋ฏธ์Šค์˜ ์—๋Ÿฌ๋Š” catchํ•˜์ง€ ์•Š์•„๋„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌ๋˜๋‚˜, ๋…ธ๋“œ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์–ด catch๋ฅผ ๋ถ™์ด๋Š” ๊ฑธ ๊ถŒ์žฅ.
  • ๐Ÿ‘พ on('uncaughtException', ์ฝœ๋ฐฑ)

    • uncaughtException ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋•๋ถ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ฉˆ์ถ”์ง€ ์•Š์Œ.
    • try / catch๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฉˆ์ถ”์ง€ ์•Š์Œ.
    • โŒ ์ด ์ด๋ฒคํŠธ๋Š” ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ.
      • ๋…ธ๋“œ๊ฐ€ ์ด ์ด๋ฒคํŠธ ๋ฐœ์ƒ ํ›„ ๋‹ค์Œ ๋™์ž‘์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ณด์ฆํ•˜๊ธฐ ์•Š์Œ!!
    • ๋‹จ์ˆœ ์—๋Ÿฌ ๊ธฐ๋ก ์šฉ๋„๋กœ ์‚ฌ์šฉ.
    • ์—๋Ÿฌ ๊ธฐ๋ก ํ›„ process.exit()๋กœ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ.

โญ๏ธ http ๋ชจ๋“ˆ๋กœ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ - 21.06.09(์ˆ˜)

  • ํด๋ผ์ด์–ธํŠธ: ์š”์ฒญ(request)์„ ๋ณด๋ƒ„

  • ์„œ๋ฒ„: ์š”์ฒญ์„ ์ฝ๊ณ  ์ฒ˜๋ฆฌ ํ›„, ์‘๋‹ต(response).

    • ๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ฐ›๋Š” ๋ถ€๋ถ„, ์‘๋‹ต์„ ๋ฐ›๋Š” ๋ถ€๋ถ„๋„ ์žˆ์–ด์•ผ ํ•จ.
    • ๊ทธ๊ฑธ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋กœ ๋“ฑ๋กํ•จ!!
    • ์ดํ•ด๋œ๋‹น!!!!
  • ๐Ÿ‘พ http ๋ชจ๋“ˆ

    • createServer((req, res) => )
    • ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฏ€๋กœ, ์‘๋‹ต์„ ์ ์œผ๋ฉด ๋จ.
      • res ๊ฐ์ฒด
      • res.writeHead(์ƒํƒœ์ฝ”๋“œ, ์‘๋‹ต ์ •๋ณด): ์‘๋‹ต์— ๋Œ€ํ•œ ํ—ค๋” ์ •๋ณด ๊ธฐ๋ก
      • res.write: ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ผ ๋ฐ”๋”” ๋ฐ์ดํ„ฐ
      • res.end: ์‘๋‹ต ์ข…๋ฃŒ
        • ์ธ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ์ข…๋ฃŒ.
    • .listen(ํฌํŠธ๋ฒˆํ˜ธ, ์ฝœ๋ฐฑ)
      • ํฌํŠธ์—์„œ ์š”์ฒญ์ด ์˜ค๊ธฐ๋ฅผ ๋Œ€๊ธฐํ•จ
      • 'listening' ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ํ˜•ํƒœ๋„ ๊ฐ€๋Šฅ.
  • localhost & port

    • localhost(127.0.01): ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ ๋‚ด๋ถ€ ์ฃผ์†Œ
    • ๋ฐฐํฌ ์‹œ์—๋Š” 80(HTTP), 443(HTTPS) ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ.
    • ๋ฆฌ๋ˆ…์Šค, ๋งฅ์—์„  1024๋ฒˆ ์ดํ•˜ ํฌํŠธ ์—ฐ๊ฒฐ ์‹œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ•„์š”.
      • ex) sudo node server1...
  • ํฌํŠธ ์ถฉ๋Œ

    • Error: listen EADDRINUSE ::: ํฌํŠธ๋ฒˆํ˜ธ
  • http ์ƒํƒœ์ฝ”๋“œ

    • 2**: ์„ฑ๊ณต
      • 200: ์„ฑ๊ณต, 201: ์ž‘์„ฑ๋จ
    • 3**: ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™)
      • 301: ์˜๊ตฌ์ด๋™, 302: ์ž„์‹œ์ด๋™, 304: ์ˆ˜์ •๋˜์ง€ ์•Š์Œ (์บ์‹œ ์‚ฌ์šฉ)
    • 4**: ์š”์ฒญ ์˜ค๋ฅ˜
      • 400: ์ž˜๋ชป๋œ ์š”์ฒญ, 401: ๊ถŒํ•œ ์—†์Œ, 403: ๊ธˆ์ง€๋จ, 404: ์ฐพ์„ ์ˆ˜ ์—†์Œ
    • 5**: ์„œ๋ฒ„ ์˜ค๋ฅ˜
      • 500: ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜, 502: ๋ถˆ๋Ÿ‰ ๊ฒŒ์ดํŠธ์›จ์ด, 503: ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์Œ.

โญ๏ธ http ๋ชจ๋“ˆ๋กœ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ - REST * ๋ผ์šฐํŒ… - 21.06.10(๋ชฉ)

  • ๐Ÿ‘พ REST (REpresentational State Transfer)

    • ์ฃผ์†Œ๋ฅผ ์ •ํ•˜๋Š” ๊ทœ์น™
    • ์ž์›: ์„œ๋ฒ„๊ฐ€ ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ.
    • HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ(GET, POST, PUT, PATCH, DELETE, OPTIONS)
      • GET: ์„œ๋ฒ„ ์ž์›์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ
      • POST: ์„œ๋ฒ„์— ์ž์›์„ ์ƒˆ๋กœ ๋“ฑ๋กํ•  ๋•Œ / ์• ๋งคํ•  ๋•Œ
      • PUT: ์„œ๋ฒ„ ์ž์›์„ ์•„์˜ˆ ์น˜ํ™˜ํ•  ๋•Œ
      • PATCH: ์„œ๋ฒ„ ์ž์›์„ ์ผ๋ถ€ ์ˆ˜์ •ํ•  ๋•Œ
      • DELETE: ์„œ๋ฒ„ ์ž์›์„ ์‚ญ์ œํ•  ๋•Œ
    • RESTfulํ•œ ์›น ์„œ๋ฒ„
      • REST ๋ฐฉ์‹๋Œ€๋กœ ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ–ˆ์Œ์„ ์˜๋ฏธ.
  • HTTP ํ”„๋กœํ† ์ฝœ

    • ์–ธ์–ด์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์•ฝ์†

About

๐Ÿฅ ๋ณ‘์•„๋ฆฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” node.js ๋ฐ”๋กœ ์•Œ๊ธฐ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published