02
16

์ฑ…์„ ์ฝ๊ณ  ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ƒํƒœ์ฝ”๋“œ

HTTP ์ƒํƒœ์ฝ”๋“œ๋Š” ์‘๋‹ต๋ฉ”์‹œ์ง€์— ๋ถ™์–ด ๋‚˜์˜ค๋Š” ๊ฒƒ์œผ๋กœ 100,200,300,400,500 ์ด๋ ‡๊ฒŒ ํฌ๊ฒŒ ๋‹ค์„ฏ ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

  • 100๋ฒˆ๋Œ€: ์ •๋ณด์„ฑ ์ƒํƒœ์ฝ”๋“œ
    • ์ •๋ณด์„ฑ ์ƒํƒœ์ฝ”๋“œ์ด๊ณ  HTTP/1.1์— ๋„์ž…๋˜์—ˆ๋‹ค. (์ด์ „ ๋ฒ„์ „์—์„œ ์ธ์‹ํ•˜์ง€ ๋ชปํ•œ๋‹ค.)
    • ๊ทธ ์ค‘ 100 ์€ Continue๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— entity ๋ณธ๋ฌธ์„ ๋ณด๋‚ด๊ธฐ ์ „์— ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ๋ณธ๋ฌธ์„ ๋ฐ›์•„ ๋“ค์ผ๊ฑด์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋ž˜๊ทธ ๊ฐ™์€ ์šฉ๋„๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๋Š” 100-continue Expectํ—ค๋”๋ฅผ ๋‹ด์•„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ๋Š” ์—†์œผ๋‹ˆ ํƒ€์ž„์•„์›ƒ ์‹œ ๊ทธ๋ƒฅ ๋ณธ๋ฌธ์„ ๋ณด๋‚ด์•ผํ•œ๋‹ค. 
    • ์„œ๋ฒ„๋Š” 100-continue Expect๋ฅผ ์š”์ฒญํ•œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋งŒ 100์„ ๋ณด๋‚ด์•ผ๋˜๊ณ  ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ๋ณด๋‚ด๋ฉด ์•ˆ๋œ๋‹ค.
    • ๋งŒ์•ฝ 100-continue Expect ์š”์ฒญ์„ ๋ฐ›๊ณ , ์„œ๋ฒ„๊ฐ€ ๋ณธ๋ฌธ์„ ์ฝ๊ธฐ์ „์— ์š”์ฒญ์ด ๋Š์–ด์กŒ์„ ๊ฒฝ์šฐ ์„œ๋ฒ„์—์„œ ์ผ๋ฐฉ์ ์œผ๋กœ ์‘๋‹ต์„ ๋ณด๋‚ด๊ณ  ์ปค๋„ฅ์…˜์„ ๋‹ซ์œผ๋ฉด ์•ˆ๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌดํ•œ๋Œ€๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

  • 200๋ฒˆ๋Œ€: ์„ฑ๊ณต ์ƒํƒœ ์ฝ”๋“œ
    • 200: OK
    • 201: Created (PUT๊ณผ ๊ฐ™์€ ์š”์ฒญ์˜ ์‘๋‹ต์œผ๋กœ)
    • 202: Accepted (์š”์ฒญ์„ ๋ฐ›์•„๋“ค์˜€์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ–ˆ๋Š”์ง€๋Š” ์•Œ ์ˆ˜ ์—†์Œ)
    • 203: ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ์•ˆ๋์„ ๊ฒฝ์šฐ
    • 204: No Content - Entity ๋ณธ๋ฌธ์ด ์—†๋Š” ์‘๋‹ต์œผ๋กœ ์ƒˆ๋กœ๊ณ ์นจ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    • 205: Reset Content ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ํ˜„์žฌ Html form์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์„ ๋ฆฌ์…‹ํ•˜๋ผ๊ณ  ์ง€์‹œ
    • 206: ๋ถ€๋ถ„/๋ฒ”์œ„ ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ

  • 300๋ฒˆ๋Œ€: ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์ƒํƒœ์ฝ”๋“œ
    ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ์ƒํƒœ์ฝ”๋“œ, ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์‘๋‹ต๋„ ๋‹ด๋‹นํ•˜์ง€๋งŒ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
    • 300: Mutiple Choices -> ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก๊ณผ ํ•จ๊ป˜ ๋ฐ˜ํ™˜.
    • 301: ์š”์ฒญํ•œ URL์ด ์˜๊ตฌ์ ์œผ๋กœ ์˜ฎ๊ฒจ์กŒ์„๋•Œ. ์‘๋‹ต์€ location ํ—ค๋”์— ํ˜„์žฌ ๋ฆฌ์†Œ์Šค๊ฐ€ ์กด์žฌ ์ค‘์ธ URL์„ ํฌํ•จํ•ด์•ผ๋œ๋‹ค. 
    • 302: 301์ด๋ž‘ ๋น„์Šท์ง€๋งŒ ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•ด์•ผ๋˜๊ณ , ์ดํ›„ ์š”์ฒญ์—์„œ๋Š” ์›๋ž˜ URL์„ ์ด์šฉํ•ด ์ ‘๊ทผํ•ด์•ผ๋œ๋‹ค.
    • 303(HTTP/1.1๋ถ€ํ„ฐ 302๋Œ€์‹  ์‚ฌ์šฉ): ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค๋ฅธ URL์—์„œ ๊ฐ€์ ธ์™€์•ผํ•  ๋•Œ ์‘๋‹ต. -> POST ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ ์ ˆํ•˜๋‹ค
    • 304: Not Modified ๋กœ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ์—†์„ ๋•Œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • 305: Use Proxy - ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ”„๋ฝ์‹œ๋ฅผ ๊ฑฐ์ณ ์ ‘๊ทผ๋˜์•ผํ•จ์„ ์˜๋ฏธ
    • 307 (HTTP/1.1๋ถ€ํ„ฐ 302๋Œ€์‹  ์‚ฌ์šฉ) : Temporary Redirect == 302

  • 400๋ฒˆ๋Œ€: ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ ์ƒํƒœ์ฝ”๋“œ
    • 400: Bad Request ์ž˜๋ชป๋œ ์š”์ฒญ
    • 401: Unauthorized ๊ถŒํ•œ์ด ์—†๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”์ฒญ - ์ธ์ฆ์ •๋ณด๊ฐ€ ํ•„์š”ํ•จ
    • 403: Forbidden ์„œ๋ฒ„๊ฐ€ ๊ฑฐ์ ˆํ•œ ์š”์ฒญ
    • 404: Not found ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
    • 405: ๋ฉ”์„œ๋“œ๊ฐ€ ์ง€์›๋˜์ง€์•Š์Œ
    • 406: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์—†๋Š” ๋ฆฌ์†Œ์Šค์ผ ๊ฒฝ์šฐ
    • 407: ํ”„๋ฝ์‹œ๋ฅผ ๊ฑฐ์ณ์„œ ์ธ์ฆํ•ด์•ผ๋  ๋•Œ
    • 408: ํƒ€์ž„์•„์›ƒ(์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆด ๋•Œ)
    • 409: ์ถฉ๋Œ ์šฐ๋ ค
    • 410: ์˜ˆ์ „์—๋Š” ๊ฐ–๊ณ ์žˆ๋˜ ๋ฆฌ์†Œ์Šค์ธ๋ฐ ์ง€๊ธˆ์€ ์—†๋‹ค.
    • 411: Content-Length ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ๋œ๋‹ค
    • 412: ์š”์ฒญ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ•  ๋•Œ 
    • 413: ์š”์ฒญ ๋ณธ๋ฌธํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํผ
    • 414: ์š”์ฒญ URI ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํผ
    • 415: ์„œ๋ฒ„๊ฐ€ ์•Œ์•„๋“ค์„ ์ˆ˜ ์—†๋Š” entity๊ฐ€ ์š”์ฒญ์— ํฌํ•จ๋œ๋‹ค.
    • 416: ๋ฆฌ์†Œ์Šค ์š”์ฒญ๋ฒ”์œ„๊ฐ€ ์ž˜๋ชป๋๋‹ค.
    • 417: Expect ์š”์ฒญํ—ค๋”์— ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•  ์ˆ˜ ์—†์„ ๊ฒฝ์šฐ

  • 500๋ฒˆ๋Œ€: ์„œ๋ฒ„ ์—๋Ÿฌ ์ƒํƒœ์ฝ”๋“œ
    ํ”„๋ฝ์‹œ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ ์„œ๋ฒ„์™€ ๋Œ€ํ™”๋ฅผ ์‹œ๋„ํ•  ๋•Œ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด 500๋ฒˆ๋Œ€ ์—๋Ÿฌ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • 500: Internal Server Error ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค
    • 501: Not Implemented ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์š”์ฒญ์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค
    • 502: Bad Gateway ์š”์ฒญ ์‘๋‹ต์—ฐ์‡„๋ฅผ ํƒ€๊ณ  ๋“ค์–ด๊ฐˆ ๋•Œ ์ ‘์†์ด ์•ˆ๋  ๊ฒฝ์šฐ
    • 503: Service Unavailable ํ˜„์žฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์ค„ ์ˆ˜ ์—†์ง€๋งŒ ๋‚˜์ค‘์—๋Š” ๊ฐ€๋Šฅํ•จ. ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ์„œ๋ฒ„๊ฐ€ Retry-Afterํ—ค๋”๋ฅผ ํฌํ•จ์‹œ์ผœ ์‘๋‹ตํ•˜๋ฉด ์–ธ์ œ ๊ทธ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
    • 504: Gateway Timeout - 408์ด๋ž‘ ๊ฐ™์€๋ฐ, ํ”„๋ฝ์‹œ๋‚˜ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋‹ค ๋ฐœ์ƒํ•œ 408์„ 504๋กœ ์‘๋‹ตํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.
    • 505: HTTP ๋ฒ„์ „์ด ์•ˆ๋งž๋Š”๋‹ค.

