[Back-end๐Ÿฆ] #40 Node.js

๋˜์ƒยท2021๋…„ 12์›” 23์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
56/58
post-thumbnail

1. Github

#39 ์— amend, stash, cherry-pick, pull request ๋ฅผ ์ด์–ด์„œ ์ •๋ฆฌํ–ˆ๋‹ค.



2. Node.js

1. node??

  • JavaScript ๋Ÿฐํƒ€์ž„ : JavaScript๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ(์‹คํ–‰๊ธฐ)์„ ๋งํ•œ๋‹ค. ์›๋ž˜ JavaScript๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ๋™์ž‘ํ–ˆ์œผ๋‹ˆ๊นŒ.
  • JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ๊ณณ์—์„œ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด์„œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํŠน์ง•

  • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด๋‘” ์ž‘์—… ์ˆ˜ํ–‰.
    • ์ด๋ฒคํŠธ ๋ฃจํ”„ : ํ˜ธ์ถœ ์Šคํƒ์— ํ•  ์ž‘์—…์„ ์Œ“์•„๋‘๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ณด๋‚ด๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์™„๋ฃŒ ํ›„ ํƒœ์Šคํฌ ํ์— ์Œ“์•„๋‘๊ณ  ํ˜ธ์ถœ ์Šคํƒ์˜ ์ž‘์—…์ด ๋ชจ๋‘ ๋๋‚œ ํ›„์— ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ํƒœ์Šคํฌ ํ์— ์žˆ๋Š” ์ž‘์—…๋“ค์„ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ง„ํ–‰ํ•œ๋‹ค.
  • Non-Blocking I/O
    • <-> Blocking I/O์—์„œ๋Š” ์„œ๋ฒ„๊ฐ€ ์ž‘์—…์„ ํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ๋Š” ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.
    • ๋น„๋™๊ธฐ Input/Output, ์บ์…”๊ฐ€ ๋‹ค ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋ฆฌ์Šคํƒ€์—๊ฒŒ ์ผ๋‹จ ์ „๋‹ฌ!)
    • ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ง„ํ–‰. ํด๋ผ์ด์–ธํŠธ๋Š” ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์„œ๋ฒ„์— ๊ณ„์† ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • Single Thread (์บ์…” 1๋ช…)
    • ๋ชจ๋“  ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.
    • ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ „์ฒด์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
    • ์‹ฑ๊ธ€! ์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • <-> ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ : ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ผ์„ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด๋„ ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์Šค๋ ˆ๋“œ๋ฅผ ์ „ํ™˜ํ•  ๋•Œ ๋น„์šฉ์ด ์ƒ๊ธฐ๊ณ , ์Šค๋ ˆ๋“œ๊ฐ€ ๋†€๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ 

  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ, Non-Blocking I/O ๋กœ ๋น ๋ฅธ ์†๋„๋กœ ์ผ์„ ์ฒ˜๋ฆฌ -> ์ฑ„ํŒ…, ์ŠคํŠธ๋ฆฌ๋ฐ์ฒ˜๋Ÿผ I/O ์ž‘์—…์ด ๋งŽ์€ ์„œ๋ฒ„์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.
  • ์ปดํ“จํ„ฐ ์ž์› ์†Œ๋ชจ๊ฐ€ ์ ๊ณ  ์ƒ์‚ฐ์„ฑ์ด ๋†’๋‹ค.

๋‹จ์ 

  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ผ ์ž์›์„ ๋งŽ์ด ์“ฐ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๋ถ€ํ•˜๊ฐ€ ํฌ๋‹ค.
  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ == CPU ์ฝ”์–ด๋ฅผ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•œ๋‹ค -> ๊ฒŒ์ž„ ๊ฐ™์€ CPU ์ž‘์—…์ด ๋งŽ์€ ์„œ๋ฒ„์— ์‚ฌ์šฉํ•˜๊ธฐ์—” ์ข‹์ง€ ์•Š๋‹ค.
  • ๋กœ์ง์ด ๋ณต์žกํ•  ๋•Œ, ์ฝœ๋ฐฑ ์ง€์˜ฅ์— ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ, ํ”„๋กœ์„ธ์Šค ์ž์ฒด๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆฐ๋‹ค.

-> ๊ฐ„๋‹จํ•œ ๋กœ์ง, ๋น ๋ฅธ ์‘๋‹ต์‹œ๊ฐ„, ๋น ๋ฅธ ๊ฐœ๋ฐœ, ๋น„๋™๊ธฐ ๋ฐฉ์‹ ์œผ๋กœ ์šด์˜๋˜์–ด์•ผํ•˜๋Š” ์„œ๋น„์Šค์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

-> ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ณ , ํ˜น์‹œ ์„ค์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์ด๋ฉด ๊ตฌ๋ฆ„IDE, AWS ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.


2. node ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰

node
# node ๋Ÿฐํƒ€์ž„์—์„œ ์ง์ ‘ ์ฝ”๋“œ ์ž…๋ ฅํ•ด์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ
node filename
# jsํŒŒ์ผ์„ ์‹คํ–‰์‹œ์ผœ์คŒ. - ์–ด๋–ค ํŽ˜์ด์ง€์— ๊ฐ”์„ ๋•Œ ์–ด๋–ค jsํŒŒ์ผ์„ ์‹คํ–‰ํ• ์ง€ ๊ฐ™์€ ๊ฒƒ์„ node๋กœ ์ œ์–ด
> console.log('hello world'); # node ์˜ console ์€ global.console.

3. ๋ชจ๋“ˆ

๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ณ  ๊ทธ ๋ชจ๋“ˆ์„ ์ œ์–ดํ•˜๋Š” jsํŒŒ์ผ์„ ํ•˜๋‚˜๋‘ฌ์„œ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ ๋‹ค.

// ์ œ์–ดํ•˜๋Š” ํŒŒ์ผ.
// ํ•„์š”ํ•œ js ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉ.
const ๊ฐœ์ธํ”„๋กœํ•„ = require('./two');

console.log(๊ฐœ์ธํ”„๋กœํ•„.์ด๋ฆ„);
console.log(๊ฐœ์ธํ”„๋กœํ•„.๋‚˜์ด); //100
๊ฐœ์ธํ”„๋กœํ•„.ํ•œ์‚ด๋”๋จน์Œ();
๊ฐœ์ธํ”„๋กœํ•„.ํ•œ์‚ด๋”๋จน์Œ();
console.log(๊ฐœ์ธํ”„๋กœํ•„.๋‚˜์ด); //100 - export ํ•˜๋˜ ์‹œ์ ์˜ ๋‚˜์ด๊ฐ€ ์ฐํžˆ๋Š” ๊ฒƒ.
console.log(๊ฐœ์ธํ”„๋กœํ•„.๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ()); // 102
// ๋ชจ๋“ˆ
let ์ด๋ฆ„ = 'ddosang';
let ๋‚˜์ด = 100;
function ํ•œ์‚ด๋”๋จน์Œ() {
    ๋‚˜์ด += 1;
}
function ๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ() {
    return ๋‚˜์ด;
}

module.exports.์ด๋ฆ„ = ์ด๋ฆ„;
module.exports.๋‚˜์ด = ๋‚˜์ด;
module.exports.ํ•œ์‚ด๋”๋จน์Œ = ํ•œ์‚ด๋”๋จน์Œ;
module.exports.๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ = ๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ;

4. ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ!

// ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ!
const http = require('http');
const fs = require('fs');

// ์‹คํ–‰ํ•˜๋ฉด ์ž๋™์ ์œผ๋กœ main, favicon์— ๋Œ€ํ•œ request๊ฐ€ 2 ๋ฒˆ ๋‚ ์•„๊ฐ.
const app = http.createServer(function(request, response) {
    let url = request.url;
    console.log(`request : ${request}`);
    console.log(`request : ${request.url}`);
    if (request.url == '/') {
        // ๋ฉ”์ธํŽ˜์ด์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ
        url = '/index.html';
    } else if (request.url == '/blog') {
        // ๋ธ”๋กœ๊ทธํŽ˜์ด์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ
        url = '/blog.html';
    } else if (request.url == '/favicon.ico') {
        // favicon ์„ ๋ชป์ฐพ์œผ๋ฉด...
        // ๊ทผ๋ฐ ํ•ดํ‚น์„ ๋Œ€๋น„ํ•ด์„œ ๋ชป์ฐพ์•„๋„ 200์„ ๋‚ด๋ณด๋‚ด๊ธฐ๋„ ํ•œ๋‹ค.
        return response.writeHead(404);
    } else {
        response.writeHead(404);
        response.end('Not found');
    }
    response.writeHead(200);
    // ์‘๋‹ต์ด ๋๋‚  ๋•Œ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์—ด์–ด์คŒ.
    response.end(fs.readFileSync(__dirname + url));

});

