[CS] 서버, 그리고 클라이언트

GDORI·2024년 8월 24일
0

CS

목록 보기
1/10

서버와 클라이언트의 개념

우리가 원하는 정보를 얻기 위해 학교나 학원에서 수업을 듣죠? 이때 선생님은 정보를 가지고 있는 사람으로, 학생들은 그 정보를 제공받는 사람들입니다. 여기서 선생님은 서버에, 학생들은 클라이언트에 해당합니다.

  • 서버(Server): 정보를 제공하는 역할을 합니다. 선생님이 학생들에게 지식을 전달하는 것처럼, 서버는 클라이언트가 요청한 데이터를 제공합니다.
  • 클라이언트(Client): 정보를 제공받는 역할을 합니다. 학생들이 선생님으로부터 지식을 얻는 것처럼, 클라이언트는 서버로부터 데이터를 받습니다.

서버 기반 모델과 P2P 모델

선생님과 학생 간의 관계는 서버 기반 모델이라고 할 수 있습니다. 여기서 선생님(서버)은 정보를 제공하는 주체이며, 학생들(클라이언트)은 그 정보를 제공받는 주체입니다. 서버 기반 모델은 주로 중앙 서버가 모든 정보를 관리하고 배포하는 구조를 가리킵니다.

하지만 학생들 간에도 서로 정보를 공유할 때가 있을겁니다. 이때 학생들은 정보를 주고받으며 동시에 서버와 클라이언트 역할을 합니다. 이러한 학생 간의 정보 공유는 P2P 모델의 개념에 가깝습니다. P2P 모델에서는 중앙 서버 없이, 각 클라이언트가 서로 직접 데이터를 주고받습니다.

서버와 클라이언트의 역할

서버는 서비스를 제공하는 컴퓨터로, 다수의 클라이언트가 요청하는 데이터나 서비스를 제공합니다. 클라이언트는 서버로부터 이러한 서비스를 제공받는 컴퓨터입니다. 예를 들어, 우리가 웹사이트에 접속할 때, 웹 서버가 정보를 제공하고 우리는 그 정보를 받는 클라이언트(웹브라우저)가
됩니다.

서버와 클라이언트의 유동성

그렇다고 서버와 클라이언트는 고정된 역할일까요? 아닙니다! 위에 예시에서도 써있지만, 특정 상황에 따라 서버가 클라이언트 역할을 할 수도, 클라이언트가 서버 역할을 할 수도 있습니다. 선생님도 모르는게 있을 때 다른 선생님에게 정보를 얻어오겠죠? 컴퓨터 시점으로 예를 들어보면, 인기 게임 관련 데이터를 제공하는 OP.GG는 일반 사용자에게는 서버의 역할을 하지만, OP.GG 자체는 리그 오브 레전드(LOL) 서버에서 API 데이터를 받아오는 클라이언트 역할을 합니다.

클라이언트가 서버가 되는 예시를 하나 더 들자면, 블록체인 기반의 암호화폐를 들 수 있습니다. 블록체인은 중앙 서버를 두지 않고, 각 클라이언트가 정보를 분담하여 제공하는 P2P 방식을 채택합니다. 따라서 이 경우 클라이언트는 동시에 서버의 역할을 수행하는거죠.

웹서버와 게임서버의 차이

자 그러면, 우리가 주로 사용하는 웹이 아닌 게임에도 서버가 있을텐데 둘의 차이는 어떻게 될까요? 서버가 처리하는 작업의 용도와 성격에 따라 차이가 확연히 나게 됩니다.
웹서버는 클라이언트가 정보를 요청할때만 정보만 전달해주면 되지만, 게임의 경우 실시간으로 처리해야 한다는 큰 차이가 있습니다!
게임서버와 웹서버에 대해 자세한 내용은 다음과 같습니다.

게임서버의 목적과 기능
1. 실시간 데이터 처리 : 다수의 플레이어가 상호작용하는 환경속에서 플레이어의 요청 및 정보 전달을 빠르게 업데이트하고 적용해야 합니다.
2. 복잡한 로직의 처리 : 게임 물리엔진, AI처리, 게임 내 정해진 규칙 등 다양하고 복잡한 로직을 처리해야 합니다.
3. 지속적인 연결 유지 : 게임서버와 클라이언트는 실시간으로 주고받는 데이터로 구동이 되기 때문에 연결이 끊기면 이용에 제한이 생깁니다.

