2014년 10월 12일 일요일

클라이언트/서버 아키텍처와 소켓(Socket) - Python 도서 리뷰

오전 12:46 Posted by jonnung , No comments




네트워크 프로그래밍(1/2)



'코어 파이썬 애플리케이션 프로그래밍' 의 두번째 챕터 '네트워크 프로그래밍'에 대한 리뷰 형식의 포스트 이다.
이번 챕터에서는 네트워크 프로그래밍의 배경 지식과 파이썬에서의 소켓(Socket)을 사용하는 방법을 설명하고 있다.


클라이언트/서버 아키텍처

  • 클라이언트/서버 아키텍처의 전제는 하드웨어일 수도, 소프트웨어일 수도 있는 서버가 하나 이상의 클라이언트(사용자)에게 '서비스'를 제공한다는 점
  • 서버의 존재 목적은 (클라이언트의) 요청을 기다리다가 클라이언트의 요청에 응답 후 다시 다른 요청을 기다리는 것
  • 2가지 형태의 클라이언트/서버 아키텍처를 소개하고 있다.
    1. 하드웨어 클라이언트/서버 아키텍처
    2. 소프트웨어 클라이언트/서버 아키텍처
  • 네트워크 프로그래밍은 서버가 클라이언트의 요청에 응답하려면 설정 과정이 필요하고, 통신 종단점(communication endpoint)은 서버가 요청을 리슨(listen)하기 위해 만들어지고 무한 루프에 들어가서 연결해 오는 클라이언트를 기다린다.
    그리고 클라이언트는 자신의 통신 종단점을 만든 후 서버에 연결해야 한다.

소켓

소켓은 '통신 종단점'이라는 개념을 구체화한 컴퓨터 네트워크 데이터 구조이다.
네트워크를 사용하는 애플리케이션은 통신을 시작하기 전에 항상 소켓을 만들어야 한다.
소켓 없이는 통신을 시작할 수 없기 때문이다.
원래 소켓은 실행중인 프로그램(프로세스)이 같은 호스트안에 실행 중인 다른 프로그램과 통신하기 위해 깨발 되었다고 한다.

소켓의 유형

  1. 유닉스 소켓
    • AF_UNIX 라는 '패밀리 이름' 을 가진다. AF는 주소 패밀리(Address family)를 의미.
    • 쉽게 클라이언트와 서버가 유닉스 환경의 동일한 컴퓨터에 존재해야 한다는 뜻.
    • 이 소켓은 파일 기반이다. 소켓의 기반 구조가 파일 시스템을 통해 지원된다는 것이다.
    • 파일 시스템은 같은 호스트에서 실행 중인 프로세스 사이에 지속적으로 공유되므로, 합리적인 방법이라고 할 수 있다.
  2. 네트워크 기반
    • 패밀리 이름은 AF_INET 이다.
    • 클라이언트와 서버가 인터넷 어디서든 존재할 수 있다는 의미를 갖는다.
파이썬은 AF_UNIX, AF_NETLINK, AF_TIPC, AF_INET{,6} 패밀리를 지원한다.

연결 방식에 따른 소켓의 종류

  1. 연결 지향 소켓(connection oriented)
    • 통신을 하기 전에 반드시 연결 돼 있어야 한다(전화를 거는 것과 유사)
    • 레코드 경계 없이 데이터를 순서대로 신뢰성 있게 중복없이 전달. 각 메세지는 여러 조각으로 나뉘어서 반대편에 확실히 전달된 다음에 다시 순서대로 한데 묶인 후 기다리는 애플리케이션에 전달
    • 연결 지향 소켓을 구현한 프로토콜(protocol)로는 전송 제어 프로토콜(TCP, Trasmission Control Protocol) 이 있으며, 이 소켓을 만드려면 소켓 유형으로 SOCK_STREAM(스트림 소켓)을 지정
    • 이 소켓은 네트워크상에서 IP를 호스트를 찾기 위해 사용하기 때문에 두 프로토콜의 이름을 붙여 TCP/IP 라고 함.
  2. 비연결형 소켓(connectionless)
    • 스트림 소켓과 대비되는 데이터그램(Datagram) 유형의 비연결 소켓
    • 통신 시 최초 연결하는 과정이 필요 없음
    • 데이터 전달 과정에서 순서나 신뢰성 이나 중복 방지를 보장할 수 없음. 이는 메세지가 연결 지향 소켓처럼 조각으로 나뉘지 않고 통째로 송신된다는 것을 의미(우편 서비스에 비유)
    • 연결 지향 소켓은 가상 회선을 맨 처음 만들고 유지하기 위해 상당한 부가 비용이 드는데 비연결 지향 소켓은 이런 부담이 덜하고 성능면에서 더 좋다.
    • 데이터그램 소켓을 구현한 프로토콜로는 데이터그램 프로토콜(UDP, User Datagram Protocol)이 있고, UPD 소켓을 만들려면 SOCK_DGRAM을 소켓 유형으로 지정.
    • 이 소켓도 IP를 네트워크상에서 호스트를 찾기 위해 사용하므로, UPD/IP라고도 부름





0 개의 댓글:

댓글 쓰기