관리 메뉴

나만을 위한 블로그

[PHP] 웹 소켓이란? Socket I/O란? 본문

PHP

[PHP] 웹 소켓이란? Socket I/O란?

참깨빵위에참깨빵 2021. 1. 25. 01:19
728x90
반응형

웹 소켓은 Web과 Socket의 합성어다. 그럼 먼저 각각의 단어는 어떤 뜻이 있는지 확인해보자.

 

Web : 거미줄, (복잡하게 연결된) 망 / WWW의 약자
Socket : 콘센트 / (전기 기구에서 플러그 등을) 꽂는 곳, (전구) 소켓 / 푹 들어간 곳, 구멍

 

거미줄처럼 복잡하게 연결된 콘센트나 소켓? 정도로 생각된다.

그럼 개발 분야에서 웹 소켓이란 말은 어떻게 쓰이는지 위키백과를 찾아봤다.

 

웹소켓은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜이다...(중략)...웹소켓은 HTTP와 구별된다. 두 프로토콜 모두 OSI 모델 제 7계층에 위치해 있으며, 제 4계층의 TCP에 의존한다. 이들에 차이가 있으나 RFC 6455에 따르면 웹소켓은 포트 80과 443 위에 동작하도록 설계됐으며, HTTP 프록시 및 중간 층을 지원하도록 설계됐으므로 HTTP 프로토콜과 호환이 된다. 호환을 달성하기 위해 웹소켓 핸드셰이크는 HTTP 업그레이드 헤더를 사용해 HTTP 프로토콜에서 웹소켓 프로토콜로 변경한다.
웹소켓 프로토콜은 HTTP 풀링과 같은 반이중방식에 비해 더 낮은 부하를 사용하여 웹 브라우저(또는 다른 클라이언트 애플리케이션)과 웹 서버 간의 통신을 가능케 하며, 서버와의 실시간 데이터 전송을 용이케 한다. 이는 먼저 클라이언트에 의해 요청을 받는 방식이 아닌, 서버가 내용을 클라이언트에 보내는 표준화된 방식을 제공함으로써, 또 연결이 유지된 상태에서 메시지들을 오갈 수 있게 허용함으로써 가능하게 되었다. 이러한 방식으로 양방향 대화 방식은 클라이언트와 서버 간에 발생할 수 있다. 통신은 TCP 포트 80(TLS 암호화 연결의 경우 443)를 통해 수행되며 방화벽을 통해 웹이 아닌 인터넷 연결을 차단하는 일부 환경에 도움이 된다. 단순 양방향 브라우저-서버 통신은 코멧 등의 스톱갭(stopgap) 기술을 사용하는 비표준 방식으로 수행된다.
크롬, 엣지, IE, 파이어폭스, 사파리, 오페라 등 대부분 브라우저가 이 프로토콜을 지원한다.

 

전이중 통신은 2대의 단말기가 데이터를 송수신하기 위해 동시에 각각 독립된 회선을 쓰는 통신 방식을 말한다. 전화망, 고속 데이터 통신이 그 예시다. 핸드셰이킹은 주고받기라고 이해했다.

웹소켓은 HTTP와는 다른 프로토콜로 TCP에 의존하며 80, 443 포트 위에서 동작한다.

그리고 클라이언트와 서버 간의 통신, 실시간 데이터 전송을 용이하게 하는 프로토콜이다. 통신과 실시간 데이터 전송이라면 실시간 채팅 정도에서 자주 쓸 수 있겠다.

 

그럼 Socket I/O는 뭘까? 공식 홈페이지에선 아래와 같이 말하고 있다.

socket.io/docs/v3/index.html

 

Introduction

What Socket.IO isSocket.IO is a library that enables real-time, bidirectional and event-based communication between the browser and the server. It consists of: a Node.js server: Source | API a Javasc

socket.io

Socket.IO는 브라우저와 서버 간의 실시간, 양방향 및 이벤트 기반 통신을 가능하게하는 라이브러리입니다.

 

아래는 영문 위키백과의 내용이다.

 

Socket.IO는 실시간 웹 어플리케이션을 위한 자바스크립트 라이브러리다. 웹 클라이언트와 서버 간의 실시간 양방향 통신이 가능하다. 브라우저에서 실행되는 클라이언트 측 라이브러리와 Node.js용 서버측 라이브러리의 두 부분으로 구성된다. 두 구성요소 모두 거의 동일한 API를 갖고 있다. Node.js와 마찬가지로 이벤트 기반이다. Socket.IO는 주로 폴링 옵션으로 웹소켓 프로토콜을 사용하며 동일한 인터페이스를 제공한다. npm으로 설치할 수 있다.

 

Socket I/O는 웹소켓 프로토콜을 사용하는 자바스크립트 라이브러리라고 말할 수 있겠다.

그럼 실시간 웹 채팅 또는 실시간 게임을 만들 때 웹소켓과 Socket I/O를 적절히 갖다 쓰면 만들 수 있을 것 같다.

실제로 PHP를 사용한 웹 페이지에서 실시간 채팅을 만들 때 위의 2가지를 섞어서 구현한 예제를 구글에서 쉽게 찾아볼 수 있다.

반응형
Comments