웹서버의 목적과 기능
1. 비실시간 데이터 처리 : 사용자 요청에 따라 웹페이지 또는 데이터를 전송합니다.
2. HTTP 요청처리 : 서버는 클라이언트로부터 HTTP 요청을 처리하고 웹페이지 또는 데이터를 반환해야 합니다.
3. 단발성 연결 : 웹서버는 주로 단발적으로 요청-응답 패턴을 가지고 있으며 지속적으로 연결을 유지할 필요가 없습니다.

웹서버와 게임서버의 요구사항

웹서버는 높은 처리량과 확장성, 보안을 요구합니다. 갑작스럽게 많은 사용자의 요청이 요구되었을 때 처리가 원활해야 합니다. 또 급증한 트래픽에도 불구하고 안정적인 서비스를 제공하기 위해서 수평적인 서버 확장이 필요하며, 중요한 데이터, 개인정보 등 민감한 정보를 다루기 때문에 SLL/TLS 데이터 암호화, 해킹공격 방어 등이 요구됩니다.

게임서버는 낮은 레이턴시와 안정성, 고성능 네트워킹을 요구합니다. 실시간으로 처리되어야 하는 데이터, 캐릭터 위치, 아이템 상태, 채팅 등 전달이 늦어질수록 이용에 제한이 되기 때문에 낮은 레이턴시가 중요하며, 이러한 경우로 인해 트래픽 관리 및 고성능 네트워킹이 뒷받침 되어야 합니다. 또한 서버가 자꾸 다운되는 등의 상황이 발생되지 않도록 안정성도 요구됩니다.

게임 서버에서 중요한 요소

자 마지막으로, 게임서버에 있어 중요하게 다루어야 하는 요소가 무엇이 있는지 알아보고 글 마치겠습니다~

  • 저지연성, Low Latency
    가장 중요한건 위에서도 계속 언급되었던 저지연성, Low Latency
    게임에서 지연 시간은 사용자에게 큰 타격으로 이어질 수 있습니다. FPS의 경우에만 해도 0.1~2초 사이에 킬데스가 정해지기 때문에 지연시간은 중요하다고 볼 수 있습니다. 따라서 저지연성 네트워크 프로토콜과 효율적인 서버 로직이 필요합니다.

  • 서버 안정성
    다음은, 서버 안정성 서버가 잦은 오류 및 튕김으로 인해 제대로 작동하지 않는다면 사용자의 불만이 이만저만이 아닐 것입니다. 이는 장기적으로 보았을 때 사용자 이탈로 이어질 수 있기 때문에 중요합니다. 이를 대비하기 위하여 서버 모니터링, 부하 분산, 백업 서버 등의 대안이 있습니다.

  • 서버 확장성
    만약, 갑작스럽게 나의 게임이 흥행하여 내가 생각했던 것보다 많은양의 트래픽이 발생하면 어떻게 될까요? 이럴 때를 대비하여 서버 확장성이 중요합니다. 이러한 수요를 처리하기 위해 상황에 따른 서버 추가와 서버 성능 향상이 가능해야합니다. 배틀그라운드의 경우 AWS와 AZURE를 동시 사용하여 멀티클라우드 환경을 구축하였죠. 트래픽에 맞게 자원을 조절하는데에 좋기 때문입니다.

  • 서버 보안성
    근데 아무리 서버를 안정적으로 구축하고, 확장이 자유롭고, 저지연성이라도 계정 해킹, 핵, 패킷 파싱으로 인한 아이템 복사, DDOS로 인한 서버 다운 등의 상황이 발생하면 사용자의 불만이 급증할 것입니다.. 따라서 서버의 보안성 또한 중요한 요소라고 볼 수 있겠습니다. 사용자의 계정을 보호할 대책과 데이터 암호화, 공격 탐지 및 어뷰징 탐지 및 방지 등이 필요로 합니다.

정리

두서없이 글을 써내려간 것 같아서 정리를 한번 하고자 한다.

서버 : 정보를 제공하는 주체
클라이언트 : 정보를 받는 주체

서버기반모델 : 중앙서버가 정보를 관리하고 배포
P2P 모델 : 클라이언트 간 데이터를 주고 받는 방식
-> 서버와 클라이언트의 역할 유동성을 의미함. ( 클라이언트 <-> 서버 )

웹서버와 게임서버의 차이
게임서버 : 실시간 데이터 처리, 복잡한 로직 처리, 지속적인 연결유지
웹서버 : 비실시간 데이터 처리, HTTP 요청 처리, 단발성 연결

웹서버와 게임서버의 요구사항
게임서버 : 낮은 레이턴시, 안정성, 고성능 네트워킹
웹서버 : 높은 처리량, 확장성, 보안

게임서버 중요한 요소
1. 저지연성 / 2. 서버 안정성 / 3. 서버 확장성 / 4. 서버 보안성

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글