• 티스토리 홈
  • 프로필사진
    소쩍소쩍이
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
소쩍소쩍이
  • 프로필사진
    소쩍소쩍이
    • 분류 전체보기 (89)
      • 파이썬 (18)
        • 문제 및 예제 (8)
      • PySide6 (24)
        • Signal & Slot (6)
        • Layout (8)
        • Model & View (3)
        • File (4)
        • Resource (3)
      • Server - Client (17)
        • GUI 채팅 (1)
      • MySQL (4)
      • 리눅스 (5)
      • 아두이노 (0)
      • 일지 (20)
  • GitHub
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • 소켓의 역할과 동작 흐름
      2026년 06월 22일
      • 소쩍소쩍이
      • 작성자
      • 2026.06.22.:25

      Socket이란?

      Socket은 IP, Port, TCP를 코드에서 사용할 수 있도록 제공하는 프로그래밍 인터페이스이다.

      TCP 연결이 내부에서 어떻게 만들어지는지 매번 직접 구현하지 않고, 소켓 함수를 이용하여 서버와 클라이언트를 쉽게 구현할 수 있다.

      핵심
      IP는 컴퓨터를 찾고, Port는 프로그램을 찾는다.
      Socket은 이러한 네트워크 기능을 코드에서 사용할 수 있도록 만들어진 도구이다.

       

      소켓의 역할

      Socket은 IP, Port, TCP를 실제 프로그램에서 사용할 수 있도록 다음 작업을 처리한다.

      1. TCP 방식으로 통신할 소켓 생성
      2. 서버는 서버 소켓에 IP와 Port를 연결(bind)
      3. 클라이언트는 서버 IP와 Port로 접속(connect)
      4. 연결이 생성되면 데이터 송수신
      5. 통신이 끝나면 소켓 종료

      import socket
      
      my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      코드 의미
      socket.AF_INET IPv4 주소 체계를 사용
      socket.SOCK_STREAM TCP 방식으로 연결

       

      소켓 흐름 확인

      서버와 클라이언트는 각각 다른 흐름으로 동작한다.

      # 서버(server.py) — 대기하고 수락하는 쪽
      서버 소켓 준비
      접속 대기
      클라이언트 접속 수락
      메시지 받기
      메시지 처리 후 응답 보내기

       

      # 클라이언트(main.py) — 연결 요청하는 쪽
      서버 주소와 포트 설정
      서버에 연결 요청
      메시지 보내기
      서버 응답 받기

       

      클라이언트와 서버의 소켓 흐름

      클라이언트(Client) 흐름 서버(Server) 흐름
      [1] 생성 클라이언트 소켓 생성 [1] 생성 서버 소켓 생성
          [2] 결합 IP 주소와 Port 번호 결합
          [3] 대기 클라이언트 요청 대기
      [2] 연결 서버에 연결 요청    
          [4] 수락 accept() 후 연결 소켓 생성
      [3] 송수신 데이터 송수신 [5] 송수신 연결 소켓으로 데이터 송수신
      [4] 닫음 소켓 종료 [6] 닫음 연결 소켓 종료

      서버 소켓은 여러 클라이언트의 연결 요청을 기다린다.

      클라이언트는 connect() 이후 처음 생성한 소켓을 그대로 사용한다.

      반면 서버는 accept() 이후 별도의 연결 소켓을 생성하여 통신을 수행한다.

      중요
      accept() 이후 서버는 server_socket이 아닌 accept()가 반환한 연결 소켓으로 데이터를 주고받는다.

       

      accept() 전후 역할 차이

      구분 서버 클라이언트
      처음 만드는 소켓 접속을 기다리는 서버 소켓 서버에 접속할 클라이언트 소켓
      연결 시점 accept() 후 연결 소켓 생성 connect() 성공 후 같은 소켓 사용
      데이터 송수신 연결 소켓으로 송수신 처음 만든 소켓으로 송수신

       

      send()와 recv()

      연결이 완료되면 send()와 recv()를 이용하여 데이터를 주고받는다.

      connect() 성공 → 통신할 길 생성
      send() 실행 → 데이터 전송
      recv() 실행 → 데이터 수신

      중요
      connect()는 연결만 수행한다.
      실제 데이터 전송은 send(), 데이터 수신은 recv()로 처리해야 한다.

       

      자주 하는 오해

      오해 올바른 정리
      소켓은 서버에만 있다 서버와 클라이언트 모두 소켓을 생성한다
      소켓은 IP와 같은 뜻이다 IP는 주소이고 소켓은 통신 도구이다
      connect() 성공 시 메시지가 자동 전송된다 send()를 호출해야 실제 데이터가 전송된다
      accept() 이후에도 server_socket으로 통신한다 연결 소켓(client_socket)으로 통신한다

       

      개념 정리

      개념 개발자 관점의 코드 흐름
      서버 역할 bind(), listen(), accept()로 대기 구조 생성
      클라이언트 역할 connect()로 서버 연결 요청
      IP와 Port bind(), connect()에 사용되는 주소 정보
      TCP socket.AF_INET, socket.SOCK_STREAM으로 생성
      메시지 송수신 send(), recv() 사용

       

      정리
      Socket은 IP, Port, TCP를 코드에서 사용할 수 있도록 만들어진 프로그래밍 인터페이스이다.

      IP = 어느 컴퓨터인지 찾기
      Port = 어떤 프로그램인지 찾기
      TCP = 안전하게 데이터를 전달하기
      Socket = 이를 코드에서 사용할 수 있도록 제공하는 도구

      'Server - Client' 카테고리의 다른 글

      반복 송수신과 종료 처리  (0) 2026.06.22
      클라이언트 만들기  (0) 2026.06.22
      서버 만들기  (0) 2026.06.22
      IP, Port, TCP 이해  (0) 2026.06.18
      네트워크 프로그래밍  (0) 2026.06.18
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바