๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

๐Ÿ“—Nodejs : plus Alpha - ๋ถ„์„ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ“—Nodejs/โšกver.0

๐Ÿ“—Nodejs : plus Alpha - ๋ถ„์„ํ•˜๊ธฐ

4:Bee 2024. 6. 17. 23:50
728x90

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ๋งํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ ๋ณผ ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ถ„์„ํ•  ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. section26๋ถ€๋ถ„์„ ์ค‘์‹ฌ์œผ๋กœ ๋‘˜๋Ÿฌ ๋ณด๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์ „ section24์— ์žˆ๋Š” main.js ์ฝ”๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ถ„์„ ํ•  ์˜ˆ์ •์ด๋‹ค. ๋ถ„์„ ๋Œ€์ƒ์ด ๋  ์ฝ”๋“œ๋Š” ์•„๋ž˜ ๋”๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

๋”๋ณด๊ธฐ
var http = require('http');
var fs = require('fs');
var url = require('url');

var app = http.createServer(function (request, response) {
  var _url = request.url;
  var queryData = url.parse(_url, true).query;
  var pathname = url.parse(_url, true).pathname;
  if (pathname === '/') {
    if (queryData.id === undefined) {

      fs.readdir('./data', function (error, filelist) {
        var title = 'Welcome';
        var description = 'Hello, Node.js';
        var list = '<ul>';
        var i = 0;
        while (i < filelist.length) {
          list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`;
          i = i + 1;
        }
        list = list + '</ul>';
        var template = `
          <!doctype html>
          <html>
          <head>
            <title>WEB1 - ${title}</title>
            <meta charset="utf-8">
          </head>
          <body>
            <h1><a href="/">WEB</a></h1>
            ${list}
            <h2>${title}</h2>
            <p>${description}</p>
          </body>
          </html>
          `;
        response.writeHead(200);
        response.end(template);
      })
    }
  } else {
    response.writeHead(404);
    response.end('Not found');
  }

});
app.listen(3000);
 

URL


๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ

var http = require('http');
var fs = require('fs');
var url = require('url');
  • http ๋ชจ๋“ˆ์€ HTTP ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • fs ๋ชจ๋“ˆ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • url ๋ชจ๋“ˆ์€ URL์„ ํ•ด์„ํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์„œ๋ฒ„ ์ƒ์„ฑ

var app = http.createServer(function (request, response) { ... }
  • http.createServer ํ•จ์ˆ˜๋Š” ์„œ๋ฒ„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ request๋Š” ์š”์ฒญ ์ •๋ณด๋ฅผ, response๋Š” ์‘๋‹ต์„ ๋‹ค๋ฃจ๋Š” ๊ฐ์ฒด์ด๋‹ค.

์š”์ฒญ URL ๋ถ„์„

//var app = http.createServer(function (request, response) { ~
// ~ function (request, response){ ~

var _url = request.url;
var queryData = url.parse(_url, true).query;
var pathname = url.parse(_url, true).pathname;
if (pathname === '/') {...}
  • request.url์„ ํ†ตํ•ด ์š”์ฒญ๋ฐ›์€ URL์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  • url.parse() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ URL์„ ํŒŒ์‹ฑํ•˜๊ณ  ์ด๋•Œ true ์˜ต์…˜์„ ์ฃผ๋ฉด ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. query๋Š” URL์˜ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ๋ถ€๋ถ„, pathname์€ URL์˜ ๊ฒฝ๋กœ ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ์—ฌ๊ธฐ์„œ request๋Š” ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž,๋ธŒ๋ผ์šฐ์ €)๋กœ ๋ถ€ํ„ฐ ๋ฐ›๋Š” ์š”์ฒญ(request)์„ ์˜๋ฏธํ•œ๋‹ค.

pathname '/'

//function (request, response){ ~

if (pathname === '/') {...}
  • ์š”์ฒญ๋ฐ›์€ ๊ฒฝ๋กœ๊ฐ€ ๋ฃจํŠธ('/')์ธ ๊ฒฝ์šฐ์˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ฟผ๋ฆฌ ๋ฐ์ดํ„ฐ์— 'id' ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

// if (pathname === '/') { ~

if (queryData.id === undefined) {...}
  • ์ง€๊ธˆ๊นŒ์ง€์˜ url์€ 'localhost:3000/(pathName:'/')(quesryString:undfiend)'์ธ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, URL์ด 'localhost:3000/'์ธ ๊ฒƒ์ด๋‹ค.

data ๋””๋ ‰ํ† ๋ฆฌ ์ฝ๊ธฐ

(์„œ๋ฒ„ ๊ฐœ๋ฐœ ํ• ๋•Œ ๊ผญ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์€ ์•„๋‹ˆ๋‹ค.)

// if (queryData.id === undefined) { ~

fs.readdir('./data', function (error, filelist) {
  • fs.readdir() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ./data ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฝ๋Š”๋‹ค. ์ฝ๊ธฐ ์™„๋ฃŒ ํ›„ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

HTML ๋ชฉ๋ก ์ƒ์„ฑ

// fs.readdir('./data', function (error, filelist) { ~

var title = 'Welcome';
var description = 'Hello, Node.js';
var list = '<ul>';
// ./data ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋˜ ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ๋ฅผ while๋ฌธ์œผ๋กœ ์ฝ์–ด ๋‚ธ๋‹ค.
var i = 0;
while (i < filelist.length) {
  list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`;
  i = i + 1;
}

list = list + '</ul>';
var template = `~`
  • ๊ธฐ๋ณธ ์ œ๋ชฉ๊ณผ ์„ค๋ช…์„ ์„ค์ •ํ•œ๋‹ค.
  • <ul> ํƒœ๊ทธ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชฉ๋ก์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•ด <li> ํƒœ๊ทธ์™€ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชฉ๋ก์„ ๊ตฌ์„ฑํ•œ๋‹ค.

HTML ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ ๋ฐ ์‘๋‹ต

// fs.readdir('./data', function (error, filelist) { ~

var template = `
  <!doctype html>
  <html>
  <head>
    <title>WEB1 - ${title}</title>
    <meta charset="utf-8">
  </head>
  <body>
    <h1><a href="/">WEB</a></h1>
    ${list}
    <h2>${title}</h2>
    <p>${description}</p>
  </body>
  </html>
  `;

response.writeHead(200);
response.end(template);
  • HTML ํ…œํ”Œ๋ฆฟ์„ ๋ฌธ์ž์—ด๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • response.writeHead(200)์œผ๋กœ HTTP ์ƒํƒœ ์ฝ”๋“œ 200(์„ฑ๊ณต)์„ ์‘๋‹ต ํ—ค๋”์— ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • response.end(template)์œผ๋กœ ์ƒ์„ฑ๋œ HTML ํ…œํ”Œ๋ฆฟ์„ ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

404 ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

// if (pathname === '/') { ~

} else {
  response.writeHead(404);
  response.end('Not found');
}
  • ๊ฒฝ๋กœ๊ฐ€ ๋ฃจํŠธ(/) ์ด์™ธ์˜ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์š”์ฒญ๋˜์—ˆ์„ ๊ฒฝ์šฐ ์‹คํ–‰๋œ๋‹ค.
  • response.writeHead(404)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ต ํ—ค๋”์— HTTP ์ƒํƒœ ์ฝ”๋“œ 404๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์ด ์ƒํƒœ ์ฝ”๋“œ๋Š” ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • response.end('Not found')๋กœ ์‘๋‹ต ๋ณธ๋ฌธ์— "Not found"๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉฐ ์‘๋‹ต์„ ๋งˆ์นœ๋‹ค.

์„œ๋ฒ„ ๋ฆฌ์Šค๋‹

// var app = http.createServer(function (request, response) { ~

});
app.listen(3000);
  • ์œ„์—์„œ ์ƒ์„ฑํ•œ ์„œ๋ฒ„(app)๋Š” listen ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌํŠธ 3000์—์„œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ์ด๋Š” ์„œ๋ฒ„๊ฐ€ 3000๋ฒˆ ํฌํŠธ๋ฅผ ์—ด๊ณ  ํ•ด๋‹น ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ํฌํŠธ 3000์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ ์ค‘ ํ•˜๋‚˜๋กœ ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค๋ฅธ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
728x90
Comments