클라이언트-서버 모델

Client–server model
인터넷을 통해 서버와 통신하는 클라이언트의 컴퓨터 네트워크 다이어그램

클라이언트-서버 모델서버라는 리소스 또는 서비스 공급자와 클라이언트라는 서비스 요청자 간에 작업 또는 워크로드를 분할하는 분산 애플리케이션 구조입니다.[1] 종종 클라이언트와 서버는 별도의 하드웨어에서 컴퓨터 네트워크를 통해 통신하지만 클라이언트와 서버 모두 동일한 시스템에 상주할 수 있습니다. 서버 호스트는 클라이언트와 리소스를 공유하는 하나 이상의 서버 프로그램을 실행합니다. 클라이언트는 일반적으로 리소스를 공유하지 않지만 서버에서 콘텐츠나 서비스를 요청합니다. 따라서 클라이언트는 수신 요청을 기다리는 서버와의 통신 세션을 시작합니다. 클라이언트-서버 모델을 사용하는 컴퓨터 응용 프로그램의 예로는 이메일, 네트워크 인쇄 및 월드 와이드 웹이 있습니다.

클라이언트 및 서버 역할

"클라이언트-서버" 특성은 응용프로그램에서 협력하는 프로그램들의 관계를 설명합니다. 서버 구성요소는 하나 이상의 클라이언트에게 기능 또는 서비스를 제공하여 그러한 서비스에 대한 요청을 시작합니다. 서버는 제공하는 서비스에 따라 분류됩니다. 예를 들어 웹 서버는 웹 페이지를 제공하고 파일 서버컴퓨터 파일을 제공합니다. 공유 리소스프로그램데이터에서 프로세서저장 장치에 이르기까지 서버 컴퓨터의 소프트웨어 및 전자 구성 요소 중 어느 하나일 수 있습니다. 서버의 자원 공유는 서비스를 구성합니다.

컴퓨터가 클라이언트인지 서버인지 또는 둘 다인지 여부는 서비스 기능을 필요로 하는 응용 프로그램의 특성에 따라 결정됩니다. 예를 들어, 하나의 컴퓨터가 웹 서버와 파일 서버 소프트웨어를 동시에 실행하여 다른 종류의 요청을 하는 클라이언트에게 다른 데이터를 제공할 수 있습니다. 클라이언트 소프트웨어는 또한 동일한 컴퓨터 내의 서버 소프트웨어와 통신할 수 있습니다.[2] 데이터 동기화와 같은 서버 간 통신을 서버 통신 또는 서버 간 통신이라고도 합니다.

클라이언트 및 서버 통신

일반적으로 서비스는 컴퓨터 리소스의 추상화이며 클라이언트는 요청을 이행하고 응답을 제공하는 동안 서버가 수행하는 방식에 대해 관심을 가질 필요가 없습니다. 클라이언트는 잘 알려진 응용 프로그램 프로토콜, 즉 요청된 서비스에 대한 데이터의 내용 및 형식을 기반으로 응답을 이해하기만 하면 됩니다.

클라이언트와 서버는 요청-응답 메시지 패턴으로 메시지를 교환합니다. 클라이언트가 요청을 보내면 서버는 응답을 반환합니다. 이러한 메시지 교환은 프로세스통신의 한 예입니다. 통신하려면 컴퓨터가 공통 언어를 사용해야 하며 클라이언트와 서버 모두가 무엇을 기대해야 하는지 알 수 있도록 규칙을 따라야 합니다. 통신의 언어와 규칙은 통신 프로토콜에 정의되어 있습니다. 모든 프로토콜은 애플리케이션 계층에서 작동합니다. 응용 계층 프로토콜은 대화의 기본 패턴을 정의합니다. 데이터 교환을 더욱 공식화하기 위해 서버는 API(Application Programming Interface)를 구현할 수 있습니다.[3] API는 서비스에 액세스하기 위한 추상화 계층입니다. 통신을 특정 콘텐츠 형식으로 제한함으로써 구문 분석을 용이하게 합니다. 액세스를 추상화하여 플랫폼 간 데이터 교환을 용이하게 합니다.[4]

