본문 바로가기
[개발] Info/용어

[Network] Socket

by Devsong26 2023. 12. 12.

소켓(Socket)은 네트워크를 통해 데이터를 교환하기 위한 엔드포인트(EndPoint)를 제공하는 메커니즘입니다. 소켓은 네트워크에서 통신을 가능하게 하는 기본적인 수단으로, 네트워크 프로그래밍에서 중요한 역할을 합니다.

 


소켓의 기본 개념

  • 엔드포인트
    • 소켓은 네트워크 상의 두 프로그램 간의 통신 엔드포인트로 작동합니다. 각 소켓은 IP 주소와 포트 번호의 조합으로 식별됩니다.
  • TCP/UDP 소켓
    • 소켓은 주로 TCP(Transmission Control Protocol) 또는 UDP(User Datagram Protocol) 위에서 작동합니다. TCP 소켓은 연결 지향적이고 신뢰성 있는 통신을 제공하는 반면, UDP 소켓은 비연결성이고 신뢰성이 떨어지지만 더 빠른 통신을 제공합니다.
  • 서버 소켓과 클라이언트 소켓
    • 일반적으로 서버는 서버 소켓을 생성하여 특정 포트에서 듣고(listen), 클라이언트는 클라이언트 소켓을 사용하여 서버에 연결합니다.

 

 

소켓 통신의 작동 방식

  • 서버 소켓 생성 및 바인딩
    • 서버는 서버 소켓을 생성하고, 특정 포트에 바인딩합니다. 이 포트는 서버가 클라이언트의 연결을 기다리는 포트입니다.
  • 연결 수신
    • 서버 소켓은 클라이언트로부터의 연결 요청을 기다립니다. TCP의 경우, 클라이언트로부터 연결 요청이 오면 서버는 이를 수락하여 새로운 소켓을 생성합니다.
  • 데이터 교환
    • 연결이 수립되면, 서버와 클라이언트는 데이터를 주고받을 수 있습니다. 데이터는 스트림(Stream) 형태로 전송됩니다.
  • 연결 종료
    • 데이터 전송이 완료되면, 서버나 클라이언트 어느 한쪽이든 연결을 종료할 수 있습니다.

 

 

소켓 프로그래밍

 

소켓 프로그래밍은 네트워크 통신을 위한 애플리케이션을 작성하는 과정입니다. Java, Python, C++ 등 대부분의 프로그래밍 언어는 소켓 프로그래밍을 위한 API를 제공합니다.

 


예시: Java에서의 소켓 프로그래밍

// 서버 소켓 생성
ServerSocket serverSocket = new ServerSocket(1234);

// 클라이언트 연결 기다림
Socket clientSocket = serverSocket.accept();

// 데이터 읽기 및 쓰기
InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream();

// 데이터 처리...

// 소켓 및 서버 소켓 닫기
clientSocket.close();
serverSocket.close();

 

 

결론

 

소켓은 네트워크 통신의 핵심 요소로, 서버와 클라이언트 간의 데이터 교환을 가능하게 합니다. 소켓을 사용하면 다양한 종류의 네트워크 기반 애플리케이션을 개발할 수 있으며, 이는 웹 서버, 채팅 애플리케이션, 분산 시스템 등에 널리 사용됩니다.

'[개발] Info > 용어' 카테고리의 다른 글

Library  (0) 2023.12.17
Module  (0) 2023.12.17
전통적인 MVC  (0) 2023.12.12
Nexus Repository  (0) 2023.12.08
분산 락(Distributed Lock)  (1) 2023.12.06