[CS] 클라이언트-서버 모델 (Client-Server Model)

클라이언트-서버 모델(Client-Server Model)은 네트워크 기반의 통신 구조로, 클라이언트가 서비스를 요청하고 서버가 그 요청에 응답하는 구조이다. 현대의 대부분의 인터넷 서비스(웹, 메일, DB 등)가 이 모델을 기반으로 동작한다.


1. 기본 구조

 

  • 클라이언트(Client): 서비스를 요청하는 주체 (예: 웹 브라우저, 모바일 앱)
  • 서버(Server): 클라이언트의 요청을 받아 처리하고 응답하는 주체 (예: 웹 서버, DB 서버)

2. 특징

  1. 역할 분리: 클라이언트는 요청만, 서버는 처리만 담당한다.
  2. 중앙 집중식: 서버에 데이터와 로직이 집중되어 관리가 용이하다.
  3. 확장성: 여러 클라이언트가 하나의 서버 또는 서버 풀에 접속 가능하다.
  4. 유지보수 용이: 서버만 수정하면 모든 클라이언트에게 효과가 반영된다.

3. 작동 흐름

  1. 클라이언트가 서버의 주소(IP/도메인)와 포트로 접속을 시도한다.
  2. 서버는 클라이언트의 연결 요청을 수락한다.
  3. 클라이언트가 요청(Request)을 전송한다.
  4. 서버는 요청을 처리한 후 응답(Response)을 반환한다.
  5. 연결을 유지하거나 종료한다 (HTTP는 기본적으로 단발성).

4. 예시: 웹 브라우징

 

  • 클라이언트: 웹 브라우저 (Chrome, Safari 등)
  • 서버: 웹 서버 (Apache, Nginx)
  • 요청: GET /index.html HTTP/1.1
  • 응답: HTML, CSS, JS 파일 전송

5. 클라이언트-서버 모델의 확장 형태

  • 멀티스레드 서버: 여러 클라이언트를 동시에 처리할 수 있도록 스레드로 분기한다.
  • 멀티프로세스 서버: 프로세스를 fork 하여 각 클라이언트를 독립적으로 처리한다.
  • 비동기 I/O: select/epoll 등을 사용하여 다수의 클라이언트를 효율적으로 처리한다.
  • 로드 밸런싱: 여러 서버로 요청을 분산하여 부하를 나누고 안정성 확보

6. 단점

  • 서버 과부하: 클라이언트가 많아질수록 서버 성능 한계에 도달
  • 단일 장애점(SPOF): 서버가 중단되면 전체 서비스가 마비됨
  • 비용 문제: 서버 운영 및 유지보수 비용 발생