해당 글은 VSFe 깃허브 레포를 참고하여 작성한 글입니다. (아래 출처에 표기)
❗️해당 글은 프로토콜 스택, IP, TCP, UDP, 포트, 소켓에 대한 이해가 필요하다. 여기를 참고하면 좋을 것 같다.
✅ 웹소켓과 소켓의 통신의 차이에 대해 설명해 주세요.
웹소켓(Web Socket)과 소켓(Socket)은 모드 네트워크 상에서 데이터 교환을 위한 기술이다.
▶ 소켓
- 기본 개념
- 네트워크에서 데이터를 주고받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결점
- 일반적으로 TCP/IP 프로토콜을 사용하여 데이터 송수신을 처리한다.
- 프로토콜
- TCP (Transmission Control Protocol): 신뢰성 있는 연결 지향 프로토콜로, 패킷의 순서와 무결성을 보장한다.
- UDP (User Datagram Protocol): 비연결형 프로토콜로, 속도는 빠르지만 패킷의 순서나 무결성을 보장하지 않는다.
- 통신 방식
- 클라이언트 소켓 생성: 연결 대상에 대한 정보가 들어있지 않은 Socket을 생성한다.
- 연결 설정: 클라이언트가 서버에 연결 요청을 보내고, 서버가 이를 수락하면 연결이 완료된다.
- 데이터 송수신: 설정된 연결을 통해 데이터를 주고받는다.
- 연결 해제: 통신이 끝나면 소켓을 닫아 연결을 해제한다.
- 사용 사례
- 일반적인 네트워크 애플리케이션 (예: 파일 전송, 이메일)
▶ 웹소켓
- 기본 개념
- 웹 애플리케이션에서 사용할 수 있도록 설계된 프로토콜로, HTTP를 통해 초기 연결을 설정하고 그 후에 지속적인 양방향 통신을 가능하게 한다.
- HTTP에서 실시간 통신을 할 수 없다는 문제를 해결하기 위해 나온 기술이다.
HTTP 실시간 통신이 어려운 이유
1. 비연결성으로 인한 단방향 통신
2. 비연결성으로 인한 매번 연결을 맺고 끊는 과정의 비용
3. request-response 구조
4. 헤더의 비중이 너무 큼 (실시간성으로 많은 데이터를 주고 받는 경우 부담이 됨)
- 프로토콜
- WebSocket Protocol: HTTP 업그레이드 요청을 통해 초기 연결을 설정한 후, 지속적인 연결을 유지하며 데이터 프레임을 주고받는다.
- 통신 방식
- 초기 Handshake: 클라이언트가 서버에 HTTP "업그레이드" 요청을 보내고, 서버가 이를 수락하면 웹소켓 연결이 설정된다.
- 지속적인 통신: 연결이 설정되면, 양방향으로 데이터를 실시간으로 주고받을 수 있다.
- 연결 해제: 필요에 따라 클라이언트나 서버가 연결을 종료할 수 있다.
- 사용 사례
- 실시간 웹 애플리케이션 (예: 채팅 애플리케이션, 주식 거래 플랫폼, 실시간 게임)
▶ 소켓과 웹소켓의 차이점
일반 TCP 소켓 | 웹소켓 | |
목적 | 신뢰성 있는 연결 지향형, 양방향 데이터 스트림 제공 | 웹 애플리케이션과 서버 간의 실시간 통신 |
연결 방식 | 3-way handshake를 통한 연결 설정 후 지속적 데이터 교환 | HTTP Handshake를 통한 연결 설정 후 지속적 양방향 통신 |
프로토콜 구조 | TCP/IP 스택에서 동작 | HTTP/1.1 기반 |
데이터 교환 방식 | 스트림 기반, 바이트 단위 데이터 교환 | 메시지 기반, 메시지 단위 데이터 교환 |
프로토콜 호환성 | 다양한 응용 프로토콜과 호환 가능 | HTML5와 관련된 웹 기술에 특화 |
포트 번호 | 예약된 포트 없음, 애플리케이션에 따라 다름 | 일반적으로 HTTP(80) 또는 HTTPS(443) 포트 사용 |
지원하는 플랫폼 | 다양한 운영 체제와 플랫폼에서 호환 | 주로 웹 브라우저 및 웹 서버 환경에서 사용 |
사실 웹 소켓과 TCP 소켓은 상반되는 개념이 아니기 때문에 완전한 차이점을 비교할 수 없다. 웹에서도 TCP 소켓 통신으로 실시간 통신을 할 수 있지만 전송 계층의 원시 바이트 대신 애플리케이션 계층을 통해 메시지를 보내는 것이 개발 측면에서 더 적합하기 때문에 TCP 소켓 통신에 기반하여 웹 소켓을 발전시킨 것이기 때문이다. 한마디로 웹 소켓은 TCP 소켓과 구분되는 것이 아니라 TCP 소켓의 추상화된 형태이다.
✅ 소켓과 포트의 차이가 무엇인가요?
▶ 소켓
- 개념: 컴퓨터 네트워크에서 프로세스 간에 통신을 가능하게 하는 창구이다. 소켓은 IP 주소와 포트를 조합하여 특정 네트워크 연결을 식별한다.
- 역할: 소켓은 애플리케이션이 네트워크 통신을 시작하고, 데이터를 보내고, 응답을 받는 데 사용된다. 소켓은 일반적으로 클라이언트와 통신 세션을 생성하고 관리하는 데 사용된다.
프로세스: 네트워크에 연결된 모든 종류의 장치를 노드라고 부르며, 노드 중에서도 네트워크 주소(IP 주소)가 할당된 노드를 호스트라고 부른다. 이 호스트 안에서는 여러 개의 프로세스(ex: 프로그램, 애플리케이션, 앱 등)들이 존재한다. 네트워크 공간 상에서 데이터를 주고받는다는 것은 호스트의 프로세스까지 데이터가 오고 감을 의미한다.
▶ 포트
- 개념: 포트는 컴퓨터 내에서 특정 애플리케이션을 구분하는 숫자로, 소켓을 연결하기 위한 통로이다.
- 역할: 호스트에서 동작하는 여러 프로세스 중 실제로 이 데이터를 받아야 하는 프로세스에 전달되어야 하는데, 이를 식별할 수 있게 해 준다.
✅ 여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가요?
- 여러 소켓의 포트 번호가 같을 수 있다. 같은 프로세스가 같은 포트를 가지고 여러 개의 소켓을 열 수 있기 때문이다.
- 포트 번호가 같은 예시: 온라인 게임 서버는 수천 명의 플레이어가 동시에 서버에 접속하지만, 서버의 동일한 포트에서 접속한다. 게임 서버는 각 플레이어와의 연결을 별도의 소켓으로 관리한다.
소켓은 포트 번호 외에도 IP 주소, 프로토콜, 연결 정보 등으로 구성되어 있고, 고유한 소켓 식별자를 통해 식별된다.
✅ 사용자의 요청이 무수히 많아지면, 소켓도 무수히 생성되나요?
- 사용자의 요청이 증가함에 따라 서버가 처리해야 하는 소켓도 증가한다. 다만 고려 사항이 있다.
- 각 클라이언트 요청은 일반적으로 소켓을 생성하지만, 서버는 동시에 처리할 수 있는 소켓의 수에 제한이 있다. 따라서 대규모로 사용자 요청이 증가하는 경우, 서버는 소켓 풀링, 비동기 처리, 로드 밸런싱(부하 분산)과 같은 기술을 사용하여 효율적으로 요청을 처리하고 리소스를 관리해야 한다.
📍 문제 출처
Tech-Interview / 03-NETWORK.md
📍 참고 자료
'Programming > Network' 카테고리의 다른 글
[Network] TCP, UDP (0) | 2024.07.28 |
---|---|
[Network] HTTP/1.1, HTTP/2.0, HTTP/3.0 (0) | 2024.07.28 |
[Network] HTTP와 HTTPS의 보안 - 대칭키/공개키, SSL/TLS (0) | 2024.07.28 |
[Network] HTTP Method (0) | 2024.07.23 |
[Network] HTTP 응답 코드 (0) | 2024.07.19 |