๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Daily/Today I Learned

210205_TIL

by joooing 2021. 2. 6.
๋ฐ˜์‘ํ˜•

๐ŸŽ ์˜ค๋Š˜ ํ•œ ์ผ


โœ”๏ธ node.js๋กœ ์›น์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ
node.js์—์„œ http ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด ์›น์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. HTTP ํŠธ๋žœ์žญ์…˜ ํ•ด๋ถ€๋ผ๋Š” ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ์–ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ •๋…ํ•ด๋ณด๊ณ  ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผ์ณ๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค. ์ผ๋‹จ ๋ฌด์ž‘์ • ๋”ฐ๋ผํ•ด๋ณด๊ณ  ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๋‹ค ๋ณด๋‹ˆ๊นŒ ๊ธ€๋กœ ๋ณผ ๋•Œ๋ณด๋‹ค ์–ด๋–ค์‹์œผ๋กœ ๋Œ์•„๊ฐ€๋Š”๊ฑด์ง€, request๊ฐ์ฒด์™€ response ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๋” ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.  ์›น์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ , ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„์—์„œ ๋ณด๋‚ธ POST ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด body๋ถ€๋ถ„์„ ์ ์ ˆํžˆ ๋ณ€ํ™˜ํ•ด ๋‹ค์‹œ body์— ๋‹ด์•„ ์‘๋‹ต์„ ๋Œ๋ ค์ฃผ๋Š”๊ฒŒ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ์˜€๋Š”๋ฐ OPTIONS๋ฉ”์„œ๋“œ์— ๋”ฐ๋ฅธ(preflight request) ์‘๋‹ต๋ถ€๋ถ„๋„ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด๋ณด๋‹ˆ๊นŒ ๊ฐœ๋…์œผ๋กœ๋งŒ ๋ด์„œ ๋ญ”๊ฐ€ ์ถ”์ƒ์ ์œผ๋กœ ๋Š๊ปด์กŒ๋˜ CORS๋ฅผ ๊ตฌ์ฒด์ ์ด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

โœ”๏ธ Toy - power 
๋‘ ์ˆ˜(๋ฐ‘, ์ง€์ˆ˜)๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ๊ฑฐ๋“ญ์ œ๊ณฑ์„ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ์กฐ๊ฑด์ด ์—ฌ๋Ÿฌ๊ฐœ ๋ถ™์–ด์žˆ์—ˆ๋Š”๋ฐ 1) Math.pow, **์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๊ธˆ์ง€, 2)์‹œ๊ฐ„๋ณต์žก๋„ O(logN) 3) ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ปดํ“จํ„ฐ๋กœ ํ‘œ์‹œ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ๋„˜์ง€ ์•Š์„ ๊ฒƒ ์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€์˜€๋Š”๋ฐ ๋””๋ฒ„๊น…ํ•ด๋ณด๋‹ˆ ์ค‘๊ฐ„์— ํ•œ๋ฒˆ ํ‘œ์‹œ ๊ฐ€๋Šฅ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€์„œ์ธ์ง€ ๋งˆ์ง€๋ง‰ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šคํ•˜๋‚˜๊ฐ€ ํ†ต๊ณผ๋˜์งˆ ์•Š์•˜๋‹ค.. ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ†ต๊ณผํ•ด๋ณด๊ณ ์‹ถ์—ˆ๋Š”๋ฐ ๋‚ด์ผ ์ข€ ๋” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.

 

๐ŸŽ ๊ธฐ์–ตํ•  ๊ฒƒ


โœ”๏ธ http ๋ชจ๋“ˆ
createServer : ์›น ์„œ๋ฒ„ ๊ฐ์ฒด ์ƒ์„ฑ (์š”์ฒญ์ด ์˜ฌ๋–„๋งˆ๋‹ค ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋จ)
listen() : ์‹ค์ œ ์š”์ฒญ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ
on() : ์ด๋ฒคํŠธ ๋“ฑ๋ก
data, end : ์ด๋ฒคํŠธ (์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ ๊ฐ€๋Šฅ)
writeHead() : ํ—ค๋”์ž‘์„ฑ (setHeader + statusCode)
end() : response body ์ „์†ก

 

// ์ด์ •๋ฆฌ
const http = require('http');

http.createServer((request, response) => {
  let body = [];
  request.on('error', (err) => {
    console.error(err);
  }).on('data', (chunk) => {
    body.push(chunk);
  }).on('end', () => {
    body = Buffer.concat(body).toString();
    // ์›ํ•˜๋Š” ์‘๋‹ต์ฒ˜๋ฆฌ
    response.on('error', (err) => {
      console.error(err);
    });
    response.writeHead(200, {'Content-Type': 'application/json'})
  });
}).listen(PORT);

 

๐ŸŽ ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ


โœ”๏ธ OPTIOINS ์š”์ฒญ
OPTIONS ์š”์ฒญ์—์„œ๋Š” ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ์„œ๋ฒ„์—์„œ ์ œ๊ณต ๊ฐ€๋Šฅํ•œ ์˜ต์…˜ ์ •๋ณด๋งŒ ๋‚ด๋ ค์ฃผ๋ฉด์„œ ๋ฌด์กฐ๊ฑด 2XX ์ƒํƒœ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ๋ผ๊ณ ํ•˜๋Š”๋ฐ mdn ๋ฌธ์„œ์—๋Š” ์„ฑ๊ณตํ•œ response๋Š” body๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ์ ํ˜€์žˆ์–ด์„œ, ์–ด๋–ค ๊ฒฝ์šฐ์— body์— ์ฝ˜ํ…์ธ ๊ฐ€ ๋‹ด๊ธฐ๋Š” ๊ฑด์ง€ ์ข€ ๋” ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.

โœ”๏ธ serve ์œ ํ‹ธ๋ฆฌํ‹ฐ

 

๋ฐ˜์‘ํ˜•

'Daily > Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

210207_TIL  (0) 2021.02.08
210206_TIL  (2) 2021.02.07
210204_TIL  (0) 2021.02.05
210203_TIL  (0) 2021.02.04
210202_TIL  (0) 2021.02.03

๋Œ“๊ธ€