ํ—ค๋”

์–‘์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ MDN ๋ฌธ์„œ๋ฅผ ์ผ๋‹จ ์ฒจ๋ถ€ํ•˜๊ฒ ๋‹ค.

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers

 

HTTP ํ—ค๋” - HTTP | MDN

HTTP ํ—ค๋”๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์œผ๋กœ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. HTTP ํ—ค๋”๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ์ด๋ฆ„๊ณผ ์ฝœ๋ก  ':' ๋‹ค์Œ์— ์˜ค๋Š” ๊ฐ’(์ค„ ๋ฐ”๊ฟˆ ์—†์ด)์œผ๋กœ ์ด๋ฃจ

developer.mozilla.org

ํ—ค๋”๋Š” ํฌ๊ฒŒ ๋‹ค์„ฏ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

  • ์ผ๋ฐ˜ ํ—ค๋” - ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ์‚ฌ์šฉํ•œ๋‹ค. 
    • ์ผ๋ฐ˜ ์บ์‹ฑ ํ—ค๋” - HTTP/1.0๋•Œ๋ถ€ํ„ฐ ์ƒ๊ฒจ์„œ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์—์„œ ์บ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ—ค๋”๋‹ค.
  • ์š”์ฒญ ํ—ค๋” - ์š”์ฒญ ๋ฉ”์‹œ์ง€์—์„œ๋งŒ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • Accept ๊ด€๋ จํ—ค๋” (์„œ๋ฒ„๊ฐ€ ํ•„ํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋„๋ก)
    • ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋” - Expect ํ—ค๋”๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค. Range๋„ ์—ฌ๊ธฐ ๋“ค์–ด์žˆ์Œ.
    • ์š”์ฒญ๋ณด์•ˆ ํ—ค๋” - Cookie, Authorization ์ด ์—ฌ๊ธฐ ์žˆ๋‹ค. JWT ํ† ํฐ์„ ์ด์šฉํ•œ ํ†ต์‹  ํ•  ๋•Œ ์จ๋ดค๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค.
    • ํ”„๋ฝ์‹œ ์š”์ฒญ ํ—ค๋”
  • ์‘๋‹ต ํ—ค๋” - ์‘๋‹ต ๋ฉ”์‹œ์ง€์—์„œ๋งŒ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • ํ˜‘์ƒ ํ—ค๋” - ๋‹ค๊ตญ์–ด ์ง€์›์‹œ ์–ด๋–ค ์–ธ์–ด๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ง€ ํ˜‘์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
    • ์‘๋‹ต๋ณด์•ˆ ํ—ค๋” - ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” Set-Cookie๊ฐ€ ์—ฌ๊ธฐ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ž„์‹œ ๋ฐฉํŽธ์ด๋ผ ๋‚˜์ค‘์—๋Š” Session Cookie๋กœ ๋“ค์–ด๊ฐ€์•ผ๋œ๋‹ค.
  • Entity ํ—ค๋” - Entity ๋ณธ๋ฌธ์— ๋Œ€ํ•œ ํ—ค๋”๋กœ Content-Type, Content-Length๊ฐ™์€๊ฒŒ ์—ฌ๊ธฐ ์†ํ•œ๋‹ค. 
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์—”ํ„ฐํ‹ฐ ํ—ค๋”๋Š” ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์ž์—๊ฒŒ ํ˜„์žฌ ๋‚ด๊ฐ€ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š” ๊ฒŒ ๋ญ”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ์ฝ˜ํ…์ธ  ํ—ค๋” - ์ ‘๋‘์‚ฌ๊ฐ€ Content์ธ ํ—ค๋”๋“ค์ด ์—ฌ๊ธฐ ์†ํ•œ๋‹ค.
    • ์—”ํ„ฐํ‹ฐ ์บ์‹ฑ ํ—ค๋” - ์ผ๋ฐ˜ ์บ์‹ฑ ํ—ค๋”๊ฐ€ ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์บ์‹œํ•ด์•ผํ•˜๋Š” ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฉด, ์ด๊ฑด ์—”ํ„ฐํ‹ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋‹ค. ์—”ํ„ฐํ‹ฐ๊ฐ€ ์บ์‹ฑ๋œ ์ƒํƒœ๋กœ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • ํ™•์žฅ ํ—ค๋” - ์•„์ง HTTP ๋ช…์„ธ์—๋Š” ์ถ”๊ฐ€๋˜์ง€์•Š์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋น„ํ‘œ์ค€ ํ—ค๋”

