반응형
✅ 소켓 (Socket)
: 네트워크 상에서 동작하는 프로그램 간 통신의 종착점
네트워크 통신 과정을 계층으로 나눴지만, 계층만 나눈다고 해서 바로 통신이 가능한 건 아니다.
각 계층의 프로토콜은 통신 규칙일 뿐이고 실제로 사용하려면 이를 구현할 함수들이 필요하다.
소켓은 이런 함수들을 이미 구현해 둔 형태로, 개발자는 복잡한 네트워크 원리를 몰라도 손쉽게 통신 프로그램을 만들 수 있다.
응용 프로그램은 소켓을 통해 전송 계층에 데이터를 전달하고 이 과정을 통해 통신이 이루어진다.
📍소켓 통신
- 서버와 클라이언트의 프로세스는 실시간 양방향 통신을 하기 위해 각각 소켓을 생성해야 한다.
- 소켓은 데이터를 주고받기 위한 연결 지점으로, 통신하려면 서버와 클라이언트 양쪽 모두 소켓이 필요하다.
- 각 프로세스는 고유한 포트 번호를 가진다. 하나의 프로세스가 여러 개의 소켓을 가질 수도 있다.
- 소켓은 생성될 때 IP 주소, 포트 번호, 프로토콜 정보 등을 기반으로 구성된다.
- 일반적으로 소켓 주소는 IP:포트 형식으로 표현된다.
- ex) 192.168.1.10:23
- 하나의 포트를 기준으로도 여러 개의 소켓을 만들어 서로 다른 호스트와 통신할 수 있다.
- 통신이 끝나면 소켓은 자동으로 닫히거나 삭제되어 자원을 해제하게 된다.
✅ 웹 소켓 (Web Socket)
: 클라이언트와 서버 간 지속적인 양방향 통신을 가능하게 하는 웹 기반 프로토콜
기존의 HTTP는 클라이언트가 요청하면 서버가 응답하는 구조로 단방향 통신만 가능하다.
연결도 지속되지 않기 때문에 실시간 데이터가 필요한 서비스에는 적합하지 않았다.
그래서 과거에는 실시간성을 흉내 내기 위해 아래와 같은 방식들이 사용됐다
- Polling: 일정 주기로 서버에 계속 요청을 보내는 방식
- Streaming: 서버가 응답을 끝내지 않고 연결을 유지한 채 이벤트가 발생할 때마다 데이터를 보내는 방식
하지만 이 방식들은 브라우저마다 구현이 다르고, 성능도 비효율적이었다.
이러한 문제를 해결하기 위해 HTML5 표준의 일부로 WebSocket 프로토콜이 만들어지게 된 것이다.
- HTTP/HTTPS 위에서 동작
- 기존 포트(80/443)를 그대로 사용 가능
- 연결이 성립되면 클라이언트와 서버가 실시간으로 자유롭게 데이터를 주고받을 수 있음
- 반복적인 요청-응답 없이도 상태를 유지한 채 빠르게 양방향 통신이 가능함
✨ 추가 질문
[ 웹 소켓 vs. 소켓 ]
소켓은 인터넷 프로토콜에 기반하기 때문에 4 계층에 위치한다.
웹 소켓은 TCP에 의존하지만 HTTP 기반으로 동작하므로 7 계층에 위치한다.
[ 소켓과 포트의 차이가 무엇인가요? ]
소켓은 IP와 포트 번호를 가지고 만들어진 통신의 종착점이다.
따라서 소켓은 포트를 포함해서 IP까지 가진 양 끝단의 인터페이스를 의미한다.
[ 여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가요? ]
여러 소켓이 있더라도 포트 번호는 같을 수 있다.
소켓은 IP + 포트 조합으로 구분되기 때문에 포트가 중복돼도 구분이 가능하다.
[ 사용자의 요청이 무수히 많아지면, 소켓도 무수히 생성되나요? ]
이론상으로는 TCP 기준으로는 클라이언트의 연결 요청마다 소켓이 별도로 생성된다.
현실적으로 OS자원의 한계가 있기 때문에 무한히 생성되는 것은 불가능하다.
반응형
'⚙️ CS > 네트워크' 카테고리의 다른 글
| [네트워크] SOP와 CORS & REST (3) | 2025.05.20 |
|---|---|
| [네트워크] HTTPS 프로토콜 (1) | 2025.05.18 |
| [네트워크] IP 주소 & 서브넷 (1) | 2025.04.10 |
| [네트워크] UDP/TCP (0) | 2025.04.03 |