티스토리 뷰
2022 우아한스터디 "HTTP 완벽가이드"를 진행하면서
'HTTP 완벽 가이드' 책을 읽고, 글쓴이의 생각을 정리하는 글 입니다.
https://book.naver.com/bookdb/book_detail.nhn?bid=8509980
HTTP connection은
1. 브라우저의 호스트 명을 추출한다
2. DNS를 통해서 호스트 명에 대응되는 IP주소를 획득한다.
3. 브라우저의 포트 번호를 획득한다.
4. 브라우저가 호스트 명 + 포트 번호에 해당하는 TCP connection을 생성한다.
5. 브라우저가 서버로 HTTP 요청을 보낸다.
6. 서버가 브라우저한태 HTTP 반응을 보낸다.
7. 브라우저가 커넥션을 끊는다.
정리하면 DNS찾기 -> 연결 -> 요청 -> 처리 -> 응답 -> 종료 순서가 됩니다
의 순서로 진행됩니다.
1. TCP Connection
TCP Connection은 운영체제에서 제공하는 TCP 소켓 프로그래밍을 통해서 가능합니다.
Server에서는 소켓을 생성하고, 이 소켓을 Listen 상태로 만들어 Clinet의 Connection을 기다립니다.
이때, Clinet는 3번까지 지난 후 확보된 호스트의 IP + 포트번호를 사용해서 Server에 Connection을 하게 되죠.
그럼 Server는 Client의 요청을 확인 한 뒤 연결이 성공했냐, 안했느냐를 통보하게되고
성공하게 되면 해당 Socket을 통해서 데이터를 주고 받게 됩니다.
즉, 위 내용을 통해서 알수 있는 부분은
나, 여러분, 우리가 웹서버를 위해 사용하는 Django나 Flask, Spring등의 프래임워크는 결국 Low Level에서는 소켓서버를 사용해서 사용자의 Requests를 처리한다고 할 수 있습니다.
2. Connection 핸드쉐이크 지연
위 과정대로라면, Client는 Requests를 보낼 때 마다 서버에 연결 여부를 확인하고, 그 이후에 데이터 전송이 가능합니다.
이때 Client의 Requests가 반복되거나, 작은 단위의 Data가 많이 Requests될 경우 연결 여부를 계속 확인해야하고, 이 과정에서 사용자는 서비스의 지연을 겪게됩니다.
이러한 지연을 Connection 핸드쉐이크 지연 이라고 하며, 이러한 문제점을 개선하기 위한 다양한 방법들이 도입되었습니다.
3. TCP Slow Start
TCP전송으로 한번에 많은 패킷이 전송되면 서버에서 문제가 발생할 수가 있다
(소켓 과부하 라던가....)
이를 방지하기 위해서 1개의 패킷보냄 - 1개 처리 -> 2개 - > 4개....
와 같이 점차적으로 해당 Connection을 튜닝 한다.
이러한 연결 관리방법을 TCP Slow Start라고 한다.
4. 트래잭션 처리의 개선
하지만 결국 트랙잭션을 빠르게 하기 위해서는 Slow고 Fast고 좀 다른 접근이 필요합니다.
이를 위해서
4_1. 병렬 커넥션
4_2. 지속 커넥션
4_3. 파이프라인 커넥션
4_4. 다중 커넥션
이름을 보면 알 수 있듯, Requests를 겹쳐서 실행하고, Requests처리 전 핸드쉐이킹 지연을 최소화 하는 방버들이 사용됩니다.
다음 포스팅에서 해당 내용에 대한 세부적인 내용에 대해서 다룹니다.
'네트워크 > HTTP' 카테고리의 다른 글
6. 멍청한 Proxy (0) | 2022.05.22 |
---|---|
5. 커넥션 관리(2편) (0) | 2022.05.22 |
3. HTTP 메세지 (0) | 2022.05.08 |
2. URL과 리소스 (0) | 2022.05.08 |
1. HTTP란 무엇인가? (0) | 2022.05.08 |
- Total
- Today
- Yesterday
- 분할정복
- 자료구조
- prime number
- Python
- 이분탐색
- git
- AVX
- Greedy알고리즘
- GDC
- 컴퓨터그래픽스
- Search알고리즘
- C++
- SIMD
- hash
- stack
- 알고리즘
- heap
- 동적계획법
- Sort알고리즘
- 프로그래머스
- 병렬처리
- 사칙연산
- 완전탐색 알고리즘
- 코딩테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |