[Backend] 깃허브 염탐하다가 궁금해진 SOCKET 통신

kubit·2023년 9월 23일

Socket

목록 보기
1/1
post-thumbnail

나는 전 프로젝트에서 HTTP 통신을 사용했는데, 다른 팀들의 깃허브를 살펴보다가 실시간으로 응답할 수 있는 SOCKET 통신을 사용한 개발 프로젝트에 눈길이 갔다. 궁금한 건 못 참는 나는 당장 SOCKET 통신에 대해 공부를 시작했는데, 보통 SOCKET 통신을 사용해 실시간 채팅방을 구현해보길래 나도 이 다음 게시물에 Socket.io를 사용해서 구현해 볼려고 한다. (기대하셍요 ~! 😋)

🚀 SOCKET

TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점
양방향 연결지향성 통신

소켓은 프로토콜, IP주소, 포트로 정의된다.

프로토콜: 어떤 시스템이 다른 시스템과 통신을 원활하게 할 수 있도록 해주는 통신 규약
IP주소: 전 세계 컴퓨터에 부여된 고유의 식별 주소
포트: 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당 받아야 하는 고유한 숫자

소켓 통신의 흐름

OSI 7계층 중 응용 계층에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐 전송 계층으로 데이터를 전달해야 한다. 즉, 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결해준다. 이러한 소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분된다.

  • 서버 (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()를 하며 통신 (이 과정이 반복)

소켓 종류

  • 스트림 (TCP)
    • 양방향으로 바이트 스트림을 전송, 연결 지향성
    • 송신된 순서에 따라 중복되지 않게 데이터를 수신 → 오버헤드 발생
    • 대량의 데이터 전송에 적합
  • 데이터그램 (UDP)
    • 비연결형소켓
    • 데이터 크기에 제한이 있음
    • 실시간 멀티 미디어 정보를 처리하기 위해 주로 사용

HTTP 통신의 SOCKET 통신 차이

HTTP 통신은 클라이언트 요청이 있을 때만 서버가 응답하여 해당 정보를 전송하고, 곧바로 연결 종료하는 단방향 통신 방식이지만, SOCKET 통신은 서버와 클라이언트가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식이다.

🌟 Node.js Socket.io

Socket.io는 Node.js를 이용해 웹 애플리케이션에서 실시간 통신을 구현하기 위한 라이브러리이다. Socket.io는 웹 소켓(Web Socket)을 기반으로 동작하며, 웹 소켓이 지원되지 않는 브라우저에서는 폴링(Polling) 방식을 사용하여 실시간 통신을 구현한다.

이 Socker.io를 사용해서 실시간 채팅방 앱을 구현할 것이다 !! 다음 게시물에서 만나용 ㅋ

0개의 댓글