๐Ÿฆ_21.12.28 TIL

21๋…„ 12์›” 28์ผ

๐Ÿ“ ์ฝ”๋“œ๋ผ์ด์–ธ - ์ผ๋‹จ ๋งŒ๋“œ๋Š” node.js

๐Ÿ“ƒ Chapter_4 Node.js๋กœ ๋‚˜์˜ ์ฒซ ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ

๐Ÿ“Ž Sever

  • ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์— ์ •๋ณด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ํ˜น์€ ํ”„๋กœ๊ทธ๋žจ
    => ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ตํ•˜๋Š” ์—ญํ• 

  • ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ๋•Œ

    • ํด๋ฆญ ๋˜๋Š” url ์ž…๋ ฅ์„ ํ†ตํ•ด ๋“ค์–ด๊ฐ„๋‹ค.
    • ์ด๋•Œ ์šฐ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž)๊ฐ€ ๋œ๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  url์„ ํ†ตํ•ด ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์„œ๋ฒ„๋Š” ๊ทธ์— ๋Œ€ํ•œ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‘๋‹ต์„ ํ•œ๋‹ค.
    • html ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ธด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๋กœ ๋„˜๊ฒจ์ค€๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๋Š” html ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ํ•ด์„ํ•˜๊ณ , ํ•ด์„ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž๋Š” ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

    ๋„ค์ด๋ฒ„๋ผ๋Š” ์‚ฌ์ดํŠธ url์„ ์„œ๋ฒ„์— ์š”์ฒญ
    => ์„œ๋ฒ„๋Š” ๋„ค์ด๋ฒ„๋ผ๋Š” html ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ธด ๊ฒฐ๊ณผ๊ฐ’์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋ƒ„
    => ํด๋ผ์ด์–ธํŠธ๋Š” ๋„ค์ด๋ฒ„์— ์ •์ƒ์ ์œผ๋กœ ์ ‘์†

const http = require("http");

http
  .createServer((req, res) => {
    // writeHead : header ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์„œ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ
    // ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ Header ๊ฐ’์„ ํ†ตํ•ด์„œ ์ƒํƒœ์ฝ”๋“œ๋ผ๊ณ  ํ•˜๋Š” ์ˆซ์ž(200)๋ฅผ ๋ณด๋‚ธ๋‹ค.
    // ํƒ€์ž…์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค.
    res.writeHead(200, { "Content-Type": "text/html" });
    // 200 : ์‘๋‹ต์„ ์ž˜ ๋ณด๋ƒˆ์„ ๋•Œ์˜ ์ˆซ์ž
    // 404 : ํ•ด๋‹น ์‘๋‹ต์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ์„ ์˜๋ฏธ
    // type์— html์„ ๋ณด๋‚ด๊ฒ ๋‹ค๊ณ  ๋ช…์‹œํ•œ ๊ฒƒ
    res.end("<p>Hello World!</p>");
  })
  .listen(3000, () => {
    console.log("3000๋ฒˆ ํฌํŠธ ์„œ๋ฒ„ ์ ‘์† ์™„๋ฃŒ!");
  });
  • require : ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • req : ์š”์ฒญ๋ณด๋‚ผ ๋•Œ์˜ ์ •๋ณด
  • res : ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.
# ์ถœ๋ ฅ ๊ฒฐ๊ณผ
PS C:๊ฒฝ๋กœ\js_test\server> node server.js
3000๋ฒˆ ํฌํŠธ ์„œ๋ฒ„ ์ ‘์† ์™„๋ฃŒ!

๐Ÿ“Ž localhost

  • ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ ๋‚ด๋ถ€ ์ฃผ์†Œ
  • ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ์†Œ๊ฐ€ ํ•„์š”
    => localhost๋Š” ์ปดํ“จํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ
  • ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋งŽ์ด ์“ฐ์ž„
    => ์„œ๋ฒ„ ๊ฐœ๋ฐœ ์ค‘ ์‹ค์ œ ์ปดํ“จํ„ฐ์— ๋ฐฐํฌ๋ฅผ ํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ๋ณด์•ˆ์ƒ์˜ ๋ฌธ์ œ๋‚˜ ํšจ์œจ์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค.
    => ์ปดํ“จํ„ฐ์˜ ๋‚ด๋ถ€์˜ ์ฃผ์†Œ(localhost)๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธ
  • localhost = 127.0.0.1
    • 127.0.0.1 = IP(Internet Protocol)