์ปค๋„ฅ์…˜ ๊ด€๋ฆฌ

TCP ์ปค๋„ฅ์…˜

HTTP ํ†ต์‹ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์— ์œ„์น˜ํ•˜๋ฉฐ ์ปดํ“จํ„ฐ๋‚˜ ๋„คํŠธ์›Œํฌ๊ฐ€ ๊ณ ์žฅ๋‚˜๋Š” ์ด์Šˆ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ฉ”์‹œ์ง€ ์™œ๊ณก์ด๋‚˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋Š” ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ํ†ต์‹ ์ด๋‹ค. ์ด๋Ÿฐ ํ†ต์‹ ์€ TCP ์ปค๋„ฅ์…˜ ์œ„์—์„œ ๋Œ์•„๊ฐ„๋‹ค. 

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ URL์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ์„œ๋ฒ„์˜ IP์ฃผ์†Œ์™€ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„ ๋จผ์ € TCP ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•œ๋‹ค.
  2. ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•œ ๋’ค
  3. GET์ด๋“  POST๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„๋กœ ์š”์ฒญ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ ,
  4. ์‘๋‹ต์ด ์˜ค๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ทธ๊ฑธ ์ฝ์€ ๋’ค ์ปค๋„ฅ์…˜์„ ๋Š๋Š”๋‹ค.

์ด๋Ÿฐ TCP ์ŠคํŠธ๋ฆผ์€ ์„ธ๊ทธ๋จผํŠธ(์ „์†ก๊ณ„์ธต์˜ ๋‹จ์œ„)๋กœ ๋‚˜๋‰˜์–ด์„œ IPํŒจํ‚ท(๋„คํŠธ์›Œํฌ ๊ณ„์ธต ๋‹จ์œ„)์„ ํ†ตํ•ด ์ „์†ก๋˜๋Š”๋ฐ, 

TCP ์„ธ๊ทธ๋จผํŠธ ํ—ค๋”๋Š” TCP ํฌํŠธ๋ฒˆํ˜ธ, TCP ์ œ์–ด ํ”Œ๋ž˜๊ทธ, TCP ์ˆœ์„œ๋ฒˆํ˜ธ์™€ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์ˆซ์ž ๊ฐ’(Checksum)์„ ๊ฐ–๊ณ ์žˆ๊ณ  IP ํŒจํ‚ท ํ—ค๋”๋Š”  ์†ก์‹ , ์ˆ˜์‹  IP ์ฃผ์†Œ, ํฌ๊ธฐ ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค.

 