서버는 짧은 기간 내에 많은 별개의 클라이언트로부터 요청을 받을 수 있습니다. 컴퓨터는 언제든지 제한된 수의 작업만 수행할 수 있으며, 클라이언트의 수신 요청을 수용하기 위해 우선 순위를 지정하기 위해 스케줄링 시스템에 의존합니다. 남용을 방지하고 가용성을 최대화하기 위해 서버 소프트웨어는 클라이언트의 가용성을 제한할 수 있습니다. 서비스 거부 공격은 서버가 과도한 요청 비율로 오버로드하여 요청을 처리해야 하는 의무를 악용하도록 설계되었습니다. 중요한 정보를 클라이언트와 서버 간에 통신하려면 암호화를 적용해야 합니다.

은행 고객이 웹 브라우저(클라이언트)를 사용하여 온라인 뱅킹 서비스에 액세스하면 클라이언트는 은행의 웹 서버에 대한 요청을 시작합니다. 고객의 로그인 자격 증명은 데이터베이스에 저장될 수 있고, 웹 서버는 클라이언트로서 데이터베이스 서버에 액세스합니다. 애플리케이션 서버는 은행의 비즈니스 로직을 적용하여 반환된 데이터를 해석하고 출력물을 웹 서버에 제공합니다. 마지막으로 웹 서버는 표시를 위해 결과를 클라이언트 웹 브라우저로 반환합니다.

클라이언트-서버 메시지 교환의 이 시퀀스의 각 단계에서 컴퓨터는 요청을 처리하고 데이터를 반환합니다. 요청 응답 메시지 패턴입니다. 모든 요청이 충족되면 순서가 완료되고 웹 브라우저가 고객에게 데이터를 제공합니다.

이 예에서는 클라이언트-서버 모델에 적용할 수 있는 설계 패턴(관심사 분리)을 보여 줍니다.

초기역사

클라이언트-서버 아키텍처의 초기 형태는 원격 작업 입력으로, 적어도 OS/360(1964년 발표)과 동일하며, 작업 실행 요청과 응답이 출력이었습니다.

1960년대와 1970년대에 클라이언트-서버 모델을 공식화하면서 (스탠퍼드 연구소에서) ARPANET을 구축하는 컴퓨터 과학자들서버-호스트(또는 서빙 호스트)와 사용자-호스트(또는 사용 호스트)라는 용어를 사용했으며, 이들은 초기 문서 RFC 5와[5] RFC 4에 나와 있습니다.[6] 이러한 사용은 1970년대 중반에 Xerox PARC에서 계속되었습니다.

연구원들이 이 용어들을 사용한 한 가지 맥락은 DEL(Decod-Encode Language)이라는 컴퓨터 네트워크 프로그래밍 언어의 설계였습니다.[5] 이 언어의 목적은 하나의 컴퓨터(사용자-호스트)에서 명령을 받아들이는 것이었고, 이는 네트워크 패킷에 명령을 인코딩할 때 상태 보고서를 사용자에게 반환합니다. DEL이 가능한 또 다른 컴퓨터인 서버 호스트가 패킷을 수신하여 디코딩하고 포맷된 데이터를 사용자 호스트로 반환했습니다. 사용자 호스트의 DEL 프로그램이 사용자에게 제공할 결과를 받았습니다. 이것은 클라이언트와 서버 간의 트랜잭션입니다. DEL의 개발은 미국 국방부가 ARPANET(인터넷의 전신)을 설립한 1969년에 막 시작되었습니다.

클라이언트-호스트 및 서버-호스트

클라이언트-호스트서버-호스트클라이언트서버와 미묘하게 다른 의미를 갖습니다. 호스트는 네트워크에 연결된 모든 컴퓨터입니다. 서버클라이언트는 컴퓨터 또는 컴퓨터 프로그램을 의미할 수 있지만 서버-호스트클라이언트-호스트는 항상 컴퓨터를 의미합니다. 호스트는 다용도의 다기능 컴퓨터입니다. 클라이언트서버는 호스트에서 실행되는 프로그램에 불과합니다. 클라이언트-서버 모델에서 서버는 서빙 작업에 더 많이 할애될 가능성이 있습니다.

