Keep Alive
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