컴퓨터 세계에서 서버와 클라이언트는 무엇인가?
서버, 클라이언트 각각의 개념과, 서버 클라이언트 구조에 대해 자유롭게 조사해주세요.
웹 어플리케이션 서버와 게임 서버의 공통점과 차이점은 무엇인가?
어떤 공통점과 차이점이 있는지? 게임 서버에서 중요하게 다루어야 하는 내용은 무엇인지 조사해주세요.
클라이언트
클라이언트란 네트워크를 통하여 서버라는 다른 컴퓨터 시스템 상의 원격 서비스에 접속할 수 있는 응용 프로그램이나 서비스
클라이언트 - 서버 구조에서 서버가 제공하는 서비스를 요청하고, 또는 서비스 요청을 위해 필요 인자를 서버가 원하는 방식에 맞게 제공하며, 서버로부터 반환되는 응답에 사용자에게 적절한 방식으로 표현하는 기능을 가진 프로그램이나 시스템.
클라이언트 - 서버 구조란
서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버간에 작업을 분리해주는 분산 어플리케이션 구조이자 네트워크 아키텍처, 웹 시스템도 확장된 '클라이언트 - 서버 구조'
클라이언트 - 서버 구조로 만들어져 있다는 것은 클라이언트와 서버가 각자의 역할에 맞게 구성됨을 말한다.
대표적인 예로 WWW이 있다 웹사이트에서는 웹 서버(IIS, Apache)가 서버 역할을 하고, 사용자가 쓰는 웹 브라우저(파이어폭스 또는 구글의 크롬)이 클라이언트 프로그램이 된다
서버
서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램 또는 장치를 의미. 특히, 서버에서 동작하는 소프트웨어를 서버 소프트웨어라 한다.
서버는 프린터 제어나 파일 관리 등 네트워크 전체를 감시 ・ 제어하거나, 메인프레임이나 공중망을 통한 다른 네트워크와의 연결, 데이터 • 프로그램 • 파일 같은 소프트웨어 자원이나 모뎀 • 펙스 • 프린터 공유, 기타 장비 등 하드웨어 자원을 공유 할 수 있게 도와주는 역할을 한다.
웹 서버
웹 서버는 하드웨어, 소프트웨어 혹은 두 개가 같이 동작하는 것을 의미
- 하드웨어 측면에서, 웹 서버의 소프트웨어와 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터. 웹 서버는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터를 주고 받을 수 있도록 합니다.
- 소프트웨어 측면에서, 웹 서버는 기본적으로 웹 사용자가 어떻게 호스트 파일들에 접근하는지를 관리.
가장 기본적인 단계에서, 브라우저가 웹 서버에서 불려진 파일을 필요로 할때, 브라우저는 HTTP를 통해 파일을 요청합니다. 요청이 올바른 웹 서버(하드웨어)에 도달하였을때, HTTP서버(소프트웨어)는 요청된 문서를 HTTP를 이용해 보내줍니다.
웹 사이트를 공개하기 위해서는 정적 혹은 동적 웹 서버가 필요
정적 웹 서버 혹은 스택은 HTTP 서버(소프트웨어)가 있는 컴퓨터로 구성되어 있습니다.
서버가 그 불려진 파일을 당신의 브라우저에게 전송하기 때문에 정적이라고 부름.
동적 웹 서버는 정적 웹 서버와 추가적인 소프트웨어(대부분 일반적인 애플리케이션 서버와 데이터베이스)로 구성애플리케이션 서버가 HTTP 서버를 통해 브라우저에게 불려진 파일들을 전송하기 전에, 애플리케이션 서버가 업데이트하기 때문에 이것을 동적이라고 부름.
정적 VS 동적
서버는 정적 혹은 동적 콘텐츠 모두 제공 가능.
"정적"은 "있는 그대로 제공되는 것(served as - is)"를 의미.
정적 웹 사이트들은 설치하기 가장 쉽다.
"동적"은 서버가 컨텐츠를 처리하는 것, 심지어 컨텐츠를 데이터베이스로부터 생성하는 것을 의미.
이 방법은 더 많은 유연성을 제공하지만, 기술적 스택이 더 다루기 힘들어 지고, 웹 사이트를 구축하는 것이 훨씬 더 복잡해짐.
게임서버
게임서버란 멀티플레이 비디오 게임을 즐기기 위해 게임 클라이언트에 쓰이는 서버로, 자신의 컴퓨터나 다른 사람의 컴퓨터에서 실행된다.
게임 서버는 리슨(Listen) 서버와 전용(Dedicated) 서버로 구별된다.
리슨 서버는 게임 클라이언트와 같은 프로세스로 실행되며, 별도의 서버 없이 다른 플레이어가 호스팅하는 서버에 접속해서 플레이를 하거나 다른 플레이어를 초대 할 수 있다. 다만 게임을 끌 때 서버도 같이 꺼진다는 단점이 존재
전용 서버는 클리언트 프로세스와 별개로 실행된다. 별도의 고성능 네트워크 상에 있는 전용 컴퓨터에서 실행되며, 플레이어들은 전용 서버에 접속해서 쾌적한 플레이를 즐길 수 있다.
TCP Server, Binary Server, Stateful Server로 불림
클라이언트가 패킷을 서버에 전송해도 서버에서 응답을 꼭 보내주지 않아도 된다.
서버에서 클라이언트로 패킷을 전송 가능
실시간 통신이 중요
공통점과 차이점
공통점
웹 어플리케이션 서버와 게임서버의 공통점은 큰틀에서 존재한다.
- 클라이언트 - 서버 아키텍처 : 웹 어플리케이션과 게임 서버 모두 클라이언트 - 서버 아키텍처 사용
- 네트워크 통신 : 둘다 네트워크를 통해 데이터를 주고 받음
- 데이터 베이스 연동 : WAS와 게임 서버 모두 데이터베이스와 연동하여 데이터를 저장하고 조회
차이점
웹의 발전은 브라우저 기반 위에서 이루어졌다.
브라우저가 소화 가능한 규격으로만 통신해야함을 의미한다.
이를 주고 받기 위한 HTTP 프로토콜이 반론의 여지가 없는 수준이었다.
웹 표준과 별개로 HTTP 프로토콜은 웹에선 빠르고, 당연하게 표준으로 자리 잡았다.
반면 게임 서버는 커스텀한 클라이언트 프로그램인 게임을 위해 발전했다.
브라우저라는 제약이 없었고, 그러므로 반드시 HTTP 프로토콜을 사용할 필요가 없다.
HTTP에서 소요되는 cost마저 아끼고 싶어했음(소켓을 직접 통제하고, 헤더와 인증, 보안 처리 모두 커스텀하게 했음을 말한다.)
또한 HTTP 프로토콜의 특징인 connectionless, stateless는 게임에 어울리지 않았다.
게임은 반응성이 웹 보다 훨씬 더 중요한 분야다.
동적 컨텐츠인 게임은, 웹처럼 다수의 사용자에게 유사한 HTML 코드를 전송 할 수 없었고, 실시간으로 변동되는 데이터를 다뤄야했기에 다른 방향으로 발전했다.
제한된 서버 자원을 잘 활용해야만 동접이 높은 게임을 만들 수 있기 때문에 게임 내에서 발생하는 실시간 동작들이 렉이 발생하지 않게 이 로직들을 최대한 가볍게 짜고, 의도치 않은 큰 연산이 일어나지 않아야 렉이 생기지 않는다.
실제로 온라인게임의 렉(latency)은 대부분 네트워크 환경으로 인한 문제보다는 서버 내부의 로직이 도는 시간보다 더 많은 처리 요청이 발생해 처리가 밀리면서 발생한 현상이다.
게임에서는 반응속도와 함께, 데이터 무결성을 보장해주어야한다. 게임 사용자는 조금의 지연도 용납하지 않는다.
반면 웹은 실제 디비에서 처리되고 있는 데이터보다 조금 예전 데이터를 주더라도 크게 문제 삼지 않는다.
그렇다 보니 캐싱이 더 쉬워지고, 브라우저도 캐싱을 하며, 사용자도 이를 인정하고 새로운 데이터를 전달 받기 위해 새로고침을 직접 한다.(사용자들 마저 이 과정을 불쾌감, 오류로 받아들이지 않고 자연스럽게 받아들인다.)
데이터의 변화량/ 응답속도가 너무나 중요한 가치인 게임, 생산성 / 확장성이 더 중요한 웹