클라이언트라는 단어의 초기 사용은 1978년 제록스 PARC 컴퓨터 과학자 하워드 스터기스, 제임스 미첼, 제이 이스라엘의 논문인 "분산 파일 시스템에서 기능으로부터 데이터 분리"에서 찾아볼 수 있습니다. 저자들은 독자를 위한 용어를 정의하는 데 신중하며, 사용자와 사용자의 네트워크 노드(클라이언트)를 구별하기 위해 이 용어를 사용한다고 설명합니다.[7] 1992년까지 서버라는 단어는 일반적인 용어로 사용되었습니다.[8][9]

중앙집중식 컴퓨팅

클라이언트-서버 모델은 서버-호스트에 클라이언트-호스트보다 더 많은 리소스가 있어야 한다는 것을 지시하지 않습니다. 오히려 범용 시스템은 다른 호스트의 공유 리소스를 사용하여 기능을 확장할 수 있습니다. 그러나 중앙 집중식 컴퓨팅은 특히 적은 수의 컴퓨터에 많은 리소스를 할당합니다. 클라이언트-호스트에서 중앙 컴퓨터로 더 많은 계산이 오프로드될수록 클라이언트-호스트는 더 단순해질 수 있습니다.[10] 계산 및 저장을 위해 네트워크 리소스(서버 및 인프라)에 크게 의존합니다. 디스크 없는 노드는 네트워크에서 운영 체제까지 로드하고 컴퓨터 터미널에는 운영 체제가 전혀 없으며 서버에 대한 입출력 인터페이스일 뿐입니다. 반면 개인용 컴퓨터와 같은 부유한 클라이언트는 많은 리소스를 가지고 있으며 필수 기능을 서버에 의존하지 않습니다.

1980년대부터 1990년대 후반까지 마이크로컴퓨터의 가격이 낮아지고 성능이 높아짐에 따라 많은 조직에서 메인프레임이나 미니컴퓨터와 같은 중앙 집중식 서버에서 리치 클라이언트로 컴퓨팅을 전환했습니다.[11] 이를 통해 컴퓨터 리소스에 대한 보다 많은 개별화된 지배력을 확보할 수 있었지만 복잡한 정보 기술 관리가 가능했습니다.[10][12][13] 2000년대에 웹 애플리케이션은 특정 마이크로아키텍처용으로 개발된 애플리케이션 소프트웨어에 필적할 만큼 충분히 성숙되었습니다. 이러한 성숙, 보다 경제적인 대용량 스토리지 및 서비스 지향 아키텍처의 등장은 2010년대 클라우드 컴퓨팅 트렌드를 만든 요인 중 하나였습니다.[14]

P2P 아키텍처와의 비교

클라이언트-서버 모델 외에도 분산 컴퓨팅 애플리케이션은 종종 P2P(Peer-to-Peer) 애플리케이션 아키텍처를 사용합니다.

클라이언트-서버 모델에서 서버는 종종 많은 클라이언트에 서비스를 제공하는 중앙 집중식 시스템으로 작동하도록 설계됩니다. 서버의 컴퓨팅 능력, 메모리 및 스토리지 요구사항은 예상되는 워크로드에 맞게 적절하게 확장되어야 합니다. 로드 밸런싱페일오버 시스템은 종종 단일 물리적 시스템을 넘어 서버를 확장하는 데 사용됩니다.[15][16]

로드 밸런싱은 서버 팜의 여러 서버에 걸쳐 네트워크 또는 애플리케이션 트래픽을 체계적이고 효율적으로 분산하는 것으로 정의됩니다. 각 로드 밸런서는 클라이언트 장치와 백엔드 서버 사이에 위치하여 수신 요청을 수신한 다음 이를 수행할 수 있는 모든 사용 가능한 서버에 전송합니다.

피어 투 피어 네트워크에서 둘 이상의 컴퓨터(피어)가 리소스를 풀링하고 분산 시스템에서 통신합니다. 피어는 비계층적 네트워크에서 동일하거나 동일한 노드입니다. 클라이언트-서버 또는 클라이언트-대기열-클라이언트 네트워크의 클라이언트와 달리 피어는 서로 직접 통신합니다.[citation needed] 피어투피어 네트워킹에서 피어투피어 통신 프로토콜의 알고리즘은 부하를 균형 있게 조정하며, 리소스가 적은 피어도 부하를 공유하는 데 도움이 될 수 있습니다.[citation needed] 노드를 사용할 수 없게 되면 다른 피어가 노드를 제공하는 동안 해당 공유 리소스를 사용할 수 있습니다. 이상적으로, 피어의 가용성 및 로드 용량이 변경됨에 따라 프로토콜이 요청을 재라우팅하기 때문에 다른 중복 피어가 리소스 다운타임을 보충하기 때문에 피어는 고가용성을 달성할 필요가 없습니다.

