개발/HTTP

[HTTP] 커넥션 관리

devhooney 2022. 8. 8. 09:12
728x90

HTTP 완벽가이드 읽은 후 정리

- HTTP는 어떻게 TCP 커넥션을 사용하는가

- TCP 커넥션의 지연, 병목, 막힘

- 병렬  커넥션, keep-alive 커넥션, 커넥션 파이프라인을 활용한 HTTP의 최적화

- 커넥션 관리를 위해 따라야할 규칙들

 

1. TCP 커넥션

- HTTP 통신은 패킷 교환 네트워크 프로토콜들의 계층화된 집합인 TCP/IP를 통해 이루어진다.

- 커넥션이 맺어지면 클라이언트와 서버 간에 주고 받는 메시지들은 안전하게 전달된다.

 

신뢰할 수 있는 데이터 전송 통로인 TCP

- TCP 커넥션은 인터넷을 안정적으로 연결해준다.

- TCP는 충돌 없이 순서에 맞게 HTTP 데이터를 전달한다.

 

TCP 스트림은 세그먼트로 나뉘어 IP 패킷을 통해 전송

- TCP는 IP패킷이라고 불리는 작은 조각을 통해 데이터를 전달한다.

- TCP는 세그먼트 단위로 데이터 스트림을 잘게 나누고, 세그먼트를 IP패킷을 통해 전달한다.

- TCP 세그먼트는 하나의 IP 주소에서 다른 IP 주소로 IP 패킷에 담겨 전달한다.

 

TCP 커넥션 유지하기

- TCP는 포트 번호를 통해서 여러 개의 커넥션을 유지한다.

 

TCP 소켓 프로그래밍

- 소켓 API를 사용하면,  TCP 종단(Endpoint) 데이터 구조를 생성하고, 원격 서버의 TCP 종단에 그 종단 데이터 구조를 연결하여 데이터 스트림을 읽고 쓸 수 있다.

 

2. TCP 성능에 대한 고려

- HTTP는 TCP 바로 위에 있는 계층이기 때문에 HTTP 트랜잭션의 성능은 TCP 성능에 영향을 받는다.

 

HTTP 트랜잭션 지연

- HTTP 트랜잭션을 지연시키는 원인

(1) 클라이언트는 URI에서 웹 서버의 IP 주소와 포트 번호를 알아내기 위해 URI에 있는 호스트명을 IP주소로 변환하는 과정

(2) TCP 커넥션 요청을 서버에 보내고 서버가 응답을 회신하기를 기다리는 과정

(3) 클라이언트에서 보낸 요청 메시지를 서버에서 처리하는 과정

(4) 서버에서 HTTP 응답을 보내는 과정

 

TCP 커넥션 핸드셰이크 지연

- 어떤 데이터를 전송하든 새로운 TCP 커넥션을 열 때면, TCP 소프트웨어는 커넥션을 맺기 위한 조건을 맞추기 위해 연속으로 IP 패킷을 교환한다. 작은 크기의 데이터 전송에 커넥션이 사용되면 HTTP 성능을 크게 저하시킬 수 있다.

 

확인응답 지연

- TCP는 데이터 전송을 보장하기 위해서 자체적인 확인 체계(확인응답)를 가진다.

- 확인응답 지연은 송출할 확인응답을 특정 시간 동안 버퍼에 저장해 두고, 확인응답을 편승시키기 위한 송출 데이터 패킷을 찾는다.

- 일정 시간 안에 송출 데이터 패킷을 찾지 못하면 확인응답은 별도 패킷을 만들어 전송된다.

- HTTP 동작 방식에서 확인응답이 편승할 패킷이 많이 않아서 지연이 발생한다.

 

3. HTTP 커넥션 관리

커넥션 헤더

- HTTP는 클라이언트와 서버 사이에 프록시 서버, 캐시 서버 등과 같은 중개 서버를 둘 수 있다.

- HTTP 메시지는 여러 서버를 거치면서 전달된다.

- HTTP 커넥션 헤더 필드는 커넥션 토큰을 쉼표로 구분하여 가지고 있다.

- 커넥션 헤더에 있는 모든 헤더 필드는 메시지를 다른 곳으로 전달하는 시점에 삭제된다.

 

순차적인 트랜잭션 처리에 의한 지연

- 순차적으로 트랜잭션 처리를 하면 트랜잭션이 적을 때는 상관 없지만 트랜잭션이 여러개 일 경우 오래걸린다.

- HTTP 커넥션을 향상시킬 수 있는 기술

(1) 병렬 커넥션: 여러 개의 TCP 커넥션을 통한 동시 HTTP 요청

(2) 지속 커넥션: 커넥션을 맺고 끊는 데서 발생하는 지연을 제거하기 위한 TCP 커넥션의 재활용

(3) 파이프라인 커넥션: 공유 TCP 커넥션을 통한 병렬 HTTP 요청

(4) 다중 커넥션: 요청과 응답들에 대한 중재

728x90

'개발 > HTTP' 카테고리의 다른 글

[HTTP] HTTP 메시지  (0) 2022.07.06
[HTTP] URL과 리소스  (0) 2022.07.05
[HTTP] HTTP 개관  (0) 2022.07.01