[HTTP 완벽 가이드 정리] 01. HTTP: 웹의 기초 - 04. 커넥션 관리
4장 커넥션 관리에서는 HTTP에서 관리하는 TCP 커넥션에 대한 일반적인 오해들과 잘못 작성된 규칙 및 동작 방식에 대해서 알아본다.
[HTTP 완벽 가이드 정리] 01. HTTP: 웹의 기초 - 04. 커넥션 관리
📝 핵심 요약
주제 | 요약 |
---|---|
TCP 커넥션 | - 메시지의 손실 또는 손상 방지 및 순서 보장으로 안전하게 전달 - 데이터 스트림을 잘게 나눈 세그먼트 단위로 IP 패킷에 담겨 전송 |
TCP 성능에 대한 고려 | TCP 성능 최적화를 위해 지연에 대한 이해 필요 1) TCP 커넥션의 핸드셰이크 설정 2) 혼잡 제어를 위한 TCP의 느린 시작(slow-start) 3) 네이글(nagle) 알고리즘 4) 확인응답 지연 알고리즘 5) TIME_WAIT 지연과 포트 고갈 |
HTTP 커넥션 관리 | 병렬 / 지속 / 파이프라인 / 다중 커넥션을 통해 성능 향상 가능 |
병렬 커넥션 | - 병렬 커넥션의 지연 시간이 겹쳐짐으로써 총 지연시간 단축 가능 - 다수의 커넥션은 자원 낭비와 혼잡 초래 가능 |
지속 커넥션 | - 커넥션을 재사용함으로써 1) 커넥션을 맺기 위한 설정 비용을 줄이고 2) 느린 시작 지연을 피하여 성능 향상 가능 - HTTP/1.1 에서는 기본적으로 지속 커넥션 활성화되어 있음 - 커넥션 끊는 경우 Connection: close 헤더를 명시 |
파이프라인 커넥션 | - HTTP/1.1은 지속 커넥션을 통해 요청 파이프라이닝 가능 - 요청 전송 대기 시간 단축으로 성능 향상 가능하지만 1) 지속 연결 필요 2) 응답 순서 보장 필수 3) 연결 조기 종료 대비 필요 4) 문제가 발생할 수 있는 비멱등 요청은 파이프라이닝 지양 등의 제약 사항 존재 |
커넥션 끊기에 대한 미스터리 | - 커넥션은 언제든 끊을 수 있음 - 종료 타이밍이 어긋날 경우 reset 오류 발생할 수 있음 - reset 메시지는 입력 버퍼에 저장되어 있는 아직 읽히지 않은 데이터를 모두 삭제함 - 내 출력 채널을 먼저 끊고 다른 쪽 출력 채널이 끊기길 기다리는 게 좋지만, 그렇게 되지 않으면 타임아웃으로 커넥션 강제 종료 |
📌 이 장에서 다루는 내용
HTTP는 어떻게 TCP 커넥션을 사용하는가
TCP 커넥션의 지연, 병목, 막힘
병렬 커넥션, keep-alive 커넥션, 커넥션 파이프라인을 활용한 HTTP 최적화
커넥션 관리를 위해 따라야 할 규칙들
This post is licensed under CC BY 4.0 by the author.