• toc {:toc}

Notice

Computer Networks 글은 경희대학교 소프트웨어융합대학 이성원 교수님의 [컴퓨터 네트워크 CSE302] 수업을 기반으로 정리한 내용입니다.

Socket Programming

  • Socket : IP Address + Port Number

  • 컴퓨터 네트워크에서 노드 사이의 데이터를 주고 받는 내부의 endpoint를 말한다.

  • Socket Programming : TCP/IP 네트워크의 통신을 하는 기본적인 기술이다.

    • 소켓은 양방향 끝단 통신을 제공한다.
    • 소켓 연결은 주로 LAN 또는 인터넷을 통해 두 개의 다른 컴퓨터 사이에서 작동하나, 하나의 컴퓨터 안에서도 상호 통신하는데 사용된다.
  • 전통적인 소켓 프로그래밍은 클라이언트-서버 아키텍처를 사용한다.

    • 소켓 서버 : 웹서버, 이메일 서버와 같이 연결된 다른 프로그램의 요청을 듣는 프로그램이다.
    • 소켓 클라이언트 : 다른 프로그램에 연결을 하는 프로그램이다.
  • 소켓 프로그래밍 절차

image(https://www.oreilly.com/library/view/distributed-computing-in/9781787126992/02dd04be-0dbb-4732-8bc5-1961644e8875.xhtml)

  • 서버

    • 항상 살아있어야 한다.
    • 실제 프로그래밍의 경우에 정말 근본적인 TCP의 오류 검출과 같은 부분들을 다루지는 않는다. 알아서 만들라 말한다.
    • bind : 소켓을 사용하기 위해 IP, 포트를 운영체제에게 지정하라 명령
    • listen : 클라이언트의 요청을 대기
  • 클라이언트

    • 소켓을 만들고 연결 요청 서버가 수락
  • 서로 통신을 진행하고 클라이언트가 닫으면 서버도 이를 받아 닫는다.

  • 전통적 소켓 프로그래밍은 어떤 로직도 제공하지 않고 A와 B를 연결할 뿐이다.

  • 로직에 대해서는 프로그래머의 몫이다.

ZeroMQ

  • 이전부터는 기업안에서 대형 서버를 통해서 메일 등 데이터를 주고 받는 형태였느나, 2000년 후반부터 www으로 인해 웹브라우저를 사용하기 위한 웹서버가 급부상했다.

  • 개인들이 웹브라우저를 통해서 데이터를 주고 받을 수 있고 각 웹브라우저를 위한 서버가 많이 만들어졌다. 즉, 대중들이 인터넷을 사용하면서 대규모의 사용자와 서버의 관계가 만들어졌다.

  • 과거의 경우 서버의 사용자는 한정되어 있으나, 2000년 후반부터는 사용자의 수를 알 수 없다. 때문에 서버의 용량에 대한 고민이 이어졌다.

  • 2010년, 클라우드 컴퓨팅이 나타나면서 필요할 때 필요한 만큼 가상의 컴퓨팅을 사용할 수 있는 방식이 나타나면서 방식의 변환이 이루어졌다.

  • 클라우드 컴퓨팅 수많은 서버 프로그램 산출 서버 프로그래밍 방식을 오픈소스로 공개하자.

  • ZeroMQ : 높은 성능의 비동기화 메시지 라이브러리(오픈소스 라이브러리)

  • OSI 계층에서는 어떤 계층에 속한 지를 규정할 수 없다.

  • TCP의 경우 큰 자원을 가지고 큰 서버 프로그램을 만들어 사용한다.

  • 웹브라우저

  • ZeroMQ는 분산되고 동시다발적인 프로그램들이 서로 통신을 하기 위해 만들어졌다.

  • 공통적으로 자주 사용하는 구조의 프로그램을 통합적으로 프로그래밍하여 오픈 소스로 함께 사용하자!

  • Features

    • ZeroMQ API 소켓 제공
    • 소켓은 다수 대 다수 연결을 표현한다.
    • Messaging 패턴을 사용하여 요청을 주고 받는다.
  • 예시 : Client & Worker

image

  • 클라이언트에서 요청을 보내면 서버에서 로직에 따라 저장된 데이터 정보를 제공하는 형태

  • 다수의 서버가 나온 상황에서 대부분 비슷한 구조를 가지기 때문에 공통으로 오픈소스화

  • 예시 : Publish & Scribe (위젯)

image

  • 공급자(Publisher)가 존재하고 여러 명의 구독자(Subscriber)가 존재하여 정보를 제공하는 형태
  • 오른쪽 그림 - 네이버에 공급하는 형태라 생각하면 된다.
  • 날씨, 뉴스 등 여러 공급자들이 정보를 네이버(공급자 입장에서는 구독자, 구독자 입장에서는 공급자)를 통해 정보를 제공, 구독자들은 네이버를 통해 정보를 받는다.

RabbitMQ

image

  • Centralized Message Queue의 구조를 갖는다.
  • PDF를 생성해 많은 사용자에게 전송하고 싶은 경우 서버에게 전달하는데, 이를 Producer 라고 한다.
  • Producer는 데이터를 publish하고 서버는 소비자에게 전송한다.
  • 앱을 개발하고 앱에 대한 알람 메시지를 전송할 때 직접 소비자에게 전송하는 형태가 아닌, 구글이나 애플의 서버를 거쳐 전송을 해야 한다. 이때 RabbitMQ와 같은 방식으로 사용된다.