-
HTTP 완벽 가이드 4장 커넥션 관리Web Dev/7. 네트워크 2021. 1. 14. 21:15728x90
다른 많은 중요한 내용이 있었지만, 성능관련 내용 특히 정리하기
- TCP 성능 관련 중요 요소
- TCP 커넥션의 핸드셰이크 설정
- 인터넷의 혼잡을 제어하기 위한 TCP의 느린 시작(slow-start)
- 데이터를 한데 모아 한번에 전송하기 위한 네이글 알고리즘
- TCP편승 황인응답을 위한 확인 응답 지연 알고리즘
- TIME_WAIT 지연과 포트 고갈
-HTTP 커넥션 관리
- connection 헤더란?
- HTTP는 클라이언트와 서버 사이에 프락시 서버, 캐시 서버 등과 같은 중개 서버가 놓이는 것을 허락한다. HTTP 메시지는 클라이언트에서 서버(혹은 리버스 서버)까지 중개 서버들을 하나하나 거치면서 전달된다.
- 두개의 인접한 HTTP 애플리케이션이 현재 맺고 있는 커넥션에만 적용될 옵션을 지정해야할때가 있다. 이때 HTTP Connection 헤더필드를 사용하고, 이 값들은 다른 커넥션에는 전달하면안된다.
- 커넥션 정보는 홉 별이라 다른데로 넘어갈때는 지워야한다.
- 순차적인 트랜잭션
- 매번 커넥션맺고 끊고 slow start때매 지연이 있다.
- TTP 커넥션의 성능을 향상 시키는 방법 네가지
- 병렬(parallel) 커넥션: 여러개의 TCP 커넥션을 통한 동시 HTTP 요청
- 커넥션마다도 메모리를 소모하기때문에 꼭 성능이 더 좋은 것은 아니고, 백명의 사용자가 100개씩 커넥션 맺고 그러면 큰일나서 많아도 한번에 4개정도 처리하게 한다고 한다.
- 지속(persistent) 커넥션: 커넥션을 맺고 끊는데서 발생하는 지연을 제거하기 위한 TCP 커넥션의 재활용
- 처리가 끝난후에도 커넥션이 게속 열려있는것이라, 클라이언트나 서버가 끊기 전까진 커넥션이 계속 열려있는 것을 말한다.
- HTTP 1.0의 Keep-Alive: 여기서 도입해가지구, 지속커넥션을 하기위해썼다.
- HTTP/1.1에서는 이게 명세에서는 빠졌다.근데 많이 쓰이고 있어서 애플리케이션은 그것을 처리할 수있게 개발해야한다.
- HTTP/1.0 keep-alive 커넥션을 구현했으면 요청에 Connection: Keep-Alive 헤더를 포함시킨다.
- 서버는 요청을 받고, 지원가능하면 응답에 Connection: Keep-Alive를 포함시킨다.
- 클라이언트는 그러면 이 응답을 보고 응답에 Connection: Keep-Alive 가 있으면, 오 커넥션 열려있구나, 없으면 음.. 안되는구나 한다.
- 근데 요청했다고 무조건 해주는건아니고, 상황 봐가면서 한다고 한다 .
- Keep Alive 와는 멍청한 프락시 문제가있다.
- 멍청한 프락시는 Connection: Keep-Alive 를 보고 뭔지 모르고 그냥 다음 홉에 패스해버리는데, 이 서버는 Keep-Alive하라고 시키니까, 커넥션을 열어둔다.
- 그리고 서버가 Keep-Alive 하겠다고 답변 보내고, 또 이 멍청한 프락시가 고걸 그대로 클라이언트에 갖다준다. 이때 아주 서버와 클라이언트는 단단히 오해가 생겨버렸다. 둘다 Keep-Alive 되있는줄아는데, 멍청한 프락시는 그게 뭐요? 하는 중인것이다.
- 그래서 다음에 클라이언트는 당연히 Keep-Alive인줄알고 요청을 보냈는데, 프락시 서버는 서버로부터 Connection을 close하라고 안와서 의아한 상태에 빠져버렸다. 그래서 클라이언트가 요청을 계속 보내고 서버도 Keep-Alive라고하니까 막상 답장은 보내는데, 멍청한 프락시는 뭐요, 왜 종료를 안하는거요? 하는 상태에 빠져버리는 것
- 파이프라인(pipelined) 커넥션: 공유 TCP 커넥션을 통한 병렬 HTTP 요청
- 요청을 파이프라이닝에서 Keep-Alive 커넥션의 성능을 높이는 것.
- 커넥션이 지속커넥션인지 확인하기전에는 파이프라이닝을 하면안된다.
- 응답은 반드시요청 순서와 같게 와야한다.
- developer.mozilla.org/ko/docs/Web/HTTP/Connection_management_in_HTTP_1.x
- 다중(multiplexed) 커넥션: 요청과 읃압들에 대한 중재
- 병렬(parallel) 커넥션: 여러개의 TCP 커넥션을 통한 동시 HTTP 요청
후기
'Web Dev > 7. 네트워크' 카테고리의 다른 글
HTTP 완벽 가이드 7장 캐쉬 (0) 2021.01.30 HTTP 완벽 가이드 5장 웹서버 (0) 2021.01.17 HTTP 완벽 가이드 3장 HTTP 메시지 (0) 2021.01.14 HTTP 완벽 가이드 2장 URI과 리소스 (2) 2021.01.14 HTTP 완벽 가이드 정리하기 (2) 2021.01.14