클라이언트-서버 및 마스터-슬레이브 모두 분산 피어-투-피어 시스템의 하위 범주로 간주됩니다.[17]

참고 항목

메모들

  1. ^ "Distributed Application Architecture" (PDF). Sun Microsystem. Archived from the original (PDF) on 6 April 2011. Retrieved 2009-06-16.
  2. ^ X 윈도우 시스템이 한 예입니다.
  3. ^ Benatallah, B.; Casati, F.; Toumani, F. (2004). "Web service conversation modeling: A cornerstone for e-business automation". IEEE Internet Computing. 8: 46–54. doi:10.1109/MIC.2004.1260703. S2CID 8121624.
  4. ^ Dustdar, S.; Schreiner, W. (2005). "A survey on web services composition" (PDF). International Journal of Web and Grid Services. 1: 1. CiteSeerX 10.1.1.139.4827. doi:10.1504/IJWGS.2005.007545.
  5. ^ a b Rulifson, Jeff (June 1969). DEL. IETF. doi:10.17487/RFC0005. RFC 5. Retrieved 30 November 2013.
  6. ^ Shapiro, Elmer B. (March 1969). Network Timetable. IETF. doi:10.17487/RFC0004. RFC 4. Retrieved 30 November 2013.
  7. ^ Sturgis, Howard E.; Mitchell, James George; Israel, Jay E. (1978). "Separating Data from Function in a Distributed File System". Xerox PARC.
  8. ^ Harper, Douglas. "server". Online Etymology Dictionary. Retrieved 30 November 2013.
  9. ^ "Separating data from function in a distributed file system". GetInfo. German National Library of Science and Technology. Archived from the original on 2 December 2013. Retrieved 29 November 2013.
  10. ^ a b Nieh, Jason; Yang, S. Jae; Novik, Naomi (2000). "A Comparison of Thin-Client Computing Architectures". Academic Commons. doi:10.7916/D8Z329VF. Retrieved 28 November 2018.
  11. ^ d'Amore, M. J.; Oberst, D. J. (1983). "Microcomputers and mainframes". Proceedings of the 11th annual ACM SIGUCCS conference on User services - SIGUCCS '83. p. 7. doi:10.1145/800041.801417. ISBN 978-0897911160. S2CID 14248076.
  12. ^ Tolia, Niraj; Andersen, David G.; Satyanarayanan, M. (March 2006). "Quantifying Interactive User Experience on Thin Clients" (PDF). Computer. IEEE Computer Society. 39 (3): 46–52. doi:10.1109/mc.2006.101. S2CID 8399655.
  13. ^ Otey, Michael (22 March 2011). "Is the Cloud Really Just the Return of Mainframe Computing?". SQL Server Pro. Penton Media. Archived from the original on 3 December 2013. Retrieved 1 December 2013.
  14. ^ Barros, A. P.; Dumas, M. (2006). "The Rise of Web Service Ecosystems". IT Professional. 8 (5): 31. doi:10.1109/MITP.2006.123. S2CID 206469224.
  15. ^ Cardellini, V.; Colajanni, M.; Yu, P.S. (1999). "Dynamic load balancing on Web-server systems". IEEE Internet Computing. Institute of Electrical and Electronics Engineers (IEEE). 3 (3): 28–39. doi:10.1109/4236.769420. ISSN 1089-7801.
  16. ^ "What Is Load Balancing? How Load Balancers Work". NGINX. June 1, 2014. Retrieved January 21, 2020.
  17. ^ Varma, Vasudeva (2009). "1: Software Architecture Primer". Software Architecture: A Case Based Approach. Delhi: Pearson Education India. p. 29. ISBN 9788131707494. Retrieved 2017-07-04. Distributed Peer-to-Peer Systems [...] This is a generic style of which popular styles are the client-server and master-slave styles.