Keep-Alive Header

Keep Alive ๋ž€?

  • HTTP protocol์—์„œ client์™€ server ๊ฐ„ ์—ฌ๋Ÿฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ํ•˜๋‚˜์˜ TCP ์—ฐ๊ฒฐ ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค

    • HTTP๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค client์™€ server ๊ฐ„ ์ƒˆ๋กœ์šด TCP ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ , ์‘๋‹ต์„ ๋ฐ›์€ ํ›„์— ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค

      • ์ด๋กœ ์ธํ•ด ์š”์ฒญ๋งˆ๋‹ค ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” overhead๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค

    • Keep-Alive๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๋งค์ปค๋‹ˆ์ฆ˜์œผ๋กœ, client์™€ server ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ณ  ์—ฌ๋Ÿฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋™์ผํ•œ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค

    • client๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ "Connection: keep-alive" header๋ฅผ ํฌํ•จ์‹œํ‚ค๋ฉด, server๋Š” ์—ฐ๊ฒฐ์„ ๋‹ซ์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ต์„ ๊ณ„์† ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค

  • HTTP/1.1 ๋ถ€ํ„ฐ๋Š” ์ด๋ฏธ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” TCP ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉ ํ•˜๋Š” Keep-Alive ๋ผ๋Š” ๊ธฐ๋Šฅ์„ Default๋กœ ์ง€์›ํ•œ๋‹ค

  • 3-ways-handshake ๊ณผ์ •์ด ์ƒ๋žต๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค

    • ์—ฐ๊ฒฐ ์„ค์ •๊ณผ ํ•ด์ œ์— ๋”ฐ๋ฅธ overhead ๊ฐ์†Œ ๋ฐ network ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค

Keep Alive ํŠน์ง•

  • Keep-Alive ์œ ์ง€ ์‹œ๊ฐ„์€ ์—ฐ๊ฒฐ๋œ socket ์— I/O access๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ข…๋ฃŒ๋œ ์‹œ์ ๋ถ€ํ„ฐ ์ •์˜๋œ ์‹œ๊ฐ„๊นŒ์ง€ access ๊ฐ€ ์—†๋”๋ผ๋„ session ์„ ์œ ์ง€ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค

    • ์ฆ‰, ์ •์˜๋œ ์‹œ๊ฐ„ ๋‚ด์— access ๊ฐ€ ์ด๋ฃจ์–ด ์ง„๋‹ค๋ฉด ๊ณ„์† ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค

  • Keep-Alive header๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Connection header๋Š” keep-alive ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค

    • but, HTTP/2์—์„œ๋Š” ๋ฌด์‹œ๋˜๊ณ , ์—ฐ๊ฒฐ ๊ด€๋ฆฌ๋Š” ํ•ด๋‹น ํ”„๋กœํ† ์ฝœ ๋‚ด์—์„œ ๋‹ค๋ฅธ ๋งค์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค

  • Event-driven ๊ตฌ์กฐ์—ฌ์„œ non-blocking์„ ์‚ฌ์šฉํ•˜๋Š” Nginx ๋“ฑ์€ Keep-Alive๋ฅผ ํ•˜๋ฉด์„œ๋„ Thread๋ฅผ ์ ์œ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌํ•˜๋‹ค

Keep-Alive timeout์„ ์„ค์ •ํ•˜๋Š” ์ด์œ 

  • ์„œ๋ฒ„ ์ž์›์€ ๋ฌดํ•œ์ •์ด ์•„๋‹ˆ๋‹ค

  • ์ ‘์†์„ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ server์— ์†์‹ค์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค

  • ์ฆ‰, server์™€ ์—ฐ๊ฒฐ์„ ๋งบ์„ ์ˆ˜ ์žˆ๋Š” socket ์€ ํ•œ์ •๋˜์–ด ์žˆ๊ณ , ์—ฐ๊ฒฐ์ด ์˜ค๋ž˜ ์ง€์†๋˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์—ฐ๊ฒฐ์„ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์ด ๋‹ฅ์นœ๋‹ค

HTTP/1.0+ ์™€ HTTP/1.1 ์—์„œ์˜ Keep-Alive

  • 1.0+์—์„œ๋Š” Keep-Alive๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •์„ ํ•ด์•ผํ–ˆ๋‹ค๋ฉด,

  • 1.1์—์„œ๋Š” Keep-Alive๋ฅผ ๋Š๊ธฐ ์œ„ํ•ด ์„ค์ •์„ ํ•ด์•ผํ•œ๋‹ค

  • ์ฆ‰, ์„ค์ •์˜ ๋ชฉ์ ์ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋ƒ ๋Š๊ธฐ ์œ„ํ•จ์ด๋ƒ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค!

Last updated