์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Node.js] 4์žฅ http ๋ชจ๋“ˆ๋กœ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

22-23/22-23 Node.js

by dev otcroz 2022. 10. 6. 10:18

๋ณธ๋ฌธ

728x90

๐Ÿ” ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์•Œ์•„๋ณด์ž (a.k.a req, res)

ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์š”์ฒญ(request)์„ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต(response)๋ฅผ ๋ณด๋‚ธ๋‹ค.

๋”ฐ๋ผ์„œ, ์„œ๋ฒ„์—๋Š” ์š”์ฒญ์„ ๋ฐ›๋Š” ๋ถ€๋ถ„๊ณผ ๋ณด๋‚ด๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž

const http = require('http');

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>');
})
.listen(8080, () => {
    console.log('8080์—์„œ ๋Œ€๊ธฐ ์ค‘');
});

โœ… createServer

๋ฉ”์„œ๋“œ์— ์žˆ๋Š” ์ธ์ˆ˜๋กœ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋„ฃ๊ณ , ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์ฝœ๋ฐฑ ๋ถ€๋ถ„์„ ๋ณด๋ฉด request์˜ ์ค€๋ง์ธ req, response์˜ ์ค€๋ง์ธ res๊ฐ€ ์žˆ๋‹ค. (๋ฌผ๋ก  ๋ณ€๊ฒฝํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค!)

์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋“ฏ, req ๊ฐ์ฒด๋Š” ์š”์ฒญ์— ๊ด€ํ•œ, res ๊ฐ์ฒด๋Š” ์‘๋‹ต์— ๊ด€ํ•œ ์ •๋ณด๋“ค์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

 

โœ… writeHead

์‘๋‹ต์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” 200, ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ฝ˜ํ…์ธ ์˜ ํ˜•์‹์„ ์•Œ๋ฆฌ๊ณ  ์žˆ๋‹ค.

์ด ์ •๋ณด๊ฐ€ ๊ธฐ๋ก๋˜๋Š” ๊ณณ์ด ๋ฐ”๋กœ ํ—ค๋”(Header)์ด๋‹ค.

 

โœ… write

์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ์ด๋‹ค. ๋ฌธ์ž์—ด, ๋ฒ„ํผ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒƒ๋“ค์„ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. 

์ด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๋ณธ๋ฌธ(Body)์ด๋‹ค.

 

โœ… end

์‘๋‹ต์„ ์ข…๋ฃŒํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ธ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์ธ์ˆ˜๋„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ์ข…๋ฃŒํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์‘๋‹ต ๋‚ด์šฉ์„ ๋ฐ›์•„์„œ ๋ Œ๋”๋งํ•œ๋‹ค.

 

โœ… listen

์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ์— ๊ณต๊ฐœํ•  ํฌํŠธ ๋ฒˆํ˜ธ์™€ ํฌํŠธ ์—ฐ๊ฒฐ ํ›„ ์‹คํ–‰๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋„ฃ๋Š”๋‹ค.

๐Ÿ” ๊ทธ ์œ ๋ช…ํ•œ REST์™€ ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•ด ๋ณด์ž

REST. REpresentational State Transfer์˜ ์ค„์ž„๋ง์ด๋‹ค. ์„œ๋ฒ„์˜ ์ž์›์„ ์ •์˜ํ•˜๊ณ , ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ธฐ๋„ ํ•˜๋‹ค. ์ฃผ์†Œ ์™ธ์—๋„ HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, GET๊ณผ POST ๋“ฑ์˜ ๋ฉ”์„œ๋„ ์™ธ์—๋„ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

๐Ÿ“Œ ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜ ์•Œ์•„๋ณด๊ธฐ

GET : ์„œ๋ฒ„ ์ž์›์„ ๊ฐ€์ ธ์˜ค๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

POST : ์„œ๋ฒ„์— ์ž์›์„ ์ƒˆ๋กœ ๋“ฑ๋กํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

PUT : ์„œ๋ฒ„์˜ ์ž์›์„ ์š”์ฒญ์— ๋“ค์–ด ์žˆ๋Š” ์ž์›์œผ๋กœ ์น˜ํ™˜ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

