Nodejs Server

Nodejs๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์–ป์€ ์ง€์‹์„ ์š”์•ฝํ•ด์„œ ์ •๋ฆฌํ•ด๋ณผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ(request)์„ ํ•˜๋ฉด ์‘๋‹ต(response)์„ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ† ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๊ฐ€์žฅ ๋ผˆ๋Œ€๋ฅผ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

const http = require('http');

http.createServer((req, res) => {
  //์–ด๋–ป๊ฒŒ ์‘๋‹ตํ• ์ง€ ์ ๋Š” ๊ณณ
})

์‘๋‹ต์„ ํ•˜๋Š” ์ฝ”๋“œ๋Š” res. ์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ res๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ๋ฐ”๊ฟ”๋„ ์ƒ๊ด€ ์—†์Šต๋‹ˆ๋‹ค.

  • res.writeHead(HTTP์ƒํƒœ์ฝ”๋“œ, ์‘๋‹ต์— ๋Œ€ํ•œ ์ •๋ณด) : ํ—ค๋”
  • res.write(๋ณด๋‚ผ ๋ฐ์ดํ„ฐ) : ๋ณธ๋ฌธ

HTTP์ƒํƒœ์ฝ”๋“œ

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

๋‚˜๋จธ์ง€๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
});
server.listen(8080);

server.on('listening', () => {
  console.log('8080๋ฒˆ ํฌํŠธ์—์„œ ์„œ๋ฒ„ ๋Œ€๊ธฐ ์ค‘์ž…๋‹ˆ๋‹ค!');
});
server.on('error', (error) => {
  console.error(error);
});

ํ—ค๋”๋ถ€๋ถ„์— ์‘๋‹ต์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์ฝ˜ํ…์ธ  ํ˜•์‹, ํ•œ๊ธ€์„ ์œ„ํ•ด ์ธ์ฝ”๋”ฉ๋ฐฉ์‹์„ ์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ) ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ํฌํŠธ๋ฒˆํ˜ธ์ด๋ฉด EADDRINUSE ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊บผ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜์— ๋Œ€๋น„ + HTML์„ ๋ถˆ๋Ÿฌ์™€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const http = require('http');
const fs = require('fs').promises;

http.createServer(async (req, res) => {
  try {
    const data = await fs.readFile('./server2.html');
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
    res.end(data);
  } catch (err) {
    console.error(err);
    res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end(err.message);
  }
})
  .listen(8081, () => {
    console.log('8081๋ฒˆ ํฌํŠธ์—์„œ ์„œ๋ฒ„ ๋Œ€๊ธฐ ์ค‘์ž…๋‹ˆ๋‹ค!');
  });

res.end๋Š” catch๋ถ€๋ถ„์—๋„ ๊ผญ ์จ์ฃผ์…”์•ผ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ์˜ค๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ timeout(์‹œ๊ฐ„์ดˆ๊ณผ) ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๋ฅผ ์œ„ํ•ด try, catch๋ฅผ ์จ์ฃผ์…”์„œ ์˜ค๋ฅ˜๋ฅผ ์žก์•„์ฃผ์…”์•ผํ•ฉ๋‹ˆ๋‹ค.

Leave a comment