๐Ÿ“Ž ํฌํŠธ(Port)

  • ์„œ๋ฒ„ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฒˆํ˜ธ
    • ํ”„๋กœ์„ธ์Šค : ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ
  • ์„œ๋ฒ„์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ผ์„ ์ฒ˜๋ฆฌ(HTTP, DB ๋“ฑ)
  • localhost๋ฅผ ๊ฐ€์žฅ ๊ธฐ๋ณธ ์ฃผ์†Œ๋กœ ๋‘๊ณ , ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ์„œ ํฌํŠธ๋ฒˆํ˜ธ๋กœ ์ด๋ฅผ ๊ตฌ๋ถ„(๋ถ„๋ฆฌ)์‹œํ‚ด
  • ํฌํŠธ๋ฒˆํ˜ธ์— ๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋Š” ํฌํŠธ๋ฒˆํ˜ธ์— ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ
    => ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌ๋ถ„์‹œ์ผœ์„œ ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜

๐Ÿ“Ž Postman

  • ์„œ๋ฒ„ ๊ฐœ๋ฐœ ์‹œ ์ด๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ํˆด
  • ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰
    => ํ•ด๋‹น ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์— url์„ ์ž…๋ ฅํ•ด์„œ ์ ‘๊ทผ
    => ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด๊ฐ€ ์„œ๋ฒ„๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ๋งŒ๋“ค์–ด ์ง„ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๊ทผ์ด ํ•œ์ •์ ์ด๋‹ค.
  • Postman์„ ํ†ตํ•ด ๋” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์— ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    => ์„œ๋ฒ„ ๊ฐœ๋ฐœ ์‹œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํˆด
  • ์„ค์น˜ : Postman ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ์ง„ํ–‰


HTTP Method

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์š”์ฒญ์˜ ์†์„ฑ์— ๋งž๋Š” HTTP Method๋ฅผ ์ •์˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
    • GET : ๋‹จ์ˆœ ํŽ˜์ด์ง€ ์—ด๋žŒ ์š”์ฒญ
    • POST : ๊ฒŒ์‹œ๋ฌผ ์—…๋กœ๋“œ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ ์š”์ฒญ
    • PUT : ์—…๋ฐ์ดํŠธํ•  ๋•Œ
    • DELETE : ์‚ญ์ œํ•  ๋•Œ

=> Postman์€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ ํ•ด๋‹น ๊ฒฐ๊ณผ๊ฐ’์„ ๋” ์‰ฝ๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํˆด

๐Ÿ“Ž API ์„œ๋ฒ„

  • ์š”์ฒญ์„ ๋ฐ›๊ณ  ์‘๋‹ต์„ ํ•˜๋Š” ์„œ๋ฒ„
  • ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฃผ์ฒด์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๊ทธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์„œ๋ฒ„
  • /๋ผ์šฐํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์กด url๋กœ ์ ‘๊ทผ์„ ํ–ˆ๋Š”๋ฐ, ๊ฐ๊ฐ ํŠน์„ฑ์— ๋งž๋Š” url์„ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ
    => ์š”์ฒญ์— ๋งž๊ฒŒ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ
    => ๋ผ์šฐํŒ…
const http = require("http");

// url์— ๋งž๊ฒŒ ๋ถ„๊ธฐ์ฒ˜๋ฆฌํ•œ ์„œ๋ฒ„
http.createServer((req, res) => {
  // req์˜ url์ด base url("/")์ผ ๊ฒฝ์šฐ
  if(req.url === "/") {
    // ์‘๋‹ต์„ ๋ณด๋ƒˆ์„ ๋•Œ ์ •์ƒ ์ž‘๋™์„ ํ•œ๋‹ค๋ฉด 
    // status code : 200
    res.writeHead(200);
    res.end("main url")
  } else if (req.url === "/upload") {
    res.writeHead(200);
    res.end("upload url");
  } else if (req.url === "/delete") {
    res.writeHead(200);
    res.end("delete url");
  } else {
    res.writeHead(404);
    res.end("Not found!!!");
  }
})
.listen(3000, () => {
  // listen์€ ์„œ๋ฒ„๋ฅผ ๋‹ค ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ํฌํŠธ(์—ฌ๊ธฐ์„œ๋Š” 3000) ๋‚ด์—์„œ ๋Œ€๊ธฐ
  console.log("3000๋ฒˆ ํฌํŠธ ์„œ๋ฒ„ ์ ‘์† ์™„๋ฃŒ!")
});

HTTP response status codes

  • ํŠน์ • HTTP ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
    1. Informational responses (100โ€“199)
    2. Successful responses (200โ€“299)
    3. Redirection messages (300โ€“399)
    4. Client error responses (400โ€“499)
    5. Server error responses (500โ€“599)

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