Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- 기본유형
- 알고리즘
- 다시보기
- 코테
- 트러블슈팅
- SSAFY
- 완전탐색
- Spring
- SWEA
- 알고리즘기본개념
- 코딩테스트
- 코딩테스트실력진단
- JUnit
- DP
- 자바
- JPA
- 부분수열의합2
- 그래프
- Java
- 싸피
- 완탐
- 유니온파인드
- database
- DFS
- BFS
- 다익스트라
- 그리디
- 코드트리
- Union Find
Archives
- Today
- Total
HwangHub
웹 소켓 본문
채팅을 구현할 때나 push 알림을 구현해야 할 때 자연스럽게 소켓 방식을 사용한다고 이해하고 있었는데, 여기서 소켓이라는 개념이 정확히 어떤 느낌인지 네트워크 전공수업을 들을 때에도 명확하게 이해하기가 어려웠다. 생각이 난 김에 공부하고, 이를 내 언어로 정리해 보았다.
웹 소켓은 오늘날 웹 환경에서 두 컴퓨터 간 통신을 하는 방식 중 양방향 통신을 구현할 수 있는 표준 기술이다. 그간 통신 방식을 훑어보면서 웹 소켓 방식에 대해 이해해보자.
단순 터미널 텍스트 통신
- 가장 원시적인 방법이자 통신의 시작
- IP와 포트를 지정하여 특정 컴퓨터 간 터미널에서 텍스트를 주고받았던 방식
- 윈도우 기준 아래처럼 파워쉘에서 그냥 상대 ip 주소와 포트 번호를 지정하여 udp 또는 tcp로 텍스트를 통신하는 개념이라고 이해하면 될 듯 하다.
HTTP
- HyperText Transfer Protocol
- ip 주소, 포트 번호를 바탕으로 정해진 양식(URL, http method)으로 단순 텍스트가 아닌, html을 요청할 수 있는 프로토콜
- 유저가 URL을 요청할 때에만 서버가 응답을 보낼 수 있는 poll only 방식이라 사용성에 한계 존재
- 요청이 없으면 화면을 갱신할 수 없는 사용성 한계를 편법으로(?) 극복하기 위해 ActiveX 등의 방법들을 동원
Ajax
- 프로토콜은 아니지만, 사용자의 요청에 따라 매번 html을 갱신해야 했던 HTTP의 한계를 극복하게 해준 기술
- 전통 http는 클라이언트가 서버에 바로 특정 html을 달라고 요청을 보내는 방식이지만, ajax는 클라이언트가 내부적으로 xmlHttpRequest이라는 객체를 이용하여 클라이언트가 request를 서버에 던지는 방식.
- Json이나 xml 형태로 필요한 데이터를 서버로부터 수신하여 XHR 객체가 DOM을 갱신함. 이는 html을 매번 갱신하지 않고 DOM을 비동기적으로 수정하는 방식이라 페이지를 리로드하지 않고도 갱신할 수 있었음
- xmlHttpRequest는 통신마다 요청 헤더가 필요하기 때문에, 설령 1바이트의 데이터만 송신하고 싶어도 헤더를 구성하는 바이트만 수 킬로바이트이기 때문에 이를 통신해야 함
- 이도 결국 클라이언트가 반드시 요청을 해야만 갱신할 수 있었기에 HTTP의 한계인 polling only 방식의 한계를 벗어나지 못함
Socket
- HTTP의 polling 한계를 극복하기 위해 HTML5에서는 순수 웹 환경에서 서버가 자발적으로 클라이언트의 요청 없이 데이터를 보내는 push 방식이 가능한 기술 스펙인 "웹 소켓"을 제공.
- 이를 통해 비로소 웹 상에서 클라이언트와 서버가 실시간 양방향 통신이 가능하게 함
- 웹 소켓을 이용하면 클라이언트와 서버는 한 번의 HTTP 접속으로 양방향 메세지를 자유롭게 주고받을 수 있는 stateful protocol임
- 웹 소켓은 HTML5부터 지원하는 표준 기술로, 이전 HTML 버전에서는 이를 활용할 수 없음 (이 떄문에 socket.io라는 node.js 기반 라이브러리에서는 이전 버전에서도 유사한 효과를 누릴 수 있도록 http 프로토콜을 이용하여 구현해 둠)
- socket.io와 같은 websocket API를 이용하여 어플리케이션에 적용할 수 있음.
- 웹 소켓은 최초 연결 확립을 위한 http 통신을 제외하곤 기본적으로 http대신 ws라는 별도의 프로토콜을 이용하여 양방향 통신을 함.
- ajax와 달리 stateful protocol이기 때문에 송신 header도 상당히 작아서 송신 시의 오버헤드가 낮음
'workspace > 아티클' 카테고리의 다른 글
[트러블슈팅] unknown database 'database이름' (0) | 2023.10.27 |
---|---|
[트러블슈팅] cannot connect to a docker daemon (1) | 2023.10.26 |
[설계] 프로젝트 아키텍처로 멀티 모듈을 선택한 이유 (0) | 2023.10.22 |
[토막 지식] 관계대수 (0) | 2023.10.15 |
[토막 지식] 관계대수의 theta join, natural join, semi join, outer join (0) | 2023.10.15 |
Comments