웹 소켓(Socket) 통신에 대해 정리하는 이유
현재 회사에서 Iot 사물로부터 데이터를 수신해와서 해당 데이터로 저희가 원하는 웹사이트를 만드는 업무를 주로 하고 있는데 해당 데이터를 송수신 하는 부분을 웹 소켓(Socket) 통신으로 진행하고 있어 소켓 통신에 대해 파악하기 위해 동작원리, 정의 , 통신 방법 등을 정리하기 위한 이유이다.
소켓(Socket) 의 정의
소켓은 TCP/IP 기반 네트워크 통신중에 하나로 서버-클라이언트간 데이터를 주고받는 양방향 연결 지향성 통신을 말한다.
주로 지속적으로 연결을 유지하면서 실시간으로 데이터를 주고 받아야 하는 경우에 사용 되어진다.
소켓은 프로토콜, IP 주소 , 포트 넘버로 정의된다.
- 프로토콜
프로토콜은 원래 외교상의 언어로써 의례나 국가간에 약속을 의미하며 , 통신에서는 어떤 시스템이 다른 시스템과 통신을 원할하게 수용하도록 해주는 통신 규약 또는 약속이라고 불린다.
- IP
전 세계 컴퓨터에 부여되는 고유의 식별 주소
- 포트
포트(Port)는 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다.같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. 즉, 같은 컴퓨터 내에서 프로그램을 식별하는 번호이다.
즉 소켓이란 떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스의 역할을 하는데 데이터를 주고 받을 수 있는 구조체로 소켓을 통해 데이터 통로가 만들어 진다. 이러한 소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분되어진다.

서버 (Server)
클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게한다.
1) socket() 함수를 이용하여 소켓을 생성
2) bind() 함수로 IP와 PORT 번호를 설정한다.
3) listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
4) accept() 함수를 사용하여 클라이언트와의 연결을 기다린다.
클라이언트 (Client)
실제로 데이터 송수신이 일어나는 것은클라이언트 소켓이다.
1) socket() 함수로 가장 먼저 소켓을 연다.
2) connect() 함수를 이용하여 통신 할 서버의 설정된 ip와 port 번호에 통신을 시도
3) 통신을 시도 시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor 를 반환
4) 이를 통해 클라이언트와 서버가 서로 read() , write() 를 하며 통신 (이 과정이 반복)
HTTP 통신과 SOCKET 통신의 비교
HTTP 통신
Client의 요청 이 있을 때만 서버가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식
HTTP 통신의 특징
- Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신이다.
- Server로부터 응답을 받은 후에는 연결이 바로 종료된다.
- 실시간 연결이 아니고, 필요한 경우에만 Server로 요청을 보내는 상황에 유용하다.
- 요청을 보내 Server의 응답을 기다리는 어플리케이션의 개발에 주로 사용된다.
SOCKET 통신
- Server와 Clent가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식
SOCKET 통신의 특징
- Server와 Client가 계속 연결을 유지하는 양방향 통신이다.
- Server와 Client가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용된다.
- 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용된다.
회사 프로토콜 규약 문서 보면서 혼자 소켓 통신 구현 해보면 공부했던 것을 적용하는 데 많은 도움이 될 거 같다. 혹시 시간여유가 있다면 실시간 채팅 프로그램을 구현해보면 좋을 듯?
'network' 카테고리의 다른 글
| [컴퓨터 네트워크 스터디 5주] 쿠키 , 세션 , 토큰 , REST (0) | 2023.12.04 |
|---|---|
| [컴퓨터 네트워크 스터디 4주차] 네트워크 레이어 , IP 프로토콜 (0) | 2023.11.27 |
| [컴퓨터 네트워크 스터디 3주차] TCP , 신뢰적 데이터 전송의 원리 (0) | 2023.11.21 |
| [컴퓨터 네트워크 스터디 2주차] HTTPS , DNS , UDP , 신뢰적 데이터 전송 (0) | 2023.11.12 |
| [컴퓨터 네트워크 스터디 1주차] 컴퓨터 네트워크 와 HTTP 프로토콜 (0) | 2023.11.06 |