TIL(Today I Learned)

[TIL - 3주차] 서버와 클라이언트간의 웹 통신

lungjae 2025. 7. 18. 21:39

서버와 클라이언트간의 웹 통신은 HTTP프로토콜을 기반으로 요청(request)-응답(response) 패턴으로 이루어집니다.

 

 

통신 순서


1. 클라이언트가 요청 생성(HTTP request)
예를 들어 사용자가 도메인 이름(e.g. www.naver.com)을 입력하는 순간, 서버에 HTTP 요청을 보냅니다. 이 요청은 URL, 메서드(GET, POST 등 요청의 유형을 담고있는 정보값), 헤더, 쿠기, 바디 등의 정보를 담고있습니다.


서버에 보내는 HTTP요청과는 별개로, 해당 도메인 이름(www.naver.com)이 어느 IP주소인지 알기 위해, DNS(Domain Name System)질의를 통해 이 도메인 이름에 맞는 IP값을 얻어냅니다. 이를 통해 IP값을 얻어내기 전까지는 HTTP request를 보낼 수 없습니다.

 

 

2. TCP 3-Way 핸드셰이킹
IP값을 받았다면, 클라이언트는 해당 IP주소와 TCP 3-way 핸드셰이킹을 통해 연결을 맺습니다. 이 때 TCP 포트는 HTTP의 경우 80, HTTPS의 경우 443번 포트를 사용합니다.

 

 

3. 서버가 요청을 처리
서버는 클라이언트가 요청한 정보에 따라 필요한 처리를 수행합니다. 데이터베이스에서 정보를 조회하거나, HTML파일을 읽는 등의 로직을 수행하거나.. 등 여러 작업이 될 수 있습니다.

 

 

4. 서버가 응답을 전송(HTTP response)
서버는 요청의 결과를 클라이언트에 보냅니다. HTTP response에는 상태 코드(404, 200..등), 응답 헤더, 응답 본문이 포함됩니다.

 

 

5. 클라이언트가 응답 처리 및 렌더링
사용자의 브라우저는 응답을 받아서 내용을 해석하고, 사용자에게 웹 페이지를 렌더링합니다. 만약 CSS, 이미지, JS등이 포함되어있다면, 브라우저는 추가적으로 해당 리소스에 대해 서버에 별도의 요청을 보냅니다.

 

 

 

TCP 3-Way 핸드셰이킹

3-Way 핸드셰이킹이란 서버와 클라이언트가 신뢰성있는 연결을 만들기 위한 작업입니다. 이 과정을 마치고나면 서버와 클라이언트는 연결을 맺고, 시퀀스 번호를 동기화하며, 양측이 통신 준비가 되었음을 보장할 수 있습니다.

TCP 3-Way 핸드셰이킹은 SYN → SYN-ACK → ACK로 이루어지며, 각각이 의미하는 바는 다음과 같습니다.

 

클라이언트가 서버측에 연결을 요청
이 떄, "자신의 초기 시퀀스 번호"를 패킷에 담아서 전송합니다.


클라이언트의 연결 요청 수락 + 서버측도 통신 준비가 완료되었다는 신호를 보냄
이 때, "클라이언트의 시퀀스번호 + 1"과 "서버의 시퀀스번호"를 패킷에 담아서 전송합니다.

 

서버의 SYN-ACK 응답을 잘 확인 했다는 신호를 보냄
이 떄, "서버의 시퀀스번호 + 1"를 패킷에 담아 서버에 전송합니다.

이 과정을 마치고나면 서버와 클라이언트가 신뢰성있는 통신을 할 준비가 됩니다.