์ปดํ“จํ„ฐ๋Š” ํ•ญ์ƒ TCP ์ปค๋„ฅ์…˜์„ ์—ฌ๋Ÿฌ๊ฐœ ์œ ์ง€ํ•˜๋Š” ๋ฐ, ์ด๊ฑด ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•ด ์ด๋ค„์ง„๋‹ค. ํฌํŠธ๋ฒˆํ˜ธ๋Š” ์ผ์ข…์˜ ๊ฒŒ์ดํŠธ์›จ์ด ์—ญํ• ์„ ํ•œ๋‹ค. TCP ์ปค๋„ฅ์…˜์€ ๋ฐœ์‹ ์ง€ IP์ฃผ์†Œ, ๋ฐœ์‹ ์ง€ ํฌํŠธ, ์ˆ˜์‹ ์ง€ IP์ฃผ์†Œ, ์ˆ˜์‹ ์ง€ ํฌํŠธ ๋ฆฌ์—๊ฒŒ 4๊ฐœ์˜ ๊ฐ’์œผ๋กœ ์‹๋ณ„ํ•ด ์œ ์ผํ•œ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•œ๋‹ค. 4๊ฐœ ์ค‘ ์ผ๋ถ€๊ฐ€ ๊ฐ™์€ ์ปค๋„ฅ์…˜์€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋‘ ๊ฐ™์€ ์ปค๋„ฅ์…˜์€ ์œ ์ผํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ปค๋„ฅ์…˜์ด ๊ฐ™์€ ํฌํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. HTTP๋Š” ๋ณดํ†ต ํฌํŠธ๋ฒˆํ˜ธ 80์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ HTTP ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” TCP ์ปค๋„ฅ์…˜์€ ํฌํŠธ๋ฒˆํ˜ธ 80์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์†Œ์ผ“ ํ†ต์‹ ๋„ ์‹ค์Šต์œผ๋กœ ์ž ๊น ํ–ˆ์—ˆ๋Š”๋ฐ, ์•„๋ž˜ ๋„์‹์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์ž˜ ๋œ๋‹ค.

Client๊ฐ€ connectํ•˜๋ ค๋ฉด Server๊ฐ€ listen(์†Œ์ผ“ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์š”์ฒญ ๋Œ€๊ธฐ) ์ค‘์ด์–ด์•ผ ํ•จ์€ ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.

HTTP ํŠธ๋žœ์žญ์…˜์€ ์œ„์—์„œ๋„ ์„œ์ˆ ํ–ˆ๋Š”๋ฐ, TCP ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. 

sequenceDiagram
    Client-->Client: ๋ธŒ๋ผ์šฐ์ €์—์„œ DNS๋ฅผ ์ฐพ์•„ hostname์„ IP์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    Client->> Server: TCP์ปค๋„ฅ์…˜ ์š”์ฒญ
    Server->>Client: TCP์ปค๋„ฅ์…˜ ํ—ˆ๊ฐ€ ์‘๋‹ต -- ์ด ๊ณผ์ •์—์„œ ์ปค๋„ฅ์…˜์ด ๋งŽ์•„์ง€๋ฉด delay ์ƒ๊น€
      Client->> Server: HTTP ์š”์ฒญ
Client->> Server: ๋‹น์—ฐํžˆ ์ด๋•Œ๋„ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
Server->> Client: 
	Server->> Client: HTTP ์‘๋‹ต
 Client-->Client: ์ข…๋ฃŒ

์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์€ ํ•˜๋“œ์›จ์–ด, ๋„คํŠธ์›Œํฌ, ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ, ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฌผ๋ฆฌ์  ๊ฑฐ๋ฆฌ ๋“ฑ ๋งŽ์€ ์š”์†Œ๋กœ๋ถ€ํ„ฐ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

์ด๋Ÿฐ ์„ฑ๋Šฅ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์„ฑ๋Šฅ๊ด€๋ จ ์š”์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค.

  • TCP ์ปค๋„ฅ์…˜์˜ handshake ์„ค์ •
  • ํ˜ผ์žก ์ œ์–ด์šฉ TCP Slow-start
  • nagle ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ™•์ธ ์‘๋‹ต ์ง€์—ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • time-wait ์ง€์—ฐ๊ณผ ํฌํŠธ ๊ณ ๊ฐˆ

// ์ถ”ํ›„ ์ถ”๊ฐ€ [4.2.3~ 4.3)

HTTP ์ปค๋„ฅ์…˜ ๊ด€๋ฆฌ

HTTP๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ค‘๊ฐœ์„œ๋ฒ„๊ฐ€ ๋†“์ด๋Š” ๊ฑธ ํ—ˆ๋ฝํ•˜๋Š”๋ฐ, ์ค‘๊ฐœ์„œ๋ฒ„๋ž‘์€ ์˜ต์…˜์„ ์ ์šฉํ•˜์ง€ ์•Š๊ณ , ์ธ์ ‘ํ•œ ์ปค๋„ฅ์…˜์—๋งŒ ์˜ต์…˜์ด ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ์›ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ HTTP Connection ํ—ค๋”ํ•„๋“œ๋Š” ์ปค๋„ฅ์…˜ ํ† ํฐ์„ ์‰ฝํ‘œ๋กœ ๊ตฌ๋ถ„ํ•ด ๊ฐ–๊ณ ์žˆ๋‹ค.

Connection ํ—ค๋”์—๋Š” 

  • HTTP ํ—ค๋” ํ•„๋“œ ๋ช… - ์ด ์ปค๋„ฅ์…˜์—๋งŒ ํ•ด๋‹น๋˜๋Š” ํ—ค๋” ๋‚˜์—ด
  • ์ž„์‹œ ํ† ํฐ ๊ฐ’ - ์ปค๋„ฅ์…˜์— ๋Œ€ํ•œ ๋น„ ํ‘œ์ค€ ์˜ต์…˜
  • close ๊ฐ’ - ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒ์‹œํ‚ฌ์ง€์— ๋Œ€ํ•œ ํ•„๋“œ.

์ด ์„ธ ์ข…๋ฅ˜์˜ ํ† ํฐ์ด ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋‹ค. Connection ํ—ค๋”์—๋Š” ํ™‰(๊ฐ ์„œ๋ฒ„, ๋ผ์šฐํ„ฐ) ๋ณ„ ํ—ค๋”๋ช…์„ ๊ธฐ์ˆ ํ•˜๊ณ , ์ด ํ™‰ ๋ณ„ ํ—ค๋”๋ช…์„ ํ†ตํ•ด ์›๋ž˜ Connection ํ—ค๋”๊ฐ€ ์ตœ์ข… ์ˆ˜์‹ ์ž๊ฐ€ ์•„๋‹Œ ์œ„์น˜์—์„œ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค(ํ—ค๋” ๋ณดํ˜ธํ•˜๊ธฐ). ๋ชจ๋“  ํ—ค๋” ํ•„๋“œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์‹œ์ ์— ์‚ญ์ œ๋ผ์•ผํ•œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ์ „๋‹ฌ๋ฐ›์€ ์ปค๋„ฅ์…˜ ํ—ค๋”์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ๊ธฐ์ˆ ๋˜์–ด์žˆ๋Š” ์˜ต์…˜์„ ์ ์šฉํ•œ๋‹ค.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection

 

Connection - HTTP | MDN

The Connection general header controls whether the network connection stays open after the current transaction finishes. If the value sent is keep-alive, the connection is persistent and not closed, allowing for subsequent requests to the same server to be

developer.mozilla.org

Warning: Connection-specific header fields such as Connection and Keep-Alive are prohibited in HTTP/2 and HTTP/3. Chrome and Firefox ignore them in HTTP/2 responses, but Safari conforms to the HTTP/2 spec requirements and does not load any response that contains them.

HTTP/1.1์—์„œ๋Š” Connectionํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•ด ์˜ต์…˜์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ—ˆ์šฉ๋์ง€๋งŒ ์ด์ œ 2, 3๋ฒ„์ „์—์„œ๋Š” ๋ฌด์‹œ๋œ๋‹ค.


ํŠธ๋ž™์žญ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์•ผ๋˜๋Š”๋ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ค๋ฉด ๋ฌผ๋ฆฌ์  ์ง€์—ฐ๋„ ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ๋Š๋‚„ ๋•Œ ๋™์‹œ์— ์กฐ๊ธˆ์”ฉ ๋‚˜์˜ค๋Š” ๊ฒƒ๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ด๋‹ค. ๋˜ ๊ฐ์ฒด๊ฐ€ ๋‹ค ๋„๋‹ฌํ•ด์•ผ ํ™”๋ฉด์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ „์—๋Š” ํ™”๋ฉด์ด ๋น„์–ด์žˆ๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค. 

 

์ˆœ์ฐจ์ฒ˜๋ฆฌ ๋ง๊ณ  ์–ด๋–ป๊ฒŒ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•ด์•ผ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์„๊นŒ?

๋ณ‘๋ ฌ ์ปค๋„ฅ์…˜

์—ฌ๋Ÿฌ๊ฐœ์˜ TCP ์ปค๋„ฅ์…˜์„ ๋งบ๊ณ  ๋™์‹œ์— HTTP ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. 

graph LR
	Server --> Client

์ด๊ฒŒ ์›๋ž˜ ๋ฐฉ์‹์ด์—ˆ๋‹ค๋ฉด

graph LR
	Server --> Client
    	Server --> Client
        	Server --> Client
            	Server --> Client
                	Server --> Client

์ปค๋„ฅ์…˜์„ ์—ฌ๋Ÿฌ๊ฐœ ๋‹ฌ์•„์„œ, ๊ฐ ์ปค๋„ฅ์…˜๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚ด๋ ค๋ฐ›์•„์„œ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋ฆฌ์†Œ์Šค ๊ฐ€์ ธ์˜ค๋Š” ์†๋„๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ํ•œ๋‹ค.

์ด๋Ÿฌ๋ฉด ์ˆœ์ฐจ๋กœ ๋”œ๋ ˆ์ด*N ํšŒ ๊ฑธ๋ฆฌ๋˜ ๊ฒŒ ๊ฐ ์ปค๋„ฅ์…˜์˜ ์ง€์—ฐ์‹œ๊ฐ„์„ ๊ฒน์น˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ์ธํ„ฐ๋„ท ๋Œ€์—ญํญ๋„ ํ•œ ์ปค๋„ฅ์…˜์ด ์ ์œ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋‚˜๋ˆ ์„œ ์“ด๋‹ค. 

sequenceDiagram
    Client->> Server: ์š”์ฒญ
    Server->>Client: ์‘๋‹ต
    Server-->>Client: ์‘๋‹ต
    Server-->>Client: ์‘๋‹ต
        Server-->>Client: ์‘๋‹ต

๊ทธ๋Ÿฌ๋ฉด ๋ณ‘๋ ฌ ์ปค๋„ฅ์…˜์€ ํ•ญ์ƒ ๋น ๋ฅผ๊นŒ? ๋ฌผ๋ฆฌ์ ์ธ ์ด์œ ๋กœ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๊ฑฐ๋‚˜(๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ถ€ํ•˜์˜ ์–‘์ด ์ ์€ ๊ฒฝ์šฐ) ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์ด ์ข์€ ๊ฒฝ์šฐ ๊ฐ ๊ฐ์ฒด๋ฅผ ๋‚ด๋ ค๋ฐ›๋Š” ์†๋„ ์ž์ฒด๊ฐ€ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๋Š” ์‹œ๊ฐ„์ด ์„ฑ๋Šฅ์„ ๋” ์•…ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ง€์† ์ปค๋„ฅ์…˜

