Persistent Connection

HTTP ํ†ต์‹  ๊ณผ์ •์—์„œ TCP ์—ฐ๊ฒฐ์„ ๋ฐ”๋กœ ๋‹ซ์ง€ ์•Š๊ณ , ์—ฌ๋Ÿฌ HTTP ์š”์ฒญ/์‘๋‹ต์— ์žฌ์‚ฌ์šฉํ•˜๋Š” HTTP ์—ฐ๊ฒฐ์ด๋‹ค. ๋™์ž‘ ๋ฐฉ์‹์€ HTTP ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

HTTP/1.0

๊ธฐ๋ณธ์ ์œผ๋กœ ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ๋๋‚˜๋ฉด ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ๋ฐฉ์‹์ด์˜€์œผ๋ฉฐ, ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ—ค๋”๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

	Connection: keep-alive

HTTP/1.1

1.1๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ ๋™์ž‘์ธ Persistent Connection์ด๋‹ค. ๋‹จ, ์—ฐ๊ฒฐ์„ ๋‹ซ๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ—ค๋”๋ฅผ ๋ณด๋‚ธ๋‹ค.

Connection: close

Keep-Alive

Persistent Connection์„ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹, ํ—ค๋”, ์„ค์ •์˜ ์ด๋ฆ„์„ ๋งํ•œ๋‹ค. ๊ณ„์ธต๋ณ„๋กœ HTTP Keep-Alive๊ณผ TCP Keep-Alive๊ฐ€ ์กด์žฌํ•œ๋‹ค.

HTTP Keep-Alive

์ •์˜

์œ„์—์„œ ์„œ์ˆ ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ, ํ•˜๋‚˜์˜ TCP ์—ฐ๊ฒฐ๋กœ ์—ฌ๋Ÿฌ HTTP ์š”์ฒญ/์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์žฅ์ 

HTTP ์š”์ฒญ๋•Œ ๋งˆ๋‹ค 3-way handshake๋กœ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋˜ํ•œ HTTPS์˜ ๊ฒฝ์šฐ TLS handshake ๋น„์šฉ๋„ ์ถ”๊ฐ€๋œ๋‹ค. ์ตœ์ดˆ์— ๋งบ์–ด์ง„ Connection์„ ์žฌ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋งค ์š”์ฒญ๋•Œ๋งˆ๋‹ค handshake๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ ์œผ๋กœ ์ด์ ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์•„์ง€๋ฉด ๊ทธ๋งŒํผ ์—ฐ๊ฒฐ์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. ์ง€์†์ ์œผ๋กœ ์š”์ฒญ/์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” Connection ์ด์™ธ์˜ idle connection์ด ์Œ“์ผ ์ˆ˜ ์žˆ๋‹ค.

TCP Keep-Alive

์ •์˜

TCP ์—ฐ๊ฒฐ์ด ์•„์ง ์‚ด์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด OS๊ฐ€ ์ž‘์€ ํŒจํ‚ท์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์„ค์ •

์šด์˜์ฒด์ œ ์„ค์ •์œผ๋กœ ์ œ์–ด๊ฐ€ ๋˜๋ฉฐ ๋Œ€ํ‘œ์ ์œผ๋กœ ์•„๋ž˜์˜ ๊ฐ’๋“ค์ด ์žˆ๋‹ค.

  • tcp_keepalive_time : idle ์ƒํƒœ์—์„œ ์ฒซ keepalive probe๋ฅผ ๋ณด๋‚ด๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„
  • tcp_keepalive_intvl : probe ์žฌ์ „์†ก ๊ฐ„๊ฒฉ
  • tcp_keepalive_probes : ๋ช‡ ๋ฒˆ ์‹คํŒจํ•˜๋ฉด ์ฃฝ์€ ์—ฐ๊ฒฐ๋กœ ๋ณผ์ง€

์„ค์ •

Keep-Alive Timeout

Keep-Alive ์—ฐ๊ฒฐ์„ ๋ฌดํ•œ์ • ์œ ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„์„ ์„ค์ •ํ•œ๋‹ค.

Keep-Alive: timeout=5

์ด ๊ฒฝ์šฐ๋Š” ์š”์ฒญ ์ฒ˜๋ฆฌ ํ›„ 5์ดˆ ๋™์•ˆ ์ถ”๊ฐ€ ์š”์ฒญ์ด ์—†์„ ๋•Œ ์„œ๋ฒ„๊ฐ€ Connection์„ ๋‹ซ๋Š”๋‹ค.

Max Keep-Alive Requests

ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ์„ค์ •์ด๋‹ค.

Keep-Alive: max=100

์ด ๊ฒฝ์šฐ๋Š” ํ•˜๋‚˜์˜ TCP ์—ฐ๊ฒฐ์—์„œ HTTP ์š”์ฒญ์„ ์ตœ๋Œ€ 100๊ฐœ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š”๋‹ค.

Idle Connection

์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” Connection์€ idle ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ํ•ด๋‹น ์ƒํƒœ๊ฐ€ ์ง€์†๋˜๋ฉด ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— idle timeout๋ฅผ ์„ค์ •ํ•œ๋‹ค.

Client timeout: 60
Load Balancer idle timeout: 30
Server keep-alive timeout: 75