나만의 작은 도서관
[Network] 클라이언트, 서버 구조, 그리고 웹 애플리케이션 서버와 게임 서버의 차이 본문
유의사항: 해당 글은 공부한 내용을 정리하는 용도이므로, 수정이 필요할 경우 내용의 수정이 있을 수 있습니다.
서버와 클라이언트
네트워크에서 데이터를 주는 컴퓨터를 '서버(Server)', 데이터를 요청하고 받는 컴퓨터를 '클라이언트(Client)'라고 한다.
서버-클라이언트 구조
클라이언트 역할을 하는 컴퓨터가 Request하면 Request를 받은 서버 역할을 하는 컴퓨터가 로직을 통해 Request를 처리하고 Response한다. 이 때, 한 대의 서버에 다수의 클라이언트들이 접속하는 구조를 서버-클라이언트 구조라고 한다.
웹 애플리케이션의 등장
기존의 클라이언트-서버 구조에서는 클라이언트가 서버에 요청을 보내고, 서버가 이에 응답하는 구조를 가지고 있었다. 하지만, 웹 애플리케이션에서는 이러한 구조를 웹 브라우저가 클라이언트로서 사용되도록 확장한다.
웹 애플리케이션의 장점
클라이언트가 애플리케이션을 설치하지 않아도 되기때문에, 언제 어디서든 인터넷만 연결되어 있다면 웹을 통해 애플리케이션에 접근할 수 있다.
웹 애플리케이션의 단점
반응이 느리다. 웹 서버는 단지 받은 요청에 반응을 하는 방식이기 때문에 통신 연결을 유지하지 않으며, 미리 통신을 연결하고 다른 프로토콜인 TCP를 사용하는 것보다 속도도 느리고 자원도 많이 사용하기 때문에 적합하지 않다.
기존 방식의 성능을 따라가지 못한다. 그렇기 때문에 웹이 감당할 수 없을 레벨의 복잡한 로직 처리 방식을 지닌 애플리케이션들을 클라이언트에서 설치한다.
웹 애플리케이션 서버와 게임 서버의 차이
단순히 "게임"서버의 차이라고 하면 다른 점을 명확하게 말하기 어렵기 때문에 게임 서버의 종류를 실시간(stateful) 게임 서버, 비실시간(stateless) 게임 서버로 구분해야한다.
실시간 게임 서버는 리니지, 오버워치, LOL과 같이 실시간으로 유저들과의 상호작용이 일어나는 게임에서 사용하는 서버를 말하여,
비실시간 게임 서버는 방치형, 수집형 게임과 같이 실시간으로 유저들과의 상호작용이 일어나지 않는 게임들에서 사용하는 서브를 말한다.
비실시간 게임 서버는 실시간으로 통신이 연결되어 있어야 할 필요가 없기 때문에 필요할 때마다 데이터를 요청하는 웹 앱방식을 이용하여 제작하는 것은 연산량이 너무 많지 않은 이상 큰 문제가 되지 않으며, 실제로 온라인 웹 앱 방식으로 만들어진 게임들은 비실시간 비동기 방식의 게임인 경우가 많다.
하지만 실시간 게임 서버의 경우, 실시간으로 통신이 연결되어 있어야하며 접속 중인 유저의 데이터가 게임이 진행되는 동안 유지되어야한다. 그러나 웹 앱 방식을 사용하게 되면 실시간으로 동기화 된다는 것을 보장할 수 없고, 웹 앱 특성상 복잡한 로직을 수행하는 데 있어 성능차이가 나기 때문에 연산의 양이 적은 테트리스와 같은 실시간 게임은 웹 앱 방식으로 제작해도 되지만 연산의 양이 많고 무거운 MMORPG같은 경우 웹 앱 방식으로 제작하기 어렵다. 따라서, MMORPG같은 경우 번거럽더라고 애플리케이션을 다운 받아 사용하는 기존의 방식을 채택하고 있다.
그렇다면 실시간 게임은 웹 애플리케이션을 사용하지 않을까?
그렇지는 않다. 하나의 게임에서 하나의 서버만 사용해야하는 것은 아니기 때문에, 웹서버(로그인/인증/기타정보) - 매치메이킹(TCP) - 게임서버(TCP << 다수일 수도 있음) 이렇게 3개 서버를 두는 것처럼 실시간 게임에서도 일부 서버는 웹 애플리케이션을 사용할 수 있다.
요약
- 클라이언트는 요청하고 서버는 받은 요청에 응답한다. 이런 구조를 클라이언트-서버 구조라고 한다.
- 웹 애플리케이션 서버를 이용하면 인터넷이 연결된 어떤 곳이든 해당 애플리케이션에 접근할 수 있어서 각 클라이언트에 애플리케이션을 설치하는 방식보다 편리하다.
- 하지만, 웹 앱 방식으로 실시간 게임을 만드는 것은 비효율적이기 때문에 실시간 게임은 애플리케이션을 클라이언트에 설치하는 방식을 사용하는 경우가 많다.
참고 자료
- https://better-together.tistory.com/60
- https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8_%EC%84%9C%EB%B2%84_%EB%AA%A8%EB%8D%B8
- https://www.inflearn.com/questions/193088/%EC%9B%B9%EC%84%9C%EB%B2%84%EC%99%80-%EA%B2%8C%EC%9E%84%EC%84%9C%EB%B2%84%EC%9D%98-%ED%99%9C%EC%9A%A9%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC-%EC%A7%88%EB%AC%B8%EC%9D%B4-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4
- https://velog.io/@yarogono/%EA%B2%8C%EC%9E%84-%EC%84%9C%EB%B2%84-%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-%EA%B2%8C%EC%9E%84-%EC%84%9C%EB%B2%84%EC%9D%98-%EC%B0%A8%EC%9D%B4
- https://velog.io/@www8989/stateless-stateful-%EC%84%9C%EB%B2%84
- https://elky84.github.io/2019/03/17/game_server_develop_difference_web_server_develop/
'Common > CS-네트워크' 카테고리의 다른 글
[Network] OSI 7계층 #4. 전송 계층, UDP/TCP (0) | 2024.06.17 |
---|---|
[Network] 서브넷 마스크, IP주소의 구분, 라우팅과 라우터 (0) | 2024.05.29 |
[Network] OSI 7계층 #3. 네트워크 계층 (0) | 2024.05.28 |
[Network] OSI 7계층 #2. 물리 계층, 데이터 링크 계층 (0) | 2024.05.22 |
[Network] OSI 7계층 #1. OSI 7계층, LAN, WAN (0) | 2024.05.20 |