์ปค๋„ฅ์…˜์„ ์žฌํ™œ์šฉํ•˜๋ฉด์„œ ๋งค๋ฒˆ ์ƒ์„ฑ/์ข…๋ฃŒ ํ•˜๋˜ ์‹œ๊ฐ„์„ ์ค„์ธ๋‹ค. ์›น ํด๋ผ์ด์–ธํŠธ๋Š” ๋ณดํ†ต ๊ฐ™์€ ์‚ฌ์ดํŠธ์—์„œ ์—ฌ๋Ÿฌ๊ฐœ ์ปค๋„ฅ์…˜์„ ๋งบ๋Š”๋‹ค. (ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ž์ฃผ ์ฐธ์กฐํ•˜๋‹ˆ๊นŒ ์ฐธ์กฐ ์ง€์—ญ์„ฑ์ด๋ž‘ ๋น„์Šทํ•œ ๊ฐœ๋…์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.) ์ด๊ฑธ ์›น์—์„œ๋Š” ์‚ฌ์ดํŠธ ์ง€์—ญ์„ฑ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ HTTP/1.1์—์„œ๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋„ ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ ๋‘˜ ์ค‘ ์–ด๋Š ํ•œ ์ชฝ์ด ๋Š์ง€ ์•Š๋Š” ์ด์ƒ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•ด์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๊ฑธ ์ง€์† ์ปค๋„ฅ์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฌ๋ฉด ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑ/์†Œ๋ฉธํ•˜๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ์„ ์ค„ ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ์„ ์กฐ๊ธˆ ๋” ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ ์€ ์ปค๋„ฅ์…˜์ด ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋„ฅ์…˜์ด ์Œ“์ด๋ฉด์„œ ๋ฐœ์ƒํ•  ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ณ‘๋ ฌ+์ง€์†์„ ์‚ฌ์šฉํ•˜๋ฉด ์ ์€ ์ˆ˜์˜ ๋ณ‘๋ ฌ์ปค๋„ฅ์…˜์„ ์ง€์† ์ปค๋„ฅ์…˜์œผ๋กœ ์“ฐ๋ฉด์„œ ์žฅ์ ์„ ๊ทน๋Œ€ํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ปค๋„ฅ์…˜ ํƒ€์ž…์œผ๋กœ๋Š” keep-alive(1.0+)์™€ persistent ์ปค๋„ฅ์…˜(1.1)์ด ์žˆ๋‹ค.

Keep-Alive

HTTP/1.1 200 OK
Connection: Keep-Alive

1.0 ๋ฒ„์ „์—์„œ ์ง€์† ์ปค๋„ฅ์…˜์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ํ—ค๋”๋‹ค. 1.1๋ถ€ํ„ฐ๋Š” keep-alive๊ฐ€ ๊ธฐ๋ณธ์ด๋ผ์„œ ๋ช…์„ธ์—๋Š” ๋บ์ง€๋งŒ ์•„์ง๋„ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ณ  keep-alive๋ฅผ ํ—ค๋”์— ๋‹ด์•„์„œ ์š”์ฒญ๋ณด๋‚ธ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„ ์‘๋‹ต์˜ Keep-Alive ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ปค๋„ฅ์…˜์„ ๋Š์„์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ์—†๋‹ค๋ฉด ์„œ๋ฒ„๊ฐ€ ๋Š์„ ๊ฒƒ์œผ๋กœ ์ถ”์ •ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋„ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜์ง€์•Š๋Š”๋‹ค. ์ด ๋ชจ๋“  ๊ณผ์ •์€ ๊ฐ•์ œ์„ฑ์ด ์—†๋‹ค. ๋‹จ์ˆœํžˆ ์š”์ฒญ์ผ ๋ฟ์ด๊ณ  keep-alive ์ž์ฒด์— ๋Œ€ํ•œ ์˜ต์…˜๋„ Keep-Aliveํ—ค๋”๋ฅผ ์ด์šฉํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

Keep-Alive: timeout=5, max=10

์ตœ๋Œ€ 10๊ฐœ์˜ ํŠธ๋ž™์žญ์…˜์ด ์ฒ˜๋ฆฌ๋  ๋™์•ˆ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜๊ณ , ์ตœ์†Œ 5์ดˆ๊ฐ„ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜๋ผ๋Š” ์˜ต์…˜์ด๋‹ค. 

์ปค๋„ฅ์…˜ ์œ ์ง€๋Š” Content-Length๋ฅผ ํ†ตํ•ด ์ด๋ค„์ง€๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ์—”ํ„ฐํ‹ฐ ๋ณธ๋ฌธ ๊ธธ์ด๋ฅผ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜ ์ค‘์— ๊ธฐ์กด ๋ฉ”์‹œ์ง€ ์‹œ์ž‘์ ๊ณผ ๋์ ์„ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ƒ๊ธด๋‹ค.

์˜ค๋ž˜๋œ ํ”„๋ฝ์‹œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, Connection ํ—ค๋”๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ด keep-alive๋ฅผ ์•Œ์•„๋“ฃ์ง€ ๋ชปํ•œ๋‹ค. ๋ฌด์กฐ๊ฑด ์ „๋‹ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ฝ์‹œ ํŠน์„ฑ ์ƒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ์ฑ„๋กœ ์š”์ฒญ ๊ทธ๋Œ€๋กœ ๋‹ค์Œ ํ”„๋ฝ์‹œ๋กœ ์ „๋‹ฌํ•˜๊ณ  ๊ณ„์† ์ „๋‹ฌํ•˜๋‹ค๊ฐ€ ์›น ์„œ๋ฒ„๊นŒ์ง€๋กœ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„์ฐฉํ•œ๋‹ค.

