클라이언트 서버 모델

김성현·2021년 3월 17일
0

개념

목록 보기
1/5

클라이언트-서버 아키텍처(2-Tier)

  • 리소스가 존재하는 곳(서버)과 리소스를 사용하는 앱(클라이언트)를 분리 한 2-Tier 아키텍처
  • 클라이언트가 리소스를 요청하면 서버가 리소스를 응답

서버

  • 서비스를 제공하는 컴퓨터. 클라이언트 컴퓨터 요청을 처리하기 위해 존재
  • 웹 서버, 파일 서버, 메일 서버, 데이터베이스 서버

클라이언트

  • 서버에게 접속하기 위한 접속 단말기
  • 웹브라우저는 웹서버로 접속하기 위한 터미널
  • 웹사이트(웹 앱), 스마트폰/태블릿용 앱, 데스크탑 앱

3-Tier 아키텍처

기존 2티어 아키텍처에서 리소스를 저장하는 공간인 데이터베이스가 추가되어 서버는 리소스를 전달해주는 역할만 하는 형태

프론트엔드 개발자 : 클라이언트처럼 사용자가 직접 눈으로 보고, UI를 클릭 또는 터치하는 등의 상호작용을 할 수 있는 앱을 주로 개발
백엔드 개발자 : 사용자 눈에 보이지 않지만, 상품 정보를 API로 노출한다던지, 로그인/로그아웃, 권한 관리 등의 사용자 인증을 주로 다루는 개발자

클라이언트 서버 통신

  • 컴퓨터 네트웍의 역할은 네트웍에 접속된 임의의 클라이언트가 임의의 서버와 연결될 수 있도록 하는 것이다.
  • 일반적으로 네트웍 서비스를 받기 위하여 클라이언트가 통신을 시작한다.
  • 클라이언트는 서버에 접속을 시도하고 그 연결 결과를 기다린다든가(연결형 서비스의 경우), 어떤 서비스를 요구하고 응답을 기다린다.
  • 클라이언트의 이와같은 요구(request)에 대하여 서버는 응답(response)을 보내는 방식으로 동작이 이루어진다.

서버는 리소스를 관리하기 위하여 root 권한을 갖는 경우가 많으므로 클라이언트가 서버의 리소스를 임의로 액세스하지 못하도록 주의하여 서버 프로그램을 구현하여야 함으로 클라이언트보다 구현이 복잡하다.
authentication : 접속된 클라이언트가 서비스를 제공할 대상인지 확인
security : 서버의 정보의 유출, 변경 등을 확인
concurrency : 여러 클라이언트에게 서비스를 동시에 제공하는 기능

서버의 구현 기술

연결형 비연결형 서버

클라이언트와 서버의 통신에서 사용할 트랜스포트(전송) 계층 프로토콜의 종류(TCP/UDP)에 따라 연결형 서버와 비연결형 서버로 나눌 수 있다.

  • 연결형 서버
    • TCP 프로토콜 사용
    • 데이터의 안정적인 전달을 보장
    • 모든 클라이언트의 접속마다 소켓을 각각 개설
    • 클라이언트 수가 늘면 서버 부담 증가
  • 비연결형 서버
    • UDP 프로토콜 사용
    • 메시지를 한 번만 보내면 되는 간단한 서비스에 적합
    • 하나의 소켓을 통하여 다수의 클라이언트에게 서비스제공(소켓, 메모리 절약)
    • 방송형, 멀티캐스팅형 서비스에 적합

Stateful Stateless 서버

  • Stateful 서버

    • Client와의 세션 정보를 server에 저장하고, 세션 상태에 기반한 server의 응답이 달라진다.
    • 상태 정보를 사용하면 현재의 상태에 따라 약속된 명령에 대하여 신속히 응답할 수 있게 되며, 클라이언트와 주고 받을 메시지의 크기를 줄일 수 있다.
    • TCP의 3-way handshaking(세션 '상태'가 established가 되면 client와 server는 데이터 통신)
  • Stateless 서버

    • Client와의 세션 정보를 server에 저장하지 않고, 세션 상태에 무관한 server 응답을 한다.
    • 클라이언트가 보내는 request는 서버가 동작하기에 필요한 모든 정보를 가지고 있어야 하므로 메시지의 길이가 길다.
    • UDP, HTTP - 인증 절차 x

Stateless는 Stateful에 비해 Scaling이 자유롭기 때문에 최근의 웹서비스 구조는 모두 Stateless 구조 기반을 따르고 있습니다.

HTTP는 Statelss한 성격을 가진 '프로토콜'
REST는 Stateless한 성격을 가진 '설계 구조'

Iterative Concurrent 서버

서버가 클라이언트의 서비스를 처리하는 방식(순차적, 병렬적)에 따라 Iterative서버와 Concurrent서버로 나눌 수 있다.

  • Iterative 서버
    • 하나의 프로세스가 모든 클라이언트의 서비스를 처리
    • 각 서비스의 처리 시간이 짧을 때 사용
    • 서버 프로그램 구현이 단순
  • Concurrent 서버
    • 각 클라이언트에 대해 프로세스가 하나씩 생성됨.
    • 각 서비스 처리 시간이 불규칙적이거나 길 때 필요
    • 서버 프로그램 구현이 다소 복잡

참고자료
stateful stateless
클라이언트 서버 모델

profile
JS개발자

0개의 댓글