๐Ÿ‘‰ Package.json

key | value ํ˜•ํƒœ
--save ๋ช…๋ น์–ด : package.json ์— ์ €์žฅ --> dependencies์— ์ €์žฅ

var express = require('express');
var app = express();
app.listen(3000, function(){
    console.log("start, express server on port 3000");
}) // 3000 : ํฌํŠธ๊ฐ’

// localHost = 127.0.0.1
// node๋Š” ๋น„๋™๊ธฐ
  • ์ž๋™์œผ๋กœ ํŒŒ์ผ๋ณ€ํ™” ๊ฐ์ง€ํ•ด์„œ node๋ฅผ ๋‹ค์‹œ ์žฌ์‹œ์ž‘ํ•ด์ฃผ๋Š” ๋ฐฉ์‹
    : nodemon
  • nodemon ์„ค์น˜
    : npm install nodemon --g ( - g : global ์„ค์น˜ )

๐Ÿ‘‰ URL

// url routing
app.get('/', function(req, res){
    res.send("<h1>hi, friend!</h1>");    // html ํ™”๋ฉด์— ์ถœ๋ ฅ
    res.sendFile(__dirname + "/public/main.html")        
    // htmlํŒŒ์ผ ๋ณด๋‚ด๊ธฐ, __dirname ์ ˆ๋Œ€๊ฒฝ๋กœ + html ํŒŒ์ผ ์œ„์น˜
})

๐Ÿ‘‰ Static ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •

  • javascript / css / image ๋ฅผ static file์ด๋ผ ํ•œ๋‹ค
    app.use(express.static('public'))    
    // 'public' ์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ static์œผ๋กœ ์ธ์‹
    app.get('/main', function(req, res){
      res.sendFile(__dirname + "/public/main.html")        
      // htmlํŒŒ์ผ ๋ณด๋‚ด๊ธฐ, __dirname ์ ˆ๋Œ€๊ฒฝ๋กœ + html ํŒŒ์ผ ์œ„์น˜
    })
    // get ์š”์ฒญ

๐Ÿ‘‰ POST ์š”์ฒญ์ฒ˜๋ฆฌ

  • ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ๋•Œ๋Š” POST ์‚ฌ์šฉ
<body>
    <form action="/email_post" method="post">
        <input type="text" name="email">
        <input type="submit">
    </form>
</body>
var bodyParser = require('body-parser')

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended:true}))

app.post('/email_post', function(req, res){
    res.send("post response");
    // data ๋ฐ›๊ธฐ
    // npm install body-parser --save --> body-parser๋ฅผ ์ด์šฉํ•ด์„œ data ๋ฐ›๊ธฐ
    // req.body --> {} ๊ฐ์ฒดํ˜•ํƒœ
    res.send("<h1>welcom </h1>" + req.body)
})

๐Ÿ‘‰ Stream ?

ํ•œ ์ง€์ ์—์„œ ๋‹ค๋ฅธ ์ง€์ ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ
์ŠคํŠธ๋ฆผ์€ ๋ฐฐ์—ด์ด๋‚˜ ๋ฌธ์ž์—ด๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ปฌ๋ ‰์…˜ / ์ŠคํŠธ๋ฆผ์ด ์–ด๋ ค์šด ๊ฒƒ์€ ํ•œ๋ฒˆ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ŠคํŠธ๋ฆผ์€ ์—„์ฒญ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋‚˜, ์™ธ๋ถ€ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ํ•œ Chunk์”ฉ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํž˜์„ ๋ฐœํœ˜ํ•œ๋‹ค.

Buffer์˜ ์ •์˜์— ๋”ฐ๋ฅด๋ฉด, ํŒŒ์ผ์‹œ์Šคํ…œ์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋“ค์ด ์ด๋™ํ•œ๋‹ค๋Š”๊ฑธ ์˜๋ฏธ


๐Ÿ‘‰ Buffer ?

Node.js์˜ ์ผ๋ถ€๋กœ ๋„์ž…๋˜์–ด TCP ์ŠคํŠธ๋ฆผ์ด๋‚˜ ํŒŒ์ผ์‹œ์Šคํ…œ๊ฐ™์€ ์ž‘์—…์—์„œ์˜ octet Stream(์ผ๋ฐ˜์ ์œผ๋กœ 8bit ํ˜•์‹์œผ๋กœ ๋œ ๋ฐ์ดํ„ฐ)๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. --> ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋“ค์˜ ์ŠคํŠธ๋ฆผ์„ ์ง์ ‘ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด Node.js API์— ์ถ”๊ฐ€

> ์ปดํ“จ๋„ˆ๊ฐ€ ์ด์ง„์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ‘œํ˜„ํ•œ๋‹ค ์ด๋•Œ 0 ํ˜น์€ 1๋กœ ๋˜์–ด์žˆ๋Š” ์ž๋ฆฌ๋ฅผ ๋น„ํŠธ(bit) ๋ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ Binary digIT์˜ ์•ฝ์ž์ด๋‹ค.

๋ฐ์ดํ„ฐ๋“ค์˜ ์ŠคํŠธ๋ฆผ์ด๋ž€? ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ํ•œ์ง€์ ์—์„œ ๋‹ค๋ฅธ ์ง€์ ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ

๋ฐ์ดํ„ฐ๋“ค์€ ํ•œ ์ž‘์—…์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ๋” ๋น ๋ฅด๋‹ค๋ฉด, ๋จผ์ € ๋„์ฐฉํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— ์–ด๋Š์ •๋„์˜ ๋ฐ์ดํ„ฐ๋Ÿ‰์ด ์Œ“์ผ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ์ด๋•Œ ๊ทธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์˜์—ญ์„ Buffer๋ผ ํ•œ๋‹ค. ์ปดํ“จํ„ฐ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ RAM์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์˜์—ญ์—์„œ streaming ์ค‘์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ชจ์ด๊ณ , ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๊ฒฐ๊ตญ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ณด๋‚ด์–ด ์ง„๋‹ค.

if (req.method === 'POST') {
    let body = '';
    req.on('data', chunk => {
        body += chunk.toString(); // convert Buffer to string
    });
    req.on('end', () => {
        console.log(body);
        res.end('ok');
    });
}