๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HTTP 1.1 VS HTTP2.0/์กธ์—…๋…ผ๋ฌธ

[์กธ์—… ๋…ผ๋ฌธ] #1. node.js ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„, HTTP1.1/2.0

by ๋„์บ๋ฆฌ๐Ÿฑ 2021. 9. 16.
๋ฐ˜์‘ํ˜•

๊ณ„ํš

 

โ˜ป  ~ 9/19 ์ผ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ๋‚ด์šฉ

1. node.js ์„œ๋ฒ„ ๊ตฌ์ถ•

2. node.js ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„ ๊ตฌ์ถ•

3. ๋™์˜์ƒ(1080p, 720p, 480p)์ค€๋น„ →  https://blog.naver.com/yms099/220683890931

4. ๋™์˜์ƒ ์•„๋ฌด๊ฑฐ๋‚˜ h1, h2, h3 ๋ชจ๋‘ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ๋”

    โœฒ ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ๊ฐ„

    โœฒ TTFB

    โœฒ Queing & Stalled

5. ์„œ๋ก  ๋ฐ ์ด๋ก ์  ๋ฐฐ๊ฒฝ

 

 


 

Node.js ๊ณต๋ถ€ํ•˜๊ธฐ ๋ฐ ์‹คํ—˜ ํ™˜๊ฒฝ ์‚ฌ์ „ ์ค€๋น„ ํ•˜๊ธฐ

 

 

node.js ๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ๋ฐฉ์‹์˜ ServerFramework → ์ฆ‰ node.js์˜ ํ•ต์‹ฌ์€ "Event"๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

https://javafa.gitbooks.io/nodejs_server_basic/content/chapter7.html

 

1. node.js ์„œ๋ฒ„ ๊ตฌ์ถ• ํ•˜๊ธฐ ํŠœํ† ๋ฆฌ์–ผ

https://javafa.gitbooks.io/nodejs_server_basic/content/

 

2. Streaming Service ํŠœํ† ๋ฆฌ์–ผ

https://javafa.gitbooks.io/nodejs_server_basic/content/chapter11.html

 

โœ๏ธ
node.js ์˜ ๊ฐ•์ ์ด๋ž„ ์ˆ˜ ์žˆ๋Š” ๋Œ€์šฉ๋Ÿ‰ streaming ์ฒ˜๋ฆฌ.
node.js ๋Š” ์ด๋ฒคํŠธ Loop ๊ธฐ๋ฐ˜์˜ ๋น„๋™ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ๊ตฌ๊ฐ„๋ณ„๋กœ ์ž‘๊ฒŒ ๋‚˜๋ˆ„์–ด์„œ ์ฒ˜๋ฆฌ ํ•˜๋Š” ์ž‘์—…์— ๊ฐ•์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

 

โ“ fs.readFile( ) ์„ ์ด์šฉํ•ด์„œ ๋™์˜์ƒ ์„œ๋น„์Šค๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•  ๋•Œ, ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ 

: ์„œ๋ฒ„์—์„œ ํŒŒ์ผ์„ ๋‹ค ์ฝ์€ ํ›„์— ํŒŒ์ผ์ฝ๊ธฐ๊ฐ€ ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋กœ ํ•œ๋ฒˆ์— ์ „์†กํ•˜๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ๋Œ€๊ธฐ๊ฐ€ ๊ธธ์–ด์ง„๋‹ค.์šฉ๋Ÿ‰์ด ์ปค์งˆ์ˆ˜๋ก ํด๋ผ์ด์–ธํŠธ์˜ ๋Œ€๊ธฐ์‹œ๊ฐ„๋„ ๊ธธ์–ด์งˆ ๋ฟ๋”๋Ÿฌ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์„œ๋ฒ„์˜ ํšจ์œจ์ด ๋–จ์–ด์ง€๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒ.
์ด๋Ÿฐ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์ฒด๋ฅผ ๋‹ค ์ฝ๊ฑฐ๋‚˜ ์“ฐ์ง€ ์•Š์•„๋„ ์ค‘๊ฐ„์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ์ด stream ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ธํ„ฐ๋„ท์—์„œ ์„œ๋น„์Šค ๋˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ์˜คํ”ˆ์†Œ์Šค๋กœ ์ง€์›ํ•˜๋Š” streaming ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์ด ์žˆ์ง€๋งŒ node.js ๋Š” ์•„์ฃผ ์ ์€๋Ÿ‰์˜ ์ฝ”๋”ฉ๋งŒ์œผ๋กœ ์ด๋Ÿฐ streaming ์„œ๋น„์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

