🪸 3-way Handshake (3단계 핸드셰이크)
3-way 핸드셰이크는 TCP 연결을 설정하는 과정. 두 장치(클라이언트와 서버)가 서로 신뢰할 수 있는 연결을 시작하기 위해, 세 번의 메시지를 주고받는다.
이 과정이 완료되어야 데이터 전송이 가능해진다.
🥉 3-way Handshake의 간단한 과정
1. SYN (Synchronization)
클라이언트가 서버에게 "연결을 시작하고 싶다"는 메시지(SYN)를 보냅니다.
2. SYN-ACK (Acknowledgment)
서버는 요청을 받고, "나도 준비됐어"라는 의미로 SYN-ACK 메시지를 응답합니다.
3. ACK (Acknowledgment)
- 클라이언트가 서버로부터 응답을 받으면, "이제 데이터 전송을 시작하자"는 마지막 응답(ACK)을 보냅니다.
- 이로써 연결이 완료되고 양쪽이 데이터를 주고받을 수 있게 됩니다.
🥉 간단한 예시
- 클라이언트: "서버야, 나랑 연결할래?" (SYN)
- 서버 : "그래, 준비됐어. 너도 괜찮니?" (SYN-ACK)
- 클라이언트 : "좋아, 이제 데이터 보내자!" (ACK)
🥉 왜 중요한가? (프론트엔드 개발자 관점)
- 지연 시간 : HTTP 요청을 보낼 때 TCP의 3-way 핸드셰이크가 연결 시간에 영향을 미친다. 이 과정 때문에 첫 연결에 약간의 지연이 생긴다.
- HTTPS와 추가 핸드셰이크 : HTTPS는 TLS 핸드셰이크까지 추가되므로 더 느릴 수 있다. 이 때문에 HTTP/2나 HTTP/3 같은 개선된 프로토콜이 사용된다.
- 실시간 통신 최적화 : 웹소켓 같은 실시간 통신에서는 3-way 핸드셰이크 이후에 한 번 연결을 유지해 여러 데이터를 주고받는 방식으로 효율을 제고.
➡️ 프론트엔드 개발자는 3-way 핸드셰이크가 TCP 연결을 설정하는 데 필요하며, 첫 요청 시 지연의 원인이 될 수 있음을 이해하면 충분하다. 이를 통해 성능 최적화, HTTPS 적용, 그리고 웹소켓 연결 유지의 중요성 등을 알 수 있다.