2. 문서의 목적
• 일반적인 게임 서버에 대한 대략적인 이해를 돕기 위해
• 서버의 용어 및 구조에 대해 이해하고 커뮤니케이션이 가능 하기 위해
• 서버를 고려한 게임 디자인이 가능하도록 하기 위해
• 각종 자료 출처
➢ https://www.slideshare.net/sm9kr/6-20903192
➢ https://www.slideshare.net/hyunjikbae1/ss-35206140
5. 서버(Server)란 무엇인가?
• 멀티 플레이 게임의 처리 과정
➢ Input이 네트워크 상의 다른 컴퓨터로부터 발생할 수 있음
➢ 게임 로직 및 상태 처리를 다른 컴퓨터에서 함
6. 서버(Server)란 무엇인가?
• 서버의 정의
➢ 클라이언트에게 네트워크를 통해 서비스를 하는 컴퓨터를 지칭하는 단어
➢ 일반적인 인터넷이나 온라인 게임, 웹 게임 등은 서버 역할만을 수행하는 PC가
존재하지만, 게임 구조에 따라 개인용 컴퓨터(PC)도 서버가 될 수 있음
8. 서버의 종류
• P2P(Peer to Peer) 서버
➢ 클라이언트간 상호 직접 연결
➢ 빠른 반응성 및 저렴한 유지 비용이 장점
➢ 확장성 및 해킹(Cheating)에 취약
➢ FPS 및 RTS 장르에 적합
서든어택
스타크래프트
9. 서버의 종류
• P2P 서버의 처리 구조
➢ 게임의 각종 이벤트를 교환해 각자 게임 로직을 처리
10. 서버의 종류
• P2P 서버의 동기화 구조
➢ 주기적(50ms)으로 이벤트를 모아 서로 한번에 교환
➢ 상대 Peer로 부터 해당 라운드의 이벤트를 모아 각자 처리
▪ 각각의 클라이언트는 모두 위와 같은 형태의 Queue 유지
11. 서버의 종류
• 리슨(Listen) 서버
➢ 호스트(Host) 서버라고도 말하며, 클라이언트 중 하나가 서버의 역할을 담당
➢ 호스트를 패킷 중계
➢ 실제 게임 로직 처리는 P2P 방식처럼 각자 하는 경우가 많음
▪ 모든 로직 처리를 호스트가 담당하면 부하가 크기 때문
➢ 호스트가 게임을 이탈하면 서버 자체가 날아가거나, 다른 플레이어가 호스트 역
할을 이어받음
스타크래프트 대기 방
12. 서버의 종류
• 클라이언트 서버
➢ 클라이언트들은 하나의 큰 서버를 통해 서로 통신
➢ 중요한 로직은 모두 서버에서 처리함으로써 해킹으로부터 비교적 안전
➢ 24시간 돌아가야 하는 게임 중 세션 단위로 분할되는 게임도 클라이언트 서버
를 사용
배틀그라운드
월드 오브 워크래프트
13. 서버의 종류
• 클라이언트 서버의 처리 및 동기화 구조
➢ 각 클라이언트에서 발생하는 입력을 모두 서버로 보내고, 서버에서 일괄적으로
모아서 처리한 후 각 클라이언트에게 내용을 전달 (브로드캐스트)
➢ 네트워크 트래픽이 서버에 집중되는 구조
➢ 게임 내의 NPC가 생성하는 이벤트도 해당 영역의 클라이언트에게 방송
14. 서버의 종류
• 웹 기반 서버
➢ 연결 유지가 필요 없어 접속이 불안정한 환경에서 유리
➢ 반응 속도가 중요하지 않은 모바일 게임 및 소셜 게임 장르에 적합
➢ 부하 분산(웹 서버 추가)이 용이하여 확장성이 높음
아이 러브 커피
팜빌
15. 서버의 종류
• 웹 기반 서버의 처리 구조
➢ 웹의 특징을 그대로 물려 받은 Request/Response 구조
➢ 수동적인 특징이 있으며, 서버에선 몬스터의 선공과 같은 능동적인 처리 불가능
16. 서버의 종류
• 정리
➢ 만들고자 하는 게임의 특성에 따라 서버의 구조를 결정
▪ Scalability : 많은 수의 유저를 처리함에 유연한가?
▪ Responsiveness : 상대와의 작용-반작용이 빠르게 처리 되는가?
▪ NPC-Activeness : NPC 활용이 얼마나 적극적일 수 있는가?
▪ Security : 해킹으로 부터 얼마나 안전한가?
▪ Robustness : 불안정한 접속 및 끊김으로 부터 복구가 쉬운가?
▪ Simplicity : 구현 및 유지 보수 비용이 싼가?
18. 서버의 통신 방법
• 통신 규약 (프로토콜)
➢ IP
▪ 데이터를 다른 컴퓨터에게 보내기 위해서는 해당 데이터를 어디로 보내야 하는지를 알아야 함
▪ 그 보내는 위치(주소)가 바로 IP
✓ 192.168.100.100
▪ 숫자 만으로는 그곳이 어딘지 사람이 식별하기 어려움으로, 이를 Domain Name으로 바꿔주는 Domain Name
Service를 사용
✓ www.naver.com
19. 서버의 통신 방법
• 통신 방법
➢ TCP
▪ 서버와 클라이언트 간의 데이터를 신뢰성 있게 전달하기 위해 만들어진 규약
▪ 데이터는 네트워크 선로를 통해 전달되는 과정에서 손실 되거나 순서가 뒤바뀔 수 있는데, TCP는 이런 손실을 검색해
서 교정하고 순서를 재조합하도록 해줌
➢ UDP
▪ 서비스의 신뢰성이 낮고 데이터의 도착 순서 및 도착 여부를 확인하지 않는 통신 규약
▪ 패킷 손실이 발생할 가능성이 있음
➢ 차이점
▪ TCP
✓ 1대1 연결 지향. 신뢰할 수 있는 통신 서비스 제공
✓ 연결 확립과 보내진 패킷의 확인. 순서화. 전달 중 손상된 패킷을 복구하는 책임을 짐
▪ UDP
✓ 1대1, 1대다의 비연결 지향. 신뢰할 수 없는 통신 서비스 제공
✓ 데이터 크기가 작을 때나, 연결 확립에 의한 부하를 피하기 위해 사용
✓ 수많은 온라인 게임에서 사용하는 방식
20. 서버의 통신 방법
• 패킷 & 라우팅
➢ 패킷
▪ 통신, 네트워크에서 한번에 전송하는 정보의 단위
▪ 보내야할 데이터들을 패킷 단위로 잘게 쪼개서 전송
▪ 패킷에 담겨진 데이터는 압축 형태를 띄는 경우가 많음
▪ 패킷에는 이 데이터가 보내져야 할 주소와 내용을 담고 있음
➢ 라우팅
▪ 하나의 컴퓨터에서 네트워크로 연결 된 다른 컴퓨터와 통신을 할 때 발생한 패킷을 목적지 까지 전달해주는 과정
▪ 데이터를 최적의 경로를 선택하여 목적지까지 이송하는 모든 절차
▪ 패킷은 라우터에서 지정한 경로를 타고 이동 함
✓ 라우터 : 공유기. 패킷의 목적지를 추출해 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 패킷을 이동
시키는 장치
22. 분산 서버 구조
• 분산 서버가 없다면?
➢ 모든 게임 서버 로직은 1개의 컴퓨터에서 수행
➢ 모든 플레이어 정보는 1개의 데이터베이스에 저장
➢ 동시접속자 수가 무제한으로 발생할 경우
▪ 과부화로 인해 서버로 보낸 메시지의 응답 처리가 늦게 도착함
▪ 서버 자체에 접속 과정이 매우 오래 걸림
▪ 서버와의 연결이 돌발적으로 해제 됨
▪ 서버로의 접속 자체가 실패함
23. 분산 서버 구조
• 간단한 분산 서버 구조의 한 예
➢ 게임 서버와 데이터베이스로 구성된 세트를 여러 개 나열
➢ 계정 인증 및 로그인과 관련된 부분은 별도로 처리
로스트아크 분산 서버
와우 분산 서버
24. 분산 서버 구조
• 분산 서버 방법
➢ 데이터 분산
▪ 유저 데이터가 한 곳에 너무 많이 몰리는 것을 방지하기 위한 방법
▪ 한 게임 서버에 최대 유저 수를 놓고, 그런 서버를 여러 대 배치
▪ 데이터베이스의 경우 샤딩 처리
✓ 샤딩 : 한 서버의 플레이어 데이터를 각기 다른 데이터베이스로 분할해 보관하는 방법
➢ 기능적 분산
▪ 서버가 행하는 기능을 서버별로 독립적으로 설계하는 방법
✓ 채팅 서버, 로그인 서버, 매칭 서버, 경매장 서버 등
✓ 각 서버에 문제가 생겨도 게임 플레이 자체에 문제를 주지 않음
✓ 문제 발생 시 추적 및 해결에 용이한 구조
데이터 분산
기능적 분산
26. 상용 서버 소개
• AWS
➢ 아마존 웹 서비스 (Amazon Web Services)
➢ 아마존이 제공하는 각종 원격 컴퓨팅 서비스
➢ AWS를 통해 각종 네트워크 환경, 보안, 데이터베이스, 서버 컴퓨터 머신 등을 제공
➢ 일반적으로 가장 많이 사용하는 상용 서버
• Photon
➢ Unity에서 많이 사용하는 네트워크 엔진
➢ 서버 자체를 대여해 사용할 수 있으며, 각종 서버 구축용 라이브러리 제공
➢ 포톤 클라우드라는 SDK를 이용해 클라이언트 개발 후 클라우드 서버에 연결 해 사용도 가능
28. 서버 관련 용어 설명
• 오버 플로우 (Overflow)
➢ 서버에서 사용하는 데이터 타입에서 정해진 범위를 넘는 데이터가 입력됐을 시 서버가 뻗는 현상
▪ Ex. 몬스터 HP가 int로 선언되어 있는데, HP 값이 22억일 경우
▪ Int 데이터 타입의 허용 범위를 넘는 데이터가 입력되었으므로 서버가 뻗음
• 스케일 아웃 / 스케일 업
➢ 스케일 업
▪ 서버 한대의 성능을 업그레이드 시켜 더 많은 처리가 가능하게 만드는 행위
➢ 스케일 아웃
▪ 분산 서버 구조에서 서버와 데이터베이스의 대수를 늘려 부하를 더욱 줄이는 행위
29. 서버 관련 용어 설명
• 레이턴시 (Latency)
➢ 클라이언트와 서버 간의 지연 시간
➢ 클라이언트에서 이벤트를 발생시키고 그에 따른 응답 속도를 ms로 표현
➢ 응답 속도가 느려 지연 시간이 발생할 경우 ‘렉’이 발생
• 타임 아웃 (Time Out)
➢ 클라이언트에서 이벤트를 호출 한 후 지정된 지연 시간을 초과했을 경우 발생하는 현상
➢ 타임 아웃이 발생하면 강제로 네트워크 연결을 끊거나, 해당 이벤트에 대한 반응을 대기하지 않는 상태가 됨