// 3000๋ฒˆ ํฌํŠธ์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ํ•œ๋‹ค.
app.listen(3000); 

5. ์ตœ์‹  ๋ฌธ๋ฒ•

npm init --yes 
# package.json ์ด ์ƒ์„ฑ๋จ.

๋ณดํ†ต ๋ชจ๋“ˆ์€ ์„ค์น˜ํ•˜๊ณ  ๋‚˜์„œ ์ง€์šฐ๊ณ , package.json, app.js๋งŒ ์—…๋กœ๋“œํ•œ๋‹ค.
npm์€ ์•ฑ์Šคํ† ์–ด ๊ฐ™์€ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

// main
import * as ๊ฐœ์ธํ”„๋กœํ•„ from './two.js'; // ์ „์ฒด ๋‹ค ๊ฐ€์ ธ์˜ฌ ๋•Œ.
// import {์ด๋ฆ„, ๋‚˜์ด, ํ•œ์‚ด๋”๋จน์Œ, ๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ} from './two.js';

console.log(์ด๋ฆ„);
console.log(๋‚˜์ด); //100
๊ฐœ์ธํ”„๋กœํ•„.ํ•œ์‚ด๋”๋จน์Œ();
๊ฐœ์ธํ”„๋กœํ•„.ํ•œ์‚ด๋”๋จน์Œ();
console.log(๋‚˜์ด); //102 - export๋กœ ํ•˜๋‹ˆ๊นŒ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ!!!
console.log(๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ()); // 102
// module
export let ์ด๋ฆ„ = "ddosang";
export let ๋‚˜์ด = 10;
export function ํ•œ์‚ด๋”๋จน์Œ() {
    ๋‚˜์ด += 1;
}
export function ๊ฐ’๊ฐ€์ ธ์˜ค๊ธฐ() {
    return ๋‚˜์ด;
}

5. path ๋ชจ๋“ˆ

// ๊ณต์‹๋ฌธ์„œ ๋งํฌ  : https://nodejs.org/dist/latest-v14.x/docs/api/path.html
const path = require('path');

console.log(`๊ตฌ๋ถ„์ž : ${path.sep}`);
console.log(`๋””๋ ‰ํ† ๋ฆฌ : ${path.dirname(__filename)}`);
console.log(`ํŒŒ์ผ์ด๋ฆ„ : ${path.basename(__filename)}`);
console.log(`ํ™•์žฅ์ž : ${path.extname(__filename)}`);

console.log(__filename);
console.log(__dirname);
console.table(path.parse(__filename));
console.log(path.join(__dirname, 'source')); // ๊ฒฝ๋กœ์— ํด๋”๋‚˜ ํŒŒ์ผ ์ถ”๊ฐ€ํ• ๋•Œ + ๊ฐ™์€๊ฑฐ ์“ฐ์ง€ ๋ง๊ณ  path.join์œผ๋กœ ํ•ฉ์น˜์ž.

6. file system

// ๊ณต์‹๋ฌธ์„œ ๋งํฌ  : https://nodejs.org/dist/latest-v14.x/docs/api/fs.html
const fs = require('fs');

// rename, readFile, writeFile, appendFile, copyFile, mkdir
// 1. rename
let ๋ณ€์ˆ˜ = 'ddosang' // ์‚ฌ์šฉ์ž ์ด๋ฆ„
let ๋‚ ์งœ = new Date()
fs.rename('./test.txt', `./${๋ณ€์ˆ˜}${๋‚ ์งœ.getMilliseconds()}.txt`, (err) => {
    console.log(err); // ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฆฐ ์ด๋ฏธ์ง€๋ฅผ ์–ด๋–ค ์ด๋ฆ„์œผ๋กœ ์˜ฌ๋ฆด์ง€์— ๋Œ€ํ•œ ๊ณ ๋ ค๋Š” ๋ฏธ๋ฆฌ ํ•ด์•ผํ•œ๋‹ค.
})

// 2. readFile
fs.readFile('./test.txt', 'utf8', (err, data) => {
    console.log(err);
    console.log(data);
})

// 3. readDirectory
fs.readdir('./', (err, data) => {
    console.log(err);
    console.log(data);
})

// 4. writeFile
fs.writeFile('./test2.txt', 'hello world 2', (err)=>{
    console.log(err)
});

// 5. appendFile
fs.appendFile('./test2.txt', 'hello world 3', (err)=>{
    console.log(err)
});

// 6. copyFile
fs.copyFile('./test2.txt', './test3.txt', (err)=>{
    console.log(err)
});