3. ํ•ด์ƒ๋„๋ณ„ ๋™์˜์ƒ ์ค€๋น„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

 360p, 1080p ๊ฐ™์€ ์˜์ƒ์œผ๋กœ ํ•ด์ƒ๋„๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ค€๋น„

https://www.resize-video.com/ko/

์œ„ ์‚ฌ์ดํŠธ์—์„œ ๋ฌด๋ฃŒ๋กœ ๊ฐ™์€ ์˜์ƒ์„ ํ•ด์ƒ๋„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

480p[853โ€Š×โ€Š480] → 14.7MB 

720p [1280โ€Š×โ€Š720] → 24.6MB

1080p[1920โ€Š×โ€Š1080] → 48.3MB

์˜์ƒ ๊ทœ๊ฒฉ์„ ํ†ตํ•ด ํ•ด์ƒ๋„ ํ™•์ธ

 

 

 

4.  ์ธก์ •ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„ ์ค€๋น„ ๋ฐ ํ…Œ์ŠคํŠธ   [ 1. ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ๊ฐ„ 2. TTFB 3. Queing&Installed ] 

http1.1 ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ

 

 

 

 

 4-1. HTTP1.1 (720p ์˜์ƒ test)

- ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ๊ฐ„ / ๋ฐ์ดํ„ฐ ์ „์†ก๋Ÿ‰ / TTFB/ Queing & Stalled ์„ธ๊ฐ€์ง€๋ฅผ ์•„๋ž˜ ์ฒ˜๋Ÿผ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

4-2. HTTP2 

http2 ๊ตฌ์ถ• : npm(Node Package Manager)์„ ํ†ตํ•ด 'spdy' ๋ชจ๋“ˆ์„ ํ†ตํ•ด HTTP/2 ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•œ๋‹ค.

https://github.com/spdy-http2/node-spdy

 

GitHub - spdy-http2/node-spdy: SPDY server on Node.js

SPDY server on Node.js. Contribute to spdy-http2/node-spdy development by creating an account on GitHub.

github.com

 

 

  1. npm ์ด๋ž€?  

    : Node Package Manager์˜ ์•ฝ์ž๋กœ, Node.js๋กœ ๋งŒ๋“ค์–ด์ง„ pakage(module)์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํˆด์ด์ž,  Node.js๋กœ ๋งŒ๋“ค์–ด       ์ง„ ๋ชจ๋“ˆ์„ ์›น์—์„œ ๋ฐ›์•„์„œ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.  ์˜ˆ์ „์—๋Š” npm์„ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผ ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ node.js         ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋นŒํŠธ์ธ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

 2. ssl (Secure Sockets Layer)

    : http1.1 ์—์„œ๋Š” ssl ์ด ์„ ํƒ ์‚ฌํ•ญ์ด์ง€๋งŒ, http2 ๋Š” https ์ฒ˜๋Ÿผ ssl์ด ํ•„์ˆ˜์ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ssl ์„ ์œ„ํ•ด ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›        ์•„์•ผ ํ•œ๋‹ค. ์•„๋ž˜ ์ฒจ๋ถ€ ์‚ฌ์ง„์„ ์ฐธ๊ณ ํ•œ๋‹ค. (Mac ํ™˜๊ฒฝ์ด๋‹ค.)

crt ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ํ•˜๊ธฐ
๋ฐœ๊ธ‰ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

 

    ์ด์ œ, http2_server.js ํŒŒ์ผ๊ณผhttp2_index.html ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ๋‹ค. 

   

    ์•„๋ž˜ ์„œ๋ฒ„ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๋กœ ํ™•์ธํ•˜๋ฉด ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค.

    HTTP2๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„  url scheme๋ฅผ https๋กœ ํ•˜๋ฉด ๋œ๋‹ค.