๋ฌธ์ œ ์›์ธ๋Š” Connection ํ—ค๋”๊ฐ€ hop ๋ณ„ ํ—ค๋”๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๊ฐœ์˜ ์ „์†ก๋งํฌ์—๋งŒ ์ ์šฉ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด ๋ง์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ž‘ keep-alive๋ฅผ ๋งบ๋Š”๊ฒŒ์•„๋‹ˆ๋ผ ํ”„๋ฝ์‹œ๋ž‘ ๋งบ๋Š” ๋‹ค๋Š” ๋ง์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋ฝ์‹œ๋Š” keep-alive๋ฅผ ์ค„ ์ˆ˜ ์—†๋Š”๋ฐ ์„œ๋ฒ„๋Š” keep-alive ์ปค๋„ฅ์…˜์„ ๋งบ๊ณ  ์žˆ์œผ๋‹ˆ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์™€๋„ ์„œ๋ฒ„์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ณ  ๋Œ€๊ธฐ์ƒํƒœ(Hang)๋กœ ๋“ค์–ด๊ฐ€๋ฒ„๋ฆฌ๊ณ  ํƒ€์ž„์•„์›ƒ์ด ๋‚ ๋•Œ๊นŒ์ง€ ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•œ๋‹ค. 

=> ๋ฐฉ์ง€์ฑ…์€ ํ”„๋ฝ์‹œํ•œํ…Œ Connection ํ—ค๋” ๊ด€๋ จ์„ ์ผ์ฒด ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. 

Proxy-Connection

Proxy-Connection ํ—ค๋”๊ฐ€ ๋“ฑ์žฅํ•œ ์ดํ›„๋กœ๋Š”  ์œ„ ์ƒํ™ฉ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. Proxy-Connection์€ ํ™•์žฅํ—ค๋”๋กœ ์ด๊ฑด ์›น ์„œ๋ฒ„์— ์ „๋‹ฌํ•ด๋„ ๋ฌด์‹œ๋˜๋Š” ํ—ค๋”๋‹ค. dumb proxy๊ฐ€ ์•„๋‹Œ ํ”„๋ฝ์‹œ ์„œ๋ฒ„(Connection ํ—ค๋”๋ฅผ ์ดํ•ดํ•˜๋Š”)๊ฐ€ Proxy-Connectionํ—ค๋”์—์„œ keep-alive๋ฅผ ์ฝ์–ด Connection ํ—ค๋”๋กœ ๋ฐ”๊ฟ” ์›น ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋˜๋ฉด Hang์—†์ด ์ž˜ ์ž‘๋™ํ•  ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์•„์ง ์กด์žฌํ•œ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋ฝ์‹œ๋งŒ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์กด์žฌํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๋Š”๋ฐ, ๋‘๊ฐœ์˜ ํ”„๋ฝ์‹œ๋ฅผ ๊ฑฐ์นœ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ด์ „์— ์žˆ๋˜ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ด๋Ÿฐ ์„ค๊ณ„์ƒ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ 1.1๋ฒ„์ „ ๋ถ€ํ„ฐ persistent ์ปค๋„ฅ์…˜์„ ์ง€์›ํ•œ๋‹ค. default๊ฐ€ ๋ชจ๋‘ persistent ์ปค๋„ฅ์…˜์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๊ณ  ์ปค๋„ฅ์…˜์„ ๋Š์œผ๋ ค๋ฉด ํ—ค๋”์— Connection: close๋ฅผ ๋ช…์‹œํ•ด์•ผ๋œ๋‹ค. 

ํŒŒ์ดํ”„๋ผ์ธ ์ปค๋„ฅ์…˜

์ขŒ์ธก์ด ๊ทธ๋ƒฅ persistent connection, ์˜ค๋ฅธ์ชฝ์ด pipelining ์ ์šฉํ•œ connection

๊ณต์œ  TCP ์ปค๋„ฅ์…˜์„ ํ•˜๋‚˜ ๋‘๊ณ  ๊ทธ๊ฑธ๋กœ ๋ณ‘๋ ฌ HTTP ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ปค๋„ฅ์…˜์ด ์ง€์† ์ปค๋„ฅ์…˜(persistent)์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์‘๋‹ต์ด ๋„์ฐฉํ•˜๊ธฐ ์ „์— ์š”์ฒญ์„ ์„œ๋ฒ„ ํ์— ์Œ“์•„๋‘๊ณ  ์‘๋‹ต๋„ ํ•œ๋ฒˆ์— ์ฃผ๋ฅด๋ฅต ๋ฐ›๋Š”๋‹ค. 

์ง€์†์ปค๋„ฅ์…˜์ด ์•„๋‹ˆ๋ฉด ํŒŒ์ดํ”„๋ผ์ธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ (์ˆœ์„œ๋ฒˆํ˜ธ๊ฐ€ ์—†์–ด์„œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—) ์š”์ฒญ-์‘๋‹ต์ˆœ์„œ๋Š” ๋˜‘๊ฐ™์•„์•ผ๋œ๋‹ค.  ๋˜ ํŒŒ์ดํ”„๋ผ์ด๋‹ ์ค‘๊ฐ„์— ๋Š๊ธฐ๋ฉด, ๋‹ค์‹œ ์ปค๋„ฅ์…˜์„ ๋งบ์–ด ์š”์ฒญ์„ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. 

ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ณด๋‚ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€๋Š” ์•Š์ง€๋งŒ ์œ„ํ—˜ํ•œ ์š”์ฒญ์œผ๋กœ๋Š” POST๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ์š”์ฒญ์ด๋‹ค. ์ด๋Ÿฐ ์š”์ฒญ์€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ๋ณด๋‚ด๋ฉด ์œ„ํ—˜ํ•˜๋‹ค. ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š”(๋“ฑ๋ก ์‚ญ์ œ๋Š” ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ POST๋Š” ์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ๋งค๋ฒˆ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.) ํŠธ๋žœ์žญ์…˜์„ ๋ฉฑ๋“ฑํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. GET์ด ๋ฉฑ๋“ฑํ•˜๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ ๋™์ ์ธ ๊ฐ’์„ GETํ•ด์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š” ๋น„๋ฉฑ๋“ฑ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปค๋„ฅ์…˜ ๋Š๊ธฐ

