클라이언트-서버 모델

이재원·2024년 2월 28일

Client - Server Model

  • 클라이언트-서버 모델은 분산 네트워크 아키텍처의 핵심 개념
  • 네트워크상에서 자원을 공유하는 컴퓨터 시스템의 구조이다.
    • 클라이언트는 서비스를 요청하는 역할
    • 서버는 이러한 요청에 대해 서비스를 제공하는 역할
      • 서버는 네트워크상에서 서비스를 제공하기 위해 항상 실행되어 대기 상태를 유지한다.

서버(Server)

  • 네트워크를 통해 클라이언트에게 데이터, 자원 또는 서비스를 제공하는 컴퓨터 또는 프로그램
  • 일반적으로 강력한 컴퓨터 하드웨어로 구성되어 있으며, 여러 클라이언트의 요청을 동시에 처리할 수 있다.
  • 활용사례
    • 웹 서버, 메일 서버, 파일 서버, 데이터베이스 서버 등이 있다. 대부분의 웹 기반 응용 프로그램이 이 모델을 따른다.

클라이언트(Client)

  • 서비스나 자원을 요청하는 사용자 측의 컴퓨터 또는 프로그램
  • 사용자의 요청에 따라 서버에 연결하고, 서버로부터 정보를 요청하거나 서비스를 받는다.
  • 클라이언트는 데스크톱 컴퓨터, 랩톱, 스마트폰 등 다양한 형태가 있으며, 사용자 인터페이스와 사용자와의 상호작용을 처리한다.

C언어에서의 활용

  • C언어로 네트워크 응용 프로그램을 개발할 때, 소켓 프로그래밍을 통해 클라이언트와 서버 간의 통신을 구현한다.
  • 클라이언트는 서버에 연결을 요청하고, 서버는 이를 수락하여 통신 세션을 생성한다.

운영체제 구현 측면

  • 운영체제는 네트워크 스택소켓 API를 제공하여 클라이언트와 서버 응용 프로그램이 네트워크 통신을 수행할 수 있도록 지원한다.
  • 중요한 고려사항은 네트워크 보안, 연결 관리, 데이터 전송 최적화이다.

클라이언트-서버 모델의 특징

  • 서버는 중앙에 위치하여 데이터와 자원을 관리하고, 클라이언트는 이러한 자원에 접근하기 위해 서버에 연결한다.
  • 서버의 성능을 향상시키거나 추가 서버를 네트워크에 포함시켜 시스템의 처리 능력을 증가시킬 수 있다.
  • 서비스 요구 사항에 따라 클라이언트와 서버의 소프트웨어를 독립적으로 업데이트하고 수정할 수 있다.
  • 중앙 집중화된 서버를 통해 데이터와 자원의 보안을 관리할 수 있으며, 접근 제어 및 암호화를 통해 정보를 보호할 수 있다.

동작방식

  1. 클라이언트는 서비스를 받기 위해 서버에 특정 작업을 요청한다. 이 요청은 네트워크를 통해 전송된다.
  2. 서버는 클라이언트의 요청을 받아 처리하고, 필요한 작업을 수행한다.
  3. 서버는 처리 결과를 클라이언트에게 응답으로 보낸다. 클라이언트는 이 응답을 받아 사용자에게 결과를 제공한다.

이외의 다양한 네트워크 모델

Peer to Peer (P2P)

  • 모든 컴퓨터(또는 노드)가 동등한 역할을 수행한다.
  • 즉, 클라이언트와 서버의 역할이 고정되어 있지않아 각 노드는 클라이언트와 서버의 역할을 동시에 수행할 수 있다.
  • 파일 공유 시스템, 분산 컴퓨팅 프로젝트, 일부 메신저 시스템 등에 널리 사용된다.
  • 중앙 서버에 의존하지 않기 때문에 네트워크의 확장성과 탄력성이 뛰어나다.
  • 운영체제 구현 측면
    • 운영체제는 P2P 모델을 지원하기 위해 NAT 트래버설(NAT Traversal) 기술, 방화벽을 통과하는 기술 등을 제공할 수 있다.
    • 데이터의 직접적인 교환을 지원하기 위한 네트워킹 기능을 제공한다.

마스터-슬레이브 (Master-Slave)

  • 마스터-슬레이브 모델에서는 한 주요 서버(마스터)가 여러 클라이언트(슬레이브)를 제어하고 관리한다.
  • 데이터베이스 관리 시스템, 네트워크 관리에서 주로 사용됩니다.
  • 마스터는 요청을 처리하고, 슬레이브는 마스터의 지시에 따라 작업을 수행한다.

클라이언트-큐-클라이언트 (Client-Queue-Client, CQC)

  • CQC 모델에서는 메시지 큐를 사용하여 클라이언트 간의 비동기 통신을 가능하게 한다.
  • 메시지 지향 미들웨어(MOM)에 기반하여, 메시지를 큐에 저장하고 클라이언트가 준비되면 메시지를 수신하도록 한다.
  • 대규모 분산 시스템에서 복잡한 통신 패턴을 관리하는 데 유용하다.

메시지 큐 (Message Queuing)

  • 메시지 기반 미들웨어를 사용하여 애플리케이션, 시스템, 서비스 간에 메시지를 비동기적으로 교환하는 방법이다.
  • 시스템 간 비동기 통신, 분산 시스템에서의 작업 분배, 로드 밸런싱 등이 있다.
  • 메시지를 큐에 저장하여, 송신자와 수신자가 서로 다른 속도로 작동해도 통신이 가능하다.

퍼블리시-서브스크라이브 (Publish-Subscribe)

  • '퍼블리셔'는 특정 토픽에 대한 메시지를 발행(publish)하고, '서브스크라이버'는 관심 있는 토픽을 구독(subscribe)한다.
  • 특정 토픽에 대한 업데이트를 구독자에게 자동으로 전송한다.
  • 실시간 데이터 처리 시스템, 이벤트 알림 시스템, 메시지 중개 시스템(MQTT 등) 등이 있다.
  • 이벤트 기반 통신을 용이하게 하며, 느슨한 결합(loose coupling)을 통해 시스템의 확장성과 유연성을 향상시킨다.

요청-응답 (Request-Response)

  • 클라이언트가 서버에 요청을 보내고, 서버가 해당 요청에 대한 응답을 반환하는 기본적인 통신 패턴이다.
  • 클라이언트-서버 모델의 기본 형태 중 하나이다.
  • 대부분의 웹 애플리케이션과 API 통신, 원격 프로시저 호출(RPC) 등에 사용된다

멀티캐스트 통신

  • 하나의 송신자가 특정 멀티캐스트 그룹에 속한 여러 수신자에게 데이터를 전송하는 방식이다.
  • 브로드캐스트(broadcast)와 유니캐스트(unicast)의 중간 형태로 볼 수 있다.
  • 온라인 회의, 실시간 비디오 스트리밍, 멀티플레이어 온라인 게임 등이 있다.
  • 네트워크 트래픽과 자원 사용을 최적화할 수 있어, 대규모 실시간 데이터 전송에 적합하다.
profile
최고가 되기 위한 여정

0개의 댓글