๋˜ํ•œ, NET::ERR_CERT_INVALID ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ์„ ์ฒ˜์Œ์— ๋ชป ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,
ํ•ด๋‹น ๋นˆํ™”๋ฉด์— ๋Œ€๊ณ  "thisisunsafe"๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์šฐํšŒ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

(์™ผ) ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ (์˜ค) h2 ํ”„๋กœํ† ์ฝœ๋กœ ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ

 

spdy๋ชจ๋“ˆ์ด h2 ํ”„๋กœํ† ์ฝœ ์—ญํ• ์„ ์ž˜ ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ–ˆ์œผ๋‹ˆ,

์ด์ œ, ๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋ฒ„๋กœ js ํŒŒ์ผ์„ ๋ฐ”๊พธ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ฉด h2 ํ”„๋กœํ† ์ฝœ๊ด€๋ จ ์‚ฌ์ „ ์ค€๋น„๋„ ๋์ด๋‚œ๋‹ค.

https://localhost:9007/html/http2_index.html

 

 

(์™ผ) ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘ ์ž˜ ๋˜๋Š” ๊ฒƒ ํ™•์ธ  (์˜ค) data count ๋กœ ํ™•์ธ

   

 

↓ ํ•„์š”ํ•  ๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ž‘์„ฑํ•œ Js ์ฝ”๋“œ ์ฒจ๋ถ€ .

http2_server.js

 

 

 

 

 

๐Ÿ”œ HTTP3 

- 3๋ชจ๋“ˆ, ์‚ฌ์šฉ, 3 ์„œ๋ฒ„ ๊ตฌ์ถ•

- ๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด์ธ proto-quic์„ ๋นŒ๋“œํ•˜์˜€๋‹ค. ์ด์— ์‚ฌ์šฉ๋œ QUIC ํ”„๋กœํ† ์ฝœ์€ QUIC-Version-39

 

http://slides.com/trivikram/nodejs-quic-http3-seattlejs#/17/0/1

https://www.yld.io/blog/quic-k-http-3/

https://www.nearform.com/blog/a-quic-update-for-node-js/

https://musclebear.tistory.com/51

https://github.com/google/proto-quic

 

 

์ฐธ๊ณ 

๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์ด ๋น„๋””์˜ค๋ฅผ ์‹œ์ฒญํ•˜๋Š” ํ™˜๊ฒฝ์ธ ๋ชจ๋ฐ”์ผ์—์„œ ์ฝ˜ํ…์ธ  ๋กœ๋“œ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ LTE ๋„คํŠธ์›Œํฌ ํ‰๊ท ์†๋„์— ๊ฐ€๊นŒ์šด 3,200Kbps๋กœ ๋Œ€์—ญํญ์„ ์ œํ•œํ•˜์—ฌ ์‹คํ—˜ํ•œ๋‹ค.

 

 


 

HTTP/3: Node.js can do QUIC | Trivikram Kamat | CascadiaJS 2019

https://www.youtube.com/watch?v=Kqgv4Xs8yDI 

 


์ฐธ๊ณ 

node.js express๋ฅผ ์ด์šฉํ•œ http2 ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ - ํฐ๋Œ

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jhc9639&logNo=221210720356

 

[JavaScript] npm์ด๋ž€? -Aldev

https://m.blog.naver.com/magnking/220961896609

 

๋ณด์•ˆ ์„œ๋ฒ„ SSL ์ด๋ž€?

https://www.comodossl.co.kr/certificate/What-is-SSL.aspx

 

Apache : CSR ์ƒ์„ฑ ๋ฐ SSL ์ธ์ฆ์„œ ์ ์šฉ

https://www.comodossl.co.kr/certificate/ssl-installation-guides/Apache-csr-crt.aspx

 

NET::ERR_CERT_INVALID ์šฐํšŒ ์ ‘์†ํ•˜๊ธฐ

https://velog.io/@jereint20/bypass-sslerrorpage

 

๊ตญ๊ฐ€ ์ฝ”๋“œ ์ฐธ๊ณ 

https://www.iban.com/country-codes

 

[Openssl] ์ธ์ฆ์„œ ํ‚ค ์ƒ์„ฑ  - ํ˜„๋ฌด๋ž‘ ๋‹ˆ๋‹ˆ

https://dreamlog.tistory.com/375

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€