๋ณดํ†ต ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋Š๊ธฐ๋Š” ๊ฒƒ ์™ธ์—๋„, ์—๋Ÿฌ๊ฐ€ ์—†์–ด๋„ ์–ธ์ œ๋“  ๋Š์„ ์ˆ˜ ์žˆ๋‹ค. ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ „์†ก ํ›„ ์‘๋‹ต์ด ์˜ค๊ธฐ ์ „์— ์ปค๋„ฅ์…˜์ด ๋Š๊ธฐ๋ฉด ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์–ผ๋งˆ๋‚˜ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜๋„ ๋Š์„ ์ˆ˜ ์žˆ๋‹ค...

HTTP ์‘๋‹ต์—๋Š” Content-Length ํ—ค๋”๊ฐ€ ์žˆ๊ณ , ์ด ํฌ๊ธฐ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ์•„์ง ๋‚จ์•˜๋Š”์ง€(์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•ด์•ผํ•˜๋Š”์ง€) ํŒ๋‹จํ•˜๋Š” ๊ทผ๊ฑฐ๊ฐ€ ๋˜๊ธฐ๋„ ํ•œ๋‹ค. 

์šฐ์•„ํ•œ ์ปค๋„ฅ์…˜ ๋Š๊ธฐ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ TCP ์ž…๋ ฅ ์ฑ„๋„๊ณผ ์ถœ๋ ฅ ์ฑ„๋„ ์ค‘ ํ•œ ๊ฐœ๋งŒ ๋Š๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค ๋Š์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์ „์ฒด ๋Š๊ธฐ: close()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ TCP ์ปค๋„ฅ์…˜์˜ ์ž…๋ ฅ ์ฑ„๋„๊ณผ ์ถœ๋ ฅ ์ฑ„๋„์˜ ์ปค๋„ฅ์…˜์„ ๋ชจ๋‘ ๋Š์Œ
  • ์ ˆ๋ฐ˜ ๋Š๊ธฐ: shutdown()์„ ํ˜ธ์ถœํ•˜์—ฌ ์ž…๋ ฅ ์ฑ„๋„์ด๋‚˜ ์ถœ๋ ฅ ์ฑ„๋„ ์ค‘์— ํ•˜๋‚˜๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋Š์Œ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ ๋Š๊ธด ์ž…๋ ฅ ์ฑ„๋„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด connection reset by peer ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ์šด์˜์ฒด์ œ์—์„œ ์ด๋ฅผ ์‹ฌ๊ฐํ•œ ์—๋Ÿฌ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ์•„์ง ์ฝํžˆ์ง€ ์•Š์€ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•œ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ ์ปค๋„ฅ์…˜์—์„œ๋Š” ์ด ์ƒํ™ฉ์ด ํŠนํžˆ ๋” ์•…ํ™”๋œ๋‹ค. ์ด๊ฒŒ ๋ฆฌ์…‹ ์—๋Ÿฌ๋‹ค. ๊ทธ๋ž˜์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋ณด๋‚ด์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ํ™•์‹ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ปค๋„ฅ์…˜์˜ ์ž…๋ ฅ์ฑ„๋„์„ ๋Š๋Š” ๊ฑด ์œ„ํ—˜ํ•˜๋‹ค.

 

์—๋Ÿฌ ๋ฐœ์ƒ์„ ์˜ˆ์ƒํ•˜๊ธฐ ์œ„ํ•ด ‘์ ˆ๋ฐ˜ ๋Š๊ธฐ’๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๊ฑธ ์šฐ์•„ํ•˜๋‹ค๊ณ (?) ํ‘œํ˜„ํ•œ๋‹ค. ๋ณดํ†ต ์ž์‹ ์˜ ์ถœ๋ ฅ ์ฑ„๋„์„ ๋Š๊ณ  ๋‹ค๋ฅธ ์ชฝ์˜ ์ถœ๋ ฅ ์ฑ„๋„์ด ๋Š๊ธฐ๋Š” ๊ฑธ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ์–‘ ์ชฝ์—์„œ ๋ชจ๋‘ ๋Š์–ด๋‘๋ฉด ๋ฆฌ์…‹ ์œ„ํ—˜ ์—†์ด ์ปค๋„ฅ์…˜์ด ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ๋‹ค. ๋ฌธ์ œ๋Š” ์ƒ๋Œ€๋ฐฉ์ด ์ ˆ๋ฐ˜๋Š๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ธ๋ฐ ์ด ์ƒํ™ฉ์— ๋Œ€๋น„ํ•˜๋ ค๋ฉด ์†ก์‹ ์ธก์—์„œ ์ ˆ๋ฐ˜๋Š๊ธฐ๋ฅผ ํ•˜๊ณ , ๋‹ค๋ฅธ ์ชฝ ์ž…๋ ฅ์ฑ„๋„์— ๋Œ€ํ•œ ์ƒํƒœ๊ฒ€์‚ฌ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•˜๋ฉด์„œ ๋Š๊ฒผ๋‚˜ ํ™•์ธํ•ด์•ผ๋œ๋‹ค. ๋งŒ์•ฝ ์ž…๋ ฅ ์ฑ„๋„์ด ํŠน์ • ํƒ€์ž„์•„์›ƒ ๋‚ด ๋Š์–ด์ง€์ง€ ์•Š์œผ๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฆฌ์†Œ์Šค ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ๊ฐ•์ œ๋กœ ์ปค๋„ฅ์…˜์„ ๋Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^
๋ฐ˜์‘ํ˜•

'๐Ÿ“– > HTTP ์™„๋ฒฝ ๊ฐ€์ด๋“œ๐Ÿ“–' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[6์žฅ] 6.1~  (0) 2024.02.29
[5์žฅ] 5.1~5.10  (0) 2024.02.28
[3์žฅ] 3 ~ 3.3  (0) 2024.02.14
[1์žฅ ~ 2์žฅ] 1.7 ~ 2.4  (0) 2024.02.12
[1์žฅ] 1.1 ~ 1.6  (0) 2024.02.06
COMMENT