본문 바로가기
CS 공부

서버와 클라이언트

by 나노다 2024. 12. 7.

서버?

네트워크 상에서 데이터와 리소스를 제공하는 컴퓨터 또는 시스템

클라이언트?

서버로부터 데이터나 서비스를 요청하는 장치 또는 소프트웨어

  • 데스크탑, 노트북, 스마트폰 등의 장치들도 클라가 될 수 있고, 웹 상에서는 브라우저, 게임 측에서는 실행 프로그램 등도 클라가 될 수 있음
  • 또는 A 서버가 다른 서버에 정보를 요청하는 경우엔 A 서버가 클라가 될 수도 있음!

“이렇듯 서버와 클라이언트의 역할 배분은 유동적으로 상황에 맞게 처리될 수 있다!”

서버-클라이언트 구조

  • 기본 골자 : 클라이언트의 요청서버가 받아서 처리서버의 응답클라이언트가 받아서 사용
  • 데이터베이스의 개입을 기준으로 두 가지 유형의 구조를 확인할 수 있음
    • 2-Tier Architecture : 서버와 클라이언트 단 둘의 교류만 있는 상황
    • 3-Tier Architecture : 클라의 요청에 맞는 리소스를 제공하기 위해 서버와 데이터베이스의 교류가 추가된 상황.

웹 서버 WS와 웹 어플리케이션 서버 WAS

웹 서버 WS

  • HTTP와 같은 프로토콜을 통한 클라의 요청에 대해, HTML 등의 방식으로 응답하는 소프트웨어
  • 또는 그런 소프트웨어를 동작하게 만들고, 웹 페이지의 데이터 등을 실제로 저장하는 하드웨어
  • 정적인 동작만을 다룸. WS에서 동적 컨텐츠가 필요해질 경우 WAS로 요청을 전달!
    • Static page : 서버의 별도 처리가 없어도 사용자들에게 보여줄 수 있는 페이지, 항상 동일한 페이지를 반환
    • Dynamic page : 서버가 요청에 대한 처리를 수행하고, 그 결과를 보여주는 페이지. 사용자마다의 맞춤형 페이지를 반환

      웹 어플리케이션 서버 WAS

  • WS처럼 정적인 페이지도 보여줄 수 있으면서, 웹 컨테이너를 통해 요청에 맞는 동적 콘텐츠도 제공할 수 있음
  • WS의 헬프 요청을 받고, 이를 웹 컨테이너로 보내 로직을 처리한 후, 그 결과를 WS에게 보냄으로써 최종적으로 클라가 요청 결과를 확인할 수 있도록 함
  • 주로 데이터베이스 서버와 함께 기능

    WS와 WAS가 분리된 이유

  • 담당 기능을 분할해 서버의 부하를 방지, 단순 정적 컨텐츠는 WS에서, 데이터베이스 조회나 로직 처리는 WAS에서 담당
  • 물리적인 분리를 통해 보안성을 강화, 개방 가능한 데이터는 WS에서 관리, 은닉이 필요한 파일들은 WAS에 넣고 방화벽 ON

“WAS를 통해 리소스 처리의 효율성을 높이고, 서버 유지 보수를 수월하게 함!”

게임 서버

  • 여러 플레이어가 함께 게임을 할 수 있게 해주는 소프트웨어나 그 소프트웨어를 가동 중인 하드웨어
  • 대개 단일 서버 보단 게임 내 기능을 분할해 담당하는 여러 서버가 존재
  • Stateful Server의 특징을 가짐
    • 상태 유지 O (Stateful) : 서버가 클라이언트의 상태를 보존. 서버와 클라 간 여러 송수신 과정에서, 서버가 클라의 이전 송수신 정보를 기억하고 있음. TCP 등의 프로토콜이 이에 해당
    • 무상태 (Stateless) : 서버가 클라의 상태를 보존하지 않음. 서버는 단순히 요청이 오면 응답을 보내는 역할 만 수행. 모든 상태 정보는 클라가 가지고 있다가 서버와 통신 시 정보를 실어 보냄. HTTP나 UDP 등의 프로토콜이 이에 해당

웹 어플리케이션 서버와 게임 서버 비교

  • 공통점 : 서버와 클라가 관계를 맺고 서로 데이터를 송수신한다는 점
  • 차이점
    1. 클라이언트가 브라우저로 한정된다는 제약이 있는 WAS와 달리, 게임 서버는 각 게임에 맞게 커스텀된 실행 프로그램이 클라이언트가 되기 때문에 자유도가 높음
    2. 대개 WAS는 데이터의 효율성과 유지보수의 편의성에 중점을 두고, 게임 서버는 데이터의 변화량과 응답 속도에 중점을 둠
    3. WAS 환경에선 클라의 요청이 있어야만 서버가 응답할 수 있고, 하나의 요청엔 무조건 응답이 있어야 하는데(단방향 통신), 게임 서버에선 요청이 있더라도 응답하지 않을 수도 있고, 요청이 없더라도 응답할 수 있음(양방향 통신)

이 사람 정리가 대단하다
https://dydgustmdfl1231.tistory.com/35

WS / WAS
https://da-in.github.io/posts/WS-WAS/

게임 서버 개발과 웹 서버 개발의 차이
https://elky84.github.io/2019/03/17/game_server_develop_difference_web_server_develop/