일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체지향프로그래밍
- 알고리즘
- 스프링MVC
- 스프링 MVC
- 메서드
- 브루트 포스
- JPA
- 네트워크
- 코딩테스트
- Java
- 자바의 정석
- 검증
- 운영체제
- 스프링
- 스파르타코딩
- OS
- 프로그래머스
- 자료구조
- 면접
- 자바
- 쿼리dsl
- db
- 반복문
- 정처기
- 코테
- 웹개발
- programmers
- 백준
- Bean Validation
- ModelAttribute
- Today
- Total
개발일지
소켓(Socket) 본문
목차
소켓이란?
- 두 호스트를 연결해주는 도구로써 인터페이스의 역할을 하는데 데이터를 주고 받을 수 있는 구조체로, 소켓을 통해 데이터 통로가 만들어진다. 소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분된다.
- 네트워크를 경유하는 프로세스 간 통신의 종착점.
- OSI 7계층 중 응용 계층에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐 전송 계층으로 전달해야한다. 즉, 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결해준다.
소켓의 3요소
1. 프로토콜 : 프로토콜은 원래 외교상의 언어로써 의례나 국가간에 약속을 의미하며, 통신에서는 어떤 시스템이 다른 시스템과 통신을 원활하게 수용하도록 해주는 통신 규약, 약속이다.
2. IP : 전 세계 컴퓨터에 부여된 고유의 식별 주소이다.
3. Port : 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유 숫자이다. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값으로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. 즉, 같은 컴퓨터 내에서 프로그램을 식별하는 번호이다.
일반적인 소켓 통신의 흐름
- socket() 으로 통신을 위한 엔트포인트을 작성하고 해당 종료점을 나타내는 소켓 설명자를 리턴한다. 소켓 설명자는 정수로 이루어져있다.
- 소켓 설명자가 있는 어플리케이션은 고유한 이름을 소켓에 바인드할 수 있다. 서버 소켓은 네트워크에서 액세스 가능한 이름을 바인드해야 한다.
- 서버 소켓에서 listen()으로 클라이언트 연결 요청을 승인하려는 의사를 표시한다.
- 클라이언트 애플리케이션이 스트림 소켓에 대해 connect() API를 사용하여 서버에 대한 연결을 설정한다.
- 서버 애플리케이션이 accept() API를 사용하여 클라이언트 연결 요청을 승인한다.
- 서버와 클라이언트 간 연결이 이루어지면 모든 데이터 전송을 할 수 있다.
- 서버 또는 클라이언트는 조작을 중단하려는 경우 close() 를 실행하여 소켓이 획득한 시스템 자원을 해제한다.
HTTP 통신과 SOCKET 통신의 비교
HTTP 통신
: Client 요청이 있을 때만 서버가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식
HTTP 통신의 특징
- Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통싱
- Server로부터 응답을 받은 후에는 연결이 바로 종료
- 실시간 연결이 아니고, 필요한 경우에만 Servcer로 요청을 보내는 상황에 유용
- 요청을 보내 Server의 응답을 기다리는 어플리케이션 개발에 주로 사용
Socket 통신
Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식
Socket 통신의 특징
- Server와 Clinet가 계속 연결을 유지하는 양방향 통신
- Server와 Clinet가 실시간으로 데이터를 주고 받는 상황이 필요한 경우에 사용
- 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용
웹 소켓(Web Socket)이 있기까지
전형적인 브라우저 렌더링 방식은 HTTP 요청(HTTP Request)에 대한 HTTP 응답(HTTP Response)을 받아서 브라우저의 화면을 깨끗하게 지우고 받은 내용을 새로 표시하는 방식이다. 내용을 지우고 다시 그리면 브라우저의 깜빡임이 생기게 된다.
그러나, 최근에는 사용자들이 실시간으로 사용자와 상호작용이 가능한 웹 서비스를 선호하는 경향이 높아지면서, 깜빡임 없이 부분적으로만 화면을 업데이트할 수 있는 RIA(Rich Internet Application) 기술이 발전하고 있다.
상호작용하는 웹 서비스를 위해 숨겨진 프레임(Hidden Frame)을 이용한 방법이나 Long Polling, Stream 등 다양한 방법을 사용했다. 그러나 이러한 방식은 여전히 브라우저와 웹 서버 간의 통신이 단방향적인 한계를 가지고 있어서 복잡하고 어려운 코드로 구현돼야 했다.
더 효율적인 상호작용을 위해, 브라우저와 웹 서버 사이에 더 자유로운 양방향 메시지 송수신(bi-directional full-duplex communication)이 필요했다. 이에 따라 HTML5 표준안의 일부로 WebSocket API(이후 WebSocket)가 등장했다. WebSocket을 통해 브라우저와 서버는 전체 통신이 가능하며, 이를 통해 더욱 원활하고 효율적인 상호작용을 구현할 수 있게 되었따.
WebSocket 프로토콜
- WebSocket은 다른 HTTP 요청과 마찬가지로 80번 포트를 통해 웹 서버에 연결한다.
- 클라이언트인 브라우저 중에서는 Chrome, Safari, Firefox, Opera에서 WebSocket을 사용할 수 있다.
- ws://는 WebSocket 프로토콜을 나타낸다.
- 웹 소켓 프로토콜은 아직 확정된 상태가 아니기 때문에 브라우저 별로 지원하는 WebSocket 버전이 다르다.
- 예전 브라우저 중 웹 소켓을 지원하지 않는 경우도 많다.
Socket.io
- WebSocket은 다가올 미래의 기술이지 아직 인터넷 기업에서 시범적으로라도 써 볼 수 있는 기술이 아니다.
WebSocket이 미래의 기술이라면 Socket.io는 현재 바로 사용할 수 있는 기술이다. - Socket.io는 JavaScript를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있도록 한 기술이다.
- Socket.io는 표준 기술이 아니고 Node.js 모듈로서 Guillermo Rauch가 CTO로 있는 LearnBoost(https://www.learnboost.com) 라는 회사의 저작물이며 MIT 라이센스를 가진 오픈소스이다.
websocket과 socket.io 차이점
WebSocket 프로토콜 | Socket.io | |
프로토콜 | TCP 기반의 프로토콜 | 웹소켓을 기반으로 한 라이브러리 |
지원 범위 | - 웹 브라우저와 서버 간의 통신을 위한 표준화된 프로토콜로, 대부분의 최신 브라우저와 서버 환경에서 지원 | - 웹 소켓을 지원하지 않는 구형 브라우저에서도 폴링과 같은 대안적인 방법을 사용하여 통신 가능 |
지원 기능 | - 실시간 양방향 통신을 위한 기본 메커니즘을 제공 | - 웹 소켓을 기반으로 하면서도 추가적인 기능을 제공 - 방(Room) 개념, 클라이언트 식별 및 인증, 이벤트 기반 메시지 전송 외에도, 재연결 및 에러 처리와 같은 신뢰성과 안정성을 강화하는 기능 제공 |
'네트워크' 카테고리의 다른 글
네트워크 데이터 단위 (0) | 2024.01.29 |
---|---|
REST, REST API, RESTful이란? (0) | 2024.01.29 |
토큰(JWT, AccessToken,RefreshToken) (2) | 2024.01.24 |
DNS(Domain Name System) (1) | 2024.01.22 |
쿠키와 세션 (0) | 2024.01.22 |