모든 개발자를 위한 HTTP

모든 개발자를 위한 HTTP 웹 - 3. HTTP 기본 - 비 연결성

정현3 2022. 9. 9. 11:05

-> stateless : 클라이언트와 서버 사이에 상태를 유지하지 않는다.
-> connectionless : TCP/IP 커넥션 연결을 지속하지 않는다.

< 질문 정리 >

Q. Persistence Connections가 언제까지 유지되어야 하는 규칙이 있는가? Psersistence Connections를 비연결성과 연결성의 중간지점이라고 생각해도 되는가?

-> 기본적으로 HTTP는 연결을 유지하지 않는 모델로 '비 연결성' 특징이 있다.
'비 연결성'은 클라이언트의 요청이 올때마다 3 way handshake를 해야한다는 한계를 갖고 있다. 그래서 불필요하게 많은 3 way handshake 횟수를 줄이기 위해 Persistence Connections라는 것이 나오게 되었다. 한 번 열결이 되면 일정 시간동안 연결을 유지하고 필요한 자원의 요청과 응답을 어느정도 하고 난 후, 연결을 종료하는 것이다. '연결 지속 시간'은 보통 60초를 유지하고 서버쪽에서 해당설정을 할 수 있다. 요즘에는 '웹 서버'에서 기본적으로 Persistent Connection을 적용하기 때문에, 따로 설정해 줄 필요는 없다.
-> Persistent Connections는 기본적으로 비연결성이지만 '성능 최적화'를 위해 약간의 연결을 유지하는 특성을 갖고있다.

Q. 접속량이 많은 경우, 대기열을 부여하는 경우가 많다. 서버가 여러 대가 있을 때, 대기인원의 '순서 동기화'가 어떻게 이루어지는가?

-> 보통 별도의 대기열을 관리하는 서버를 두고 거기서 대기열 순서를 관리한다.

Q. HTTP 프로토콜과 3 way handshake는 어떤 관계인가? 

-> 우선 서버에 대해 TCP/IP 연결을 진행하고, 연결이 완료되면 HTTP 요청과 응답을 주고 받게 된다.
브라우저에서 URL을 입력하고 엔터를 누르면
1. DNS 서버에서 해당 URL의 IP를 조회한다.
2. 해당 IP에 해당하는 서버와 TCP/IP 연결을 한다.
3. 연결이 되면, HTTP 요청/응답을 한다.

Q. HTTP 프로토콜은 TCP 기반인데, TCP는 연결지향, HTTP는 비연결성이라는 특성을 가지고 있는 이유는?

1. TCP는 UDP와는 다르게 3 way handshake를 통해 요청을 보낼 서버와 연결할 수 있는지 체크한다는 점에서 '연결 지향적'인것이다.
2. HTTP는 SOCKET 통신과 다르게 클라이언트가 요청을 할 때만다 연결을 하고 응답이 끝나면 연결을 종료하는 '비 연결성'인 것이다. 

-> 말 자체가 '모순' 된 것이다.