주소창에 url을 입력하면 DNS서버(domain name system의 약자로 도메인 이름과 IP 주소를 매핑해주는 서버)에 요청하기 전에 먼저 CDN에 캐싱된 dns 기록들을 확인한다.
콘텐츠 전송 네트워크
로 여러 개의 서버를 이용해 웹 콘텐츠를 사용자와 가까운 서버에서 전송함으로써 전송 속도를 높인다는 장점을 가진다. AWS나 SK브로드밴드, KT 등의 예가 있다.만약 캐싱된 기록이 있으면 요청을 보내지 않고 바로 ip 주소를 반환하고 없으면 dns 서버 요청으로 넘어간다.
가장 가까운 dns 서버에서 도메인 이름에 해당하는 IP 주소를 찾기 위해 dns query를 전달한다.
dns query는 현재 dns 서버에서 원하는 ip 주소가 존재하지 않으면 다른 dns 서버를 방문하는 과정을 원하는 IP 주소를 찾을 때까지 반복한다.
찾던 IP 주소를 전달 받으면 이 IP 주소를 이용하여 웹 브라우저는 웹 서버에게 해당 웹 사이트에 맞는 html 문서를 요청한다.
해당 HTTP 요청 메세지는 TCP/IP 프로토콜을 사용하여 서버로 전송된다.
전송 제어 프로토콜인 TCP는 데이터의 전송을 제어하고 데이터를 어떻게 보낼지 어떻게 맞출지? 정한다.
IP의 특징인 비신뢰성과 비연결성으로 인해 IP 프로토콜 만으로는 통신을 할 수 없기 때문에 신뢰성과 연결성을 책임지는 TCP를 활용하여 통신한다.
TCP는 3-웨이 핸드셰이크
라는 작업을 진행하면서 연결 및 데이터를 수신받는다.
1. SYN단계 : 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다.
2. SYN + ACK 단계 : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다.
3. ACK 단계 : 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보낸다.
이렇게 3-웨이 핸드셰이킹 과정 이후 신뢰성이 구축되고 데이터 전송을 시작한다.
- SYN : SYNchronization의 약자, 연결 요청 플래그
- ACK : Acknowledgement의 약자, 응답 플래그
- ISN : Initial Sequence Numbers의 약자로 초기 네트워크 연결을 할 때 할당된 32비트의 고유 시퀀스 번호
4-웨이 핸드셰이크
라는 과정을 통해 연결을 종료한다.
1. 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다.
2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고 자신의 통신이 끝날 때까지 기다린다.
3. 서버는 일정 시간 이후 클라이언트에 FIN이라는 세그먼트를 보낸다.
4. 클라이언트는 확인했다는 메세지인 ACK를 보내고 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.
특정 데이터 요청을 브라우저로부터 받게되면 웹 서버는 페이지의 로직이나 데이터베이스 연동을 위해 WAS에게 이들의 처리를 요청한다. 웹 서버의 과부하 방지를 위한 WAS(사용자의 컴퓨터나 장치에 웹 어플리케이션을 수행해주는 미들웨어)는 해당 요청을 통해 동적인 페이지 처리를 담당하고 DB에서 필요한 데이터 정보를 받아 그에 맞는 파일을 생성한다.
웹 서버 : 정적인 파일(HTML, CSS, 이미지 파일)을 처리
WAS : 동적인 파일(JS, TS)을 처리
WAS에서의 작업 처리 결과들을 웹 서버로 전송하고, 웹 서버는 웹 브라우저에게 html 문서 결과를 전달한다.
전달 과정에서 status code를 통해 서버 요청에 따른 결과 및 상태를 전달한다.
💡