[네트워크] 웹 소켓과 소켓 통신

Seongho·2023년 12월 4일
0

CS-네트워크

목록 보기
1/1

웹 소켓 & 소켓 통신

포트

포트는 어떤 프로세스가 데이터를 주고받는 통로이다.

소켓 (인터넷 소켓, 네트워크 소켓)

  • 소켓은 OS 커널에 구현되어 두 프로그램 간에 특정 포트를 통해 통신이 가능하도록 하는 인터페이스이다.
  • 소켓은 프로세스 간 통신에 사용되는 양쪽 endpoint이다. (From. 자바의 정석)

    소켓은 두 프로세스 간에 통신을 할 수 있도록 해주는 인터페이스로, 포트를 통해 데이터를 주고받을 수 있게 해준다.

    소켓은 파일과 비슷하다고 생각할 수 있는데, 파일 입출력을 생각해보면, a.txt라는 파일을 만들고 "hi"를 쓴다. 그러면 a.txt에 "hi"가 써진다.
    이를 소켓에 적용해 보면, A프로세스에서 B프로세스로 어떤 데이터를 보내고 싶으면, 소켓을 열고 소켓에 해당 데이터를 write하면 포트를 통해 B프로세스의 소켓에 데이터가 도착한다.

TCP 소켓

  • 데이터를 바이트 스트림으로 전송한다.
  • 1. 연결 : 소켓 객체를 생성하고 3-way-handshake를 통해 TCP 연결을 맺는다.
    +참고로 클라이언트와 서버는 계속 바뀌는 것임. 먼저 요청하는 쪽이 클라이언트

  • 2. 데이터 송수신 : 데이터를 송신하는 프로세스에서 어떤 데이터를 wirte()를 사용하여 버퍼에 밀어넣는다.
    -> 데이터는 포트를 통해 수신하는 소켓에 전송된다.
    -> 수신한 데이터가 버퍼에 저장되고, read()를 통해 프로세스에서 데이터를 읽어 활용한다.

  • 3. 연결 해제 : 4-way-handshake를 통해 TCP 연결을 끊는다. 연결이 종료되면 소켓 객체를 삭제한다.

UDP 소켓

  • 데이터를 데이터그램 단위로 전송한다.
  • UDP에서는 TCP와 다르게 소켓이 1:1로 매핑되지 않는다. UDP는 하나의 소켓만 생성하여 여러 다른 프로세스의 소켓과 통신이 가능하다.

모든 소켓은 각각의 고유한 포트번호를 가지나 ?

아니다. 잘 생각해보자. 소켓은 프로세스에서 생성하는 객체이다. 프로세스끼리 서로 통신하기 위한 객체이다. 만약, 채팅 서버에 A에 100개의 컴퓨터에서 접속하여 채팅을 하려고 한다. 그러면 서버는 각 클라이언트마다 하나의 소켓 객체를 생성하여 통신한다. 그러면 총 100개의 소켓이 생성되고, 100개의 소켓은 하나의 프로세스 내에 있기 때문에 하나의 포트를 사용하여 통신한다.
"하나의 문(포트)에 여러개의 귀(소켓)가 붙어 소리를 듣는다"

HTTP의 한계

HTTP는 단방향 통신이다. 한쪽에서 요청을 하면 한쪽에서 응답을 하는.
웹이 발전하고, 다양한 콘텐츠가 등장하면서 양방향 통신에 대한 욕구가 끌어올랐다. HTML5에서는 이를 해결하기 위하여 Web Socket을 만들었다. 채팅을 할 때, 클라이언트가 서버에 전달하고, 서버에서는 클라이언트에 전달할 수 없다. 따라서, 일정 시간에 한번씩 데이터를 갱신하거나 하는 방법으로 해결해야 한다. (매우 비효율적)

웹 소켓

  • HTML5의 표준 기술이다.
  • 초기 연결에만 HTTP를 이용하고, 그 이후에는 프로토콜을 ws로 변경하여 커넥션을 유지하고 통신한다.

소켓 통신 vs 웹 소켓

일단 둘은 상반되는 개념이 아니다. 위에서 설명했듯이, 소켓은 데이터를 주고 받는 인터페이스이고 4계층(전송계층)에서 동작하는 개념이지만, 웹 소켓은 TCP에 의존하고 HTTP에 기반하여 7계층에서 동작하는 개념이다. 즉, TCP 소켓 통신이 발전하여 웹 소켓이 된 것이다.

Web Socket이 필요한 경우

  • 실시간 양방향 데이터 통신
  • 많은 수의 동시 접속자 수용

Web Socket의 단점

  • stateful하고 connection을 유지하기 때문에 프로그램 복잡성을 높인다.
  • 비용이 많이 든다.

실생활 웹 소켓 사용 예

  • sns ex)인스타그램..
  • 게임
  • 동시 접속 문서 작업 프로그램 ex) notion, google Doc..
  • 증권 거래 정보 사이트
  • 위치 기반 프로그램
  • 화상 채팅 ex) Zoom

항상 사용할 수 있나 ?


Can I Use 웹 사이트에서 검색해보면 빨간색으로 표시된 크롬, 파이어폭스 등의 이전 버전들에서 지원하지 않는다는 것을 알 수 있다. 이는 Socket.io를 통해 해결할 수 있다.

+참고
웹 소켓 - 코딩애플
네트워크와 소켓 프로그래밍
소켓의 본질에 대한 이해
소켓 프로그래밍

profile
Record What I Learned

0개의 댓글