Socket

Jimin·2022년 8월 17일
0

JAVA

목록 보기
8/23

소켓(Socket)?

Socket은 응용프로그램에서 TCP/IP를 이용하는 창구 역할을 하며, 두 프로그램이 네트워크를 통해 서로 통신을 수행할 수 있도록 양쪽에서 생성되는 링크의 단자이다.
두 소켓이 연결되면 서로 다른 프로그램이 서로 데이터를 전달할 수 있게 된다.

  • 떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스 역할을 한다.
  • 데이터를 주고 받을 수 있는 구조체로 소켓을 통해 데이터 통로가 만들어 진다.
  • 소켓의 역할에 따라 클라이언트 소켓과 서버 소켓으로 구분된다.
  • 소켓은 프로토콜, IP Address, Port Number로 정의된다.
  • 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다.

소켓 프로그래밍: 나만의 통신구조를 설계하는 것
직접 통신의 근본 과정을 일일이 다 설계하는 것이다.

  • 서버와 통신한다고 가정해보자
    • 그 서버의 특정 App에 접근하기 위해서는 특정 port와 연결이 되어야 한다.
    • 해당 port에 접근한 뒤, 바로 App에 접근하는 것이 아니라, 소켓을 거친후 App에 접근하고 이용한다.
    • 우리가 설계하는 소켓 프로그래밍은 이 소켓 부분을 설계에서 어떠한 방식으로 통신할 지 정해주는 것이다.

소켓의 통신 방식

  • 통신이 이루어지는 단계
  1. 기다리는 측을 Server라고 하며, Server에서는 Port를 열고 Client의 접속을 기다린다.
  2. client class에서 Server의 IP주소와 Port번호를 넣고 출력 스트림으로 넘어간 후, Server Socket에 접근하여 통신이 연결된다.
  3. Server Socket class는 Client가 접속을 했는지 체크만 하는 용도이다.
  4. Server class에서 Client 요청 접근이 왔음이 인식이 되면, Server class는 재빨리 Socket.accept() 메소드를 실행한다.
  5. Server와 Client 간의 통신은 Send, Receive의 형태로 주고받는다.
  6. 통신이 끝나면 close()로 접속을 끊는다.
  • 위와 같이 1:1 통신이 아니라 하나의 서버에 여러 컴퓨터가 접속해오는 경우?
  • ServerSocket 하나가 여러 개의 컴퓨터의 client 접속을 인식한다.
  • client 1개당 1개의 ServerSocket이 생성된다.
  • 예; 컴퓨터 1000대가 접속 → 1000개의 ServerSocket이 만들어지고 이 1000개의 ServerSocket이 accept() 메소드를 호출한다. ⇒ 비효율적
  • 이러한 비효율적인 문제를 해결하기 위해 나온 것이 쓰레드(Thread)이다.

소켓 종류

TCP

  • 양방향으로 바이트 스트림을 전송, 연결 지향성
  • 오류 수정, 전송 처리, 흐름 제어 보장
  • 송신된 순서에 따라 중복되지 않게 데이터를 수신 → 오버헤드 발생
  • 소량의 데이터보다 대량의 데이터에 적합

UDP

  • 비연결형 소켓
  • 데이터 크기에 제한이 없음
  • 확실하게 전달이 보장되지 않음(데이터가 손실돼도 오류가 발생하지 않음)
  • 실시간 멀티미디어 정보를 처리하기 위해 주로 사용한다.

HTTP 통신과 Socket 통신의 차이점

단방향 통신인 Http 통신

  • Http 통신은 Client의 요청이 있을 때만 Server가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식이다.
  • Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신으로,
    반대로 Server가 Client에게 요청을 보낼 수는 없다.

양방향 통신인 Socket 통신

  • Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식이다.
  • Http 통신과 다르게 Server와 Client가 Port를 통해 연결되어 있어서 실시간으로 양방향 통신을 할 수 있다.
  • Streaming 중계나 실시간 채팅, 게임 등과 같이 즉각적으로 정보를 주고 받는 경우에 사용된다.

Stream이란? (InputStream, OutputStream)

Stream은 프로그램 동작 중 외부에서 데이터를 읽거나 외부로 데이터를 출력하는 작업에 사용된다.

프로그램 동작 중, 외부에서 데이터를 읽거나 외부로 데이터를 출력하는 과정에서
데이터는 어떤 통로를 통해 이동되는데, 이때 이 통로를 Stream이라고 한다.

⇒ Stream: 데이터가 읽고 쓰이는 과정에서 데이터가 이동하는 통로

  • InputStream: 외부에서 데이터를 읽는 역할을 수행
  • OutputStream: 외부로 데이터를 출력하는 역할을 수행
  • 위의 두 Stream은 단일 방향으로 연속적으로 흘러간다.
    • 단방향이라는 특징 때문에, 하나의 스트림으로 입출력을 동시에 할 수 없어서 InputStream과 OutputStream이 따로 존재한다.


출처

https://mainpower4309.tistory.com/25
https://wildeveloperetrain.tistory.com/122

profile
https://github.com/Dingadung

0개의 댓글