// 6
fs.mkdir('./yoyo', (err)=>{
    console.log(err)
});

Quiz!!

Username, Identifier, job
booker, 129012, programmer
grey, 072070, coder
johnson, 814081, data scientist
jenkins, 469346, front-end developer
smith, 795079, back-end developer
  1. user๋ณ„ ํด๋”๋ฅผ ์ƒ์„ฑ(username์œผ๋กœ ํด๋”๋ช… ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.)
  2. ๊ฐ ํด๋”์— userinfo.txt์„ ์ƒ์„ฑํ•œ ํ›„ Username, Identifier, job์„ ์•„๋ž˜ ์–‘์‹์œผ๋กœ ๋ชจ๋‘ ์ €์žฅํ•ด์ฃผ์„ธ์š”.
Username : booker
Identifier : 129012
Job : promgrammer
// ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ - ๋‚˜๋Š” readFile ์•ˆ์—์„œ ์ฝœ๋ฐฑ์„ ์จ์„œ ๊ทธ๋Ÿฐ ๋ฌธ์ œ๋Š” ์—†์—ˆ์ง€๋งŒ readFile์€ ๋น„๋™๊ธฐ๋ผ์„œ ๋ฐ–์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ผ์„ ์ฝ์ง€ ์•Š์•˜๋Š”๋ฐ ๋‹ค์Œ๊ฒƒ์ด ์‹คํ–‰๋ผ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ธฐ๋„ ํ•œ๋‹ค. readFileSync๋‚˜ Promise๋ฅผ ์‚ฌ์šฉํ•˜์ž.
const fs = require('fs');

fs.readFile('./username.csv', 'utf8', (err, data) => {
    // \n์œผ๋กœ ํ•œ๋ฒˆ ์ž๋ฅด๊ณ  ๊ทธ๊ฑธ ', '๋กœ ํ•œ๋ฒˆ ์ž˜๋ผ์„œ 2์ฐจ์› array๋กœ.
    const dataArr = data.split('\n').map(item => item.split(', '));
    // ์‚ฌ๋žŒ ์ˆ˜ (arr ํ–‰)๋งŒํผ ๋Œ๋ฉด์„œ
    for(let i = 1; i < dataArr.length; i++){
        // username ์œผ๋กœ ํด๋” ์ƒ์„ฑ.
        fs.mkdir(`./${dataArr[i][0]}`, (err)=>{
            console.log(err)
        });
        
        // ์‚ฌ๋žŒ ์ •๋ณด ๊ฐœ์ˆ˜(arr ์—ด)๋งŒํผ ๋Œ๋ฉด์„œ
        for (let j = 0; j < dataArr[0].length; j++) {
            // file์— ์ •๋ณด ๋„ฃ๊ธฐ!
            fs.appendFile(`./${dataArr[i][0]}/userinfo.txt`, `${dataArr[0][j]} : ${dataArr[i][j]}\n`, (err)=>{
                console.log(err)
            });
            // console.log(`${dataArr[0][j]} : ${dataArr[i][j]}`);
        }
    }
});
// ๋‹ค๋ฅธ ๋ถ„ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋ณด์™„ํ•œ ์ฝ”๋“œ!!
fs.readFile('./username.csv', 'utf8', (err, data) => {
    const splitedData = data.split('\n').map(info => info.split(', '));
    const columnTitle = splitedData[0];
    splitedData.slice(1)
        .forEach((personData) => {
            username = personData[0];
            fs.mkdir(`./${username}`, (err) => {});
            for (i in personData) {
                console.log(i);
                fs.appendFile(`./${username}/userinfo.txt` ,`${columnTitle[i]} : ${personData[i]}\n`, (err) => {});
            }
        });
});

\n : LineFeed
\r : Carriage Return
๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” \r์ด ์•ˆ๋จนํ˜€์„œ ์•Œ์•„์„œ \n์œผ๋กœ ๋ฐ”๊พผ๋‹ค.

๋˜ split ์“ฐ๋ฉด ๋˜๋Š”๊ฑฐ ์ •๊ทœํ‘œํ˜„์‹์ธ๊ฐ€..? ํ•˜๊ณ  ํ—ค๋งธ๋‹ค.. split!!! split!!!!


7. http

http ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ  ์™€์„œ GET, POST ๋ฐฉ์‹์œผ๋กœ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋‚ ๋ ธ์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋”” ๋“ค์–ด๊ฐ”๋Š”์ง€ ์ฐ์–ด๋ณด๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค. ์•„์ง response ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ƒฅ ๋ญ˜ ํ•˜๋Š”๊ฑฐ๊ฒ ๋‹ค ๋ผ๋Š” ๋Š๋‚Œ๋งŒ ์žˆ๊ณ  ์™„๋ฒฝ ์ดํ•ด๋Š” ์•ˆ๋œ๋‹ค..!

// ๋ชจ๋“ˆ ํฌํ•จ.
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');


const server = http.createServer(function(req, res){
    console.log('server๊ฐ€ ๊ตฌ๋™์ค‘์ž…๋‹ˆ๋‹ค.');
    // get๊ณผ post ๋‘˜ ๋‹ค ํ…Œ์ŠคํŠธ
    if(req.method == 'GET') {
        fs.readFile('./test.html', 'utf8', (err, data) => {
            console.log(err);
            //writeHead๋Œ€์‹  setHeader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ type์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ
            res.writeHead(200, {'Content-Type':'text/html'});
            res.write(data);
            res.end();
        }) 
    } else if(req.method =='POST') {
        req.on('data', function(chunk) { 
            console.log(chunk.toString()); 
            let data = querystring.parse(chunk.toString()); 
            console.log(data);
            res.writeHead(200, {'Content-Type':'text/html'});
            res.write(`id : ${data.id_value}, pw : ${data.pw_value}`);
            res.end(); 
        }); 
    }
});

server.listen(8080);




3. ์ž‘์€ ํšŒ๊ณ 

  1. github ์ˆ˜์—… ๋งˆ๋ฌด๋ฆฌ๋ฅผ ํ–ˆ๋‹ค.

amend ๊ฐ€ ์•ฝ๊ฐ„ ๊ฐ์ด ์•ˆ์˜ค๋Š”๋ฐ.. ๊ธฐ๊ป ์ปค๋ฐ‹ํ•ด๋†จ๋”๋‹ˆ ์˜คํƒ€๊ฐ€ ์žˆ์–ด์„œ ๋‹ค์‹œ ์ปค๋ฐ‹ํ•ด์•ผ ํ•  ๋•Œ ์“ฐ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๊ทผ๋ฐ ๋˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด๋ž‘ ๊ณต๋™ ์ž‘์—… ์ค‘์ด๋ฉด ์•ˆ์“ฐ๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ํ•ด์„œ ๋˜ ์Œ..? ํ•˜๋Š” ์ค‘์ด๋‹ค. ํ˜ผ์ž ์“ธ ๋•Œ ์ž˜ ์จ๋ด์•ผ๊ฒ ๋‹ค. pull request ๊ฐ€ ๋ญ”์ง€ ํ•ญ์ƒ ๊ถ๊ธˆํ–ˆ์—ˆ์ง€๋งŒ ์ง„์งœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ์ผ๋‹จ ๋ฏธ๋ค˜์—ˆ๋Š”๋ฐ ์ด๊ฑธ ๋ฐฐ์šด๊ฒŒ ๋„ˆ๋ฌด ์ข‹๋‹ค.


  1. node.js ์ˆ˜์—…์„ ๋“ค์—ˆ๋‹ค.

์–ด ์ผ๋‹จ...! ์žฌ๋ฐŒ์—ˆ๋‹ค! ๋ญ”๊ฐ€ ์งง์€ ์ฝ”๋“œ๋กœ ์‹ค์ œ ์„œ๋น„์Šค์ฒ˜๋Ÿผ url์— ๊ฒฝ๋กœ ๋ถ™์œผ๋ฉด์„œ ํŽ˜์ด์ง€๋ฅผ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์‹ ๊ธฐํ–ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ํ•  ๋•Œ ๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ณด๋Ÿฌ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ ํ™•์ธํ•˜๋Ÿฌ ์ž ๊น์ž ๊น ๋“ค์–ด๊ฐ”์—ˆ๋Š”๋ฐ ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ํ”„๋ก ํŠธ๋‹จ๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ์งง์•„๋ณด์ด๋Š”๋ฐ ํŒ€์›๋“ค์ด ํ•ญ์ƒ ์˜ค๋ฅ˜ ๋•Œ๋ฌธ์— ํž˜๋“ค์–ดํ•˜๊ณ  ์žˆ์–ด์„œ ์–ด๋–ค ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๊ฑธ๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋Š”๋ฐ ์ด์ œ ์ดํ•ด๊ฐ€ ๊ฐ„๋‹ค!




profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€