PATCH : ์„œ๋ฒ„ ์ž์›์„ ์ผ๋ถ€๋งŒ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

DELETE : ์„œ๋ฒ„์˜ ์ž์›์„ ์‚ญ์ œํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

OPTION : ์š”์ฒญ์„ ํ•˜๊ธฐ ์ „, ํ†ต์‹  ์˜ต์…˜์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

โœ… RESTful?

REST๋ฅผ ๋”ฐ๋ฅด๋Š” ์„œ๋ฒ„๋ฅผ RESTfulํ•˜๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ์ฃผ์†Œ ๊ตฌ์กฐ๋ฅผ ์ฒด๊ณ„ํ™”ํ•ด ๋‘” ๋’ค, ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•˜๋ฉด ์ฒด๊ณ„์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

if (req.method === 'GET') {
      if (req.url === '/') {

์ฝ”๋“œ๋ฅผ ์ผ๋ถ€๋งŒ ๋ฐœ์ทŒํ•ด ์™”๋‹ค. ์ฝ”๋“œ ์ค‘, req.method๋ผ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

โœ… req.method

์ด ๋ถ€๋ถ„์—์„œ HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์žˆ๋‹ค. GET์ผ ๊ฒฝ์šฐ, ๋‹ค์‹œ req.url๋กœ ์š”์ฒญ ์ฃผ์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•ด ์ค€๋‹ค. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜, GET ๋ฉ”์„œ๋“œ ์š”์ฒญ์ด ์•„๋‹ ๊ฒฝ์šฐ 404 ์—๋Ÿฌ๋ฅผ ์ „์†กํ•œ๋‹ค.

 

โœ… req.on()

POST, PUT ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ req.on('data'), req.on('end')์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์š”์ฒญ์˜ ๋ณธ๋ฌธ์— ๋“ค์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด๋‹ค. req์™€ res๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๊ฐ๊ฐ readStream๊ณผ writeStream์œผ๋กœ ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์š”์ฒญ/์‘๋‹ต์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ŠคํŠธ๋ฆผ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค. on์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ, ์ด๋ฒคํŠธ๋„ ๋‹ฌ๋ ค์žˆ๋‹ค. 

๋‹จ, ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— JSON.parse๋ฅผ ์ด์šฉํ•ด JSON์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์ž.

 

๐Ÿ” ์„œ๋ฒ„๊ฐ€ ๊ตฌ์šด ์ฟ ํ‚ค์™€ ์„ธ์…˜

๐Ÿ“Œ ์ฟ ํ‚ค?

์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ•  ๋•Œ ๊ฐ™์ด ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์œ ํšจ ๊ธฐ๊ฐ„์ด ์žˆ์œผ๋ฉฐ, ๋‹จ์ˆœํ•œ ํ‚ค-๊ฐ’์˜ ์Œ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ฟ ํ‚ค๊ฐ€ ์žˆ๋‹ค๋ฉด ์ž๋™์œผ๋กœ ๋™๋ด‰ํ•˜์—ฌ ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , ์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ผ ๋•Œ๋งŒ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

์ฟ ํ‚ค๋Š” ์š”์ฒญ์˜ ํ—ค๋”์— ๋‹ด๊ฒจ ์ „์†ก๋˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์‘๋‹ต์˜ ํ—ค๋”(Set-Cookie)์— ๋”ฐ๋ผ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

โœ… ์ฟ ํ‚ค๊ฐ€ ์œ ์ถœํ•œ ๋‚˜์˜ ๊ฐœ์ธ์ •๋ณด

์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์ถ”์ ํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐœ์ธ์ •๋ณด ์œ ์ถœ์˜ ์œ„ํ—˜์ด ์žˆ๊ธฐ์— ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜์ง€ ์•Š๋„๋ก ๊ถŒ๊ณ ํ•˜๊ณ  ์žˆ๊ณ , ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋„ ๊ทธ๊ฒƒ์ด๋‹ค.

 

๐Ÿ“Œ ์ฟ ํ‚ค!

์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•  ๋•Œ๋Š” ๊ฐ์ข… ์˜ต์…˜์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ์˜ต์…˜ ์‚ฌ์ด์— ์„ธ๋ฏธ์ฝœ๋ก ์„ ์จ์„œ ๊ตฌ๋ถ„ํ•˜๋ฉด ๋œ๋‹ค. ์ฟ ํ‚ค์— ๋“ค์–ด๊ฐ€์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ธ€์ž๋กœ ํ•œ๊ธ€๊ณผ ์ค„๋ฐ”๊ฟˆ์ด ์žˆ๋‹ค. ํ•œ๊ธ€์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” encodeURIComponent๋กœ ๊ฐ์‹ธ์„œ ๋„ฃ๋Š”๋‹ค.

 

์ฟ ํ‚ค๋ช…=์ฟ ํ‚ค๊ฐ’ : ๊ธฐ๋ณธ์ ์ธ ์ฟ ํ‚ค์˜ ๊ฐ’

Expires=๋‚ ์งœ : ๋งŒ๋ฃŒ ๊ธฐํ•œ

Max-age=์ดˆ : ๋‚ ์งœ ๋Œ€์‹  ์ดˆ๋ฅผ ์ž…๋ ฅ

Domain=๋„๋ฉ”์ธ๋ช… : ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋  ๋„๋ฉ”์ธ์„ ํŠน์ •

Path=URL : ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋  URL์„ ํŠน์ •

Secure : HTTPS์ผ ๊ฒฝ์šฐ์—๋งŒ ์ฟ ํ‚ค ์ „์†ก

HttpOnly : ์„ค์ • ์‹œ JS์—์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ, ์ฟ ํ‚ค ์กฐ์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

 

๐Ÿ” https์™€ http2

๐Ÿ“Œ์•„๋‹ˆ, http2๊ฐ€ ๋ญ”๋ฐ?

2015๋…„ ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ‘œ๋œ HTTP/1.1์˜ ํ›„์† ๋ฒ„์ „์ด๋‹ค. (์šฐ๋ฆฌ๊ฐ€ http2๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” 2022๋…„ 10์›”, ๋†€๋ž๊ฒŒ๋„ 2022๋…„ 6์›”์— HTTP/3์ด ๊ณต๊ฐœ๋˜์—ˆ๋‹ค!)

HTTP1์€ ํ…์ŠคํŠธ ์œ„์ฃผ์˜ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ด์—ˆ๋‹ค. ์›น ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ๊ณ ์šฉ๋Ÿ‰์˜ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์ผ์ด ๋งŽ์•„์กŒ๊ณ , ์ด์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ HTTP๊ฐ€ ํ•„์š”ํ•ด์กŒ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ œ์ž‘๋œ ๊ฒƒ์ด HTTP2์ด๋‹ค.

 

โœ… ๊ทธ๋Ÿผ http3์€ ๋ญ”๋ฐ?

HTTP์˜ 3๋ฒˆ์งธ ๋ฉ”์ด์ € ๋ฒ„์ „์œผ๋กœ, HTTP1๊ณผ 2๊ฐ€ TCP๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ HTTP3์€ UDP ๊ธฐ๋ฐ˜์˜ QUIC ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜์—ฌ ํ†ต์‹ ํ•œ๋‹ค.

ํฐ ์žฅ์  3๊ฐ€์ง€๋Š”, Zero RTT(Round Trip Time), ํŒจํ‚ท ์†์‹ค์— ๋Œ€ํ•œ ๋น ๋ฅธ ๋Œ€์‘, ์‚ฌ์šฉ์ž IP๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ์›น ํ™˜๊ฒฝ์—์„œ๋Š” HTTP/2์™€ HTTP/3์˜ ์ฐจ์ด๊ฐ€ ํฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋‚˜, ๋™์˜์ƒ ์„œ๋น„์Šค ๋“ฑ์—์„œ๋Š” ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค.

์ด ์ •๋„๋กœ๋งŒ ์•Œ์•„๋ณด๊ณ , ๋‹ค์‹œ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€์ž.

๐Ÿ“Œ์„œ๋ฒ„์— ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ

์šฐ๋ฆฌ๋Š” https ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๋งŒํผ, https๋Š” ์ธ์ฆ๋ฐ›์€ ์‚ฌ์šฉ์ž๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

โœ… ๋…ธ๋“œ์˜ http2 ๋ชจ๋“ˆ

์€ SSL ์•”ํ˜ธํ™”์™€ ๋”๋ถˆ์–ด ์ตœ์„  http ํ”„๋กœํ† ์ฝœ์ธ http/2๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. https ๋ชจ๋“ˆ๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜, https๋ฅผ http2๋กœ, createServer๋ฅผ createSecureServer ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ” cluster!

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

 

โœ… ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ์ ์ด๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋งˆ์Šคํ„ฐ ํ”„๋กœ์„ธ์Šค์™€ ์›Œ์ปค ํ”„๋กœ์„ธ์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, ๋งˆ์Šคํ„ฐ ํ”„๋กœ์„ธ์Šค๋Š” CPU ๊ฐœ์ˆ˜๋งŒํผ ์›Œ์ปค ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๋งŒ๋“ค์–ด์ง„ ์›Œ์ปค ํ”„๋กœ์„ธ์Šค์— ์š”์ฒญ์„ ๋ถ„๋ฐฐํ•œ๋‹ค.

 

์ง์ ‘ cluster ๋ชจ๋“ˆ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์‹ค๋ฌด์—์„œ๋Š” pm2์˜ ๋ชจ๋“ˆ๋กœ cluster์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. pm2๋Š” ๋‚˜์ค‘์—, 15์žฅ์—์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

โœ ๋นˆ์นธ ๋ฌธ์ œ

1. createServer๋Š” ์ธ์ˆ˜๋กœ ___๊ณผ ___์„ ๋„ฃ๋Š”๋ฐ, ์ด๋Š” ๊ฐ๊ฐ ___๊ณผ ___์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

2. Header์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ____, Body์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ____์ด๋‹ค.

3. REST๋ฅผ ๋”ฐ๋ฅด๋Š” ์„œ๋ฒ„๋ฅผ ____ํ•˜๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

4. req.method์—์„œ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ______์ด๋‹ค.

5. ์ฟ ํ‚ค์—์„œ ํ•œ๊ธ€์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ___________๋กœ ๊ฐ์‹ธ์„œ ๋„ฃ๋Š”๋‹ค.

6. ๋…ธ๋“œ์—์„œ http2 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ, https ๋ชจ๋“ˆ์—์„œ ____๋ฅผ http2๋กœ, ____๋ฅผ createSecureServer ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

7. ํด๋Ÿฌ์Šคํ„ฐ๋Š” ___๊ฐ€ ์•„๋‹ˆ๋ผ ___๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“ ์ฝ”๋“œ ๋ฌธ์ œ

1. 8083 ํฌํŠธ๋กœ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์‹œ์˜ค. ๋‚ด์šฉ์œผ๋กœ๋Š” <h1>Hello Undefined!</h1>, <p>We are Undefined!</p>๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ํ•˜์‹œ์˜ค.

2. method๊ฐ€ GET์„ ์›ํ•˜๊ณ , url์ด /์ผ ๋•Œ "./silsub.html"์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

โœ ๋นˆ์นธ ๋ฌธ์ œ ๋‹ต

๋”๋ณด๊ธฐ

1. req, res ์š”์ฒญ, ์‘๋‹ต
2. writeHead, write
3. RESTful
4. HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ
5. encodeURIComponent
6. https, createServer
7. 
์Šค๋ ˆ๋“œ, ํ”„๋กœ์„ธ์Šค

๐Ÿ“ ์ฝ”๋“œ ๋ฌธ์ œ ๋‹ต

๋”๋ณด๊ธฐ

1.

const http = require('http');

http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
    res.write('<h1>Hello Undefined!</h1>');
    res.end('<p>We are Undefined!</p>');
})
.listen(8083, () => {
    console.log('8083์—์„œ ๋Œ€๊ธฐ ์ค‘');
});

2. 

if (req.method === "GET") {
	if (req.url === "/") {
		const data = await fs.readfile('./silsub.html');
		res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
		res.end(data);
}}

 

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