매칭 서버 만들기
매칭 서버는 요새 엔진에서 전부 제공 해 주고 있기 때문에 간단히 구조만 알아도 괜찮지만,
실시간 정보를 어떻게, 얼마만큼 전달할 것인가는 신경써야 한다.
매칭 서버
- 플레이적인 요소에서 요소에 맞게 희망하는 사람들을 모아서 진행
- 프로그래밍적인 요소에서 각각의 IP 주소를 전달 해 주는 역할
기본적인 룰은 엇비슷하다.
토폴로지
컴퓨터나 통신 기기의 접속 형태
- 서버와는 스타형
- 플레이어들과는 풀 메시형
대기 시간을 조정해 플레이어가 불쾌해지지 않게 각 단계를 조정하는 것이 중요하다.
예전에는 매칭 서버를 포폴로 내는 경우가 많았는데, IOCP 서버(다음 학기 중간 과제)를 만든다거나 NoSQL로 구성하는 것과 같이 트랜드가 바뀌고 있다.
HOST
- 방장이 나가면 다음 사람이 방장의 임무를 부여받는다.
랜덤하게 움직이는 오브젝트의 경우 랜덤 값 시드를 동기화하여 처리한다.
플레이어가 생성될 때, 좌표를 임의로 조금씩 이동 해 주어 충돌 방지를 해 준다.
리플리케이션
보내주는 데이터가 중복되지 않게 주의해야 한다.
어떤 정보를 서버에 보내고, 받을 때 애니메이션을 넣거나 사운드를 활용한다.
던전에 있는 편리한 아이템 활용
보스는 캐릭터에 준해서 관리하는 것이 좋다. 움직임을 전부 전달해서 똑같이 동기화 해 주어야 한다.
동기, 비동기 입출력
동양과 서양의 동기, 비동기 개념은 조금 다른 경향이 있다.
- 프로그래밍에서의 동기 : 무언가를 행동하고, 입출력을 기다리면서 박자를 맞추는 것.
- 프로그래밍에서의 비동기 : 무언가를 행동할 때, 동시에 일어나는 것.
수업 중 아이스크림을 사러 갔을 때, 수업에서 멍 때리는 것이 동기. 아이스크림을 사러 간 동안에도 수업을 하는 것이 비동기.
- 비동기에서 결과값을 알려주는 것 : Notification
- 콜백과 유사한 형태 : Deligate
- 동시에 무언가를 같이 하는 것 : Overlapped
이상적인 게임 서버의 구현
이상적인 서버의 기능 : 최소 비용, 최다 클라이언트, 최고 고속
하나의, 싱글스레드 서버에서는 힘들다. 하지만, 스레드를 많이 쓰면 비용이 비싸진다.
노는 클라이언트가 있다면 스레드도 함께 놀게 된다.
이를 해결하기 위한 방법 : 스레드 풀링
스레드 풀링
스레드 풀 기반의 서버(IOCP)
CPU의 n배수로 생긴다. 스레드들을 어디에 배치 할 것인지. 입출력 모델 중 하나.
공중화장실의 예시를 생각 할 것.
화장실을 일일히 다 지으면 낭비. 30개가 아니라, 5개만 지어서 대기를 분산시킨다.
세마포어 (Semapore)
원자 조작 (Atomic operation)
작은 단위로 서버를 잘라서 어디까지 독립하고 스레드에 넣을지를 결정한다.
이 때, 자르는 자료 단위가 원자 조작 (Atomic operation)이다.
어떻게 구현할지 보다는 어떻게 설계할지에 집중하는 것이 좋다.
블로킹
함수를 따로 제공. connect, receive 어느 것을 할지 기다림.
논블로킹
Overlapped 함수를 짤 때 고려를 많이 해야 한다.
아이스크림의 예시에서, 사온 후에 할 일을 미리 전달 해 주는 것이 콜백, IOCP 서버 방식.
오류에 대한 내용을 미리 지정 해 둔다.
수업 진행 순서
- 서비스
- 심화내용
- 발표 순서 지정 (온라인/오프라인 점수 지장 없음)
- 기타 (보안/ 기본용어)
네트워크 게임 서비스를 위한 아키텍쳐
요새 서버는 많이 싸졌다. 피자 한 판 정도의 사이즈로 작아졌고, 150만원 정도 한다.
요새는 아마존이나 구글을 쓰는 추세인지라, 그마저도 보기 귀하다.
예전에는 서버가 죽으면 다른 서버를 동작시키기 위해 여러개의 서버를 사용했는데, 요새는 서버 내에 CPU가 2개씩 나오기도 한다.
☆ 당근마켓과 같은 곳에서 서버 사지 말 것.
커널
운영체제에는 여러 기능들이 내장되어 있다. 그런 것들을 다 드러내고 남은 핵심 부분이 커널이다.
1. 시스템 콜 인터페이스 : 프로세스나 스레드로부터 명령(표준 입출력, 프로세스)을 받는 인터페이스
- 키보드나 마우스 입력은 끼어들기로 처리한다.
2. 프로세스 관리 : 가동되고 있는 프로세스 관리와 CPU 이용 우선순위 등을 스케줄 한다.
3. 메모리 관리 : 서버 상의 메로리를 단위 크기의 블록으로 분할해서 프로세스에 할당한다.
4. 네트워크 스택
5. 파일 시스템 관리
6. 장치 드라이버 : 디스크, NIC, HBA 등의 물리 장치와 작업
운영체제는 프로그램에서 끊임없이 시스템 콜(시스템 한테 콜), 이를 처리하는 것이 시스템 콜 인터페이스.
서버와 PC가 다른 점은 최적화, 캐시메모리등.
DSR (Direct Server Return) 방식
부하분산 : 유저가 들어오면 서버를 분리해서 연결 해 주는것. LBS (Load Balancing Server)
서버 안에는 콜이 있고, 캐시메로리가 중요하고, 3Tier 방식으로 구성되는데, 가끔은 부하분산 장치를 빼고 구성한다.
장애에 강한 서비스 시스템 구축
데이터베이스도 여러 대로 구성해야 장애가 나도 문제가 생기지 않는다.
모든 게임 회사가 이런 식으로 구성되어 있지는 않지만, 게임 회사는 제일 많이 해킹을 당하는 편이므로 고려해야 한다.
카카오와 같은 경우 장애에 맞는 백업 시스템이 제대로 구성되어 있지 않은 케이스.
SNMP(Simple Network Management Protocol)를 통한 장비 상태 감시
프로그램적으로 24시간 모니터링 하는 프로토콜.
전원이 켜져 있는지, CPU와 메모리가 어디까지 찼는지. 블루투스 이어폰에도 가능할 정도로 용량이 작다.
무정지를 위한 인프라 구조
실현 수단
- 컴포넌트 이중화
- 컴포넌트 감시
- 데이터 백업
항상 대기조를 구성 해 두어야 함.
무정전 장치
- 예비 배터리
자료 저장소의 이중화
- 하드디스크
- RAID, RAID1+0
- RAID 5가 가장 많이 사용되고 있음. RAID의 숫자는 복제되는 개수를 의미한다.
네트워크 게임 서비스를 위한 운영체제
Linux
PC용 UNIX중 하나. 오픈 소스의 개념을 도입하여 사용자에 의해 개선 및 신기능의 개발이 진행된다.
Open이 들어가는 대부분의 그룹이 UNIX에서 시작함.
- Fedora
- Red hat
- Ubuntu
Linux
여러 사람이 함께 쓰는 OS.
서버로 이용하는 경우가 많기 때문에 대부분 CUI환경에서 사용한다.
단말(터미널)에 명령을 입력하여 작업을 수행한다.
쉘(shell)을 이용한 조작
프로그램을 실행하기 위한 인터페이스.
UNIX 서버에 주로 사용하는 명령줄 환경에서는 서버가 입력한 명령을 쉘이 해석하여 커널에 지시를 내림.
UNIX의 쉘에는 다양한 종류가 있으며, 각각 갖고 이는 기능이 다르다.
데몬 (Daemon)
시스템을 유지하기 위해 필요한 프로세스를 상주시키고 있는데, 이런 상주 프로그램을 말한다.
데몬 프로그램의 이름 끝에는 보통 d가 붙어있다.
파일 시스템
하드웨어마저도 파일로 취급하는 구조.
공유 자원의 활용
모든 자원을 다른 사용자와 나누어 써야 함.
- User, Group, Other
퍼미션
파일이나 디렉터리에 대해 사용자나 그룹이 갖고 있는 읽기, 쓰기, 실행 권한을 말함.
- r, w, x
Macintosh
미국, 유럽쪽은 Mac 기반인 경우가 많다.
iOS용 게임은 Mac으로만 개발 할 수 있다.
윈도우가 유사하게 구성되어있는 기능이 많아 금방 적응 가능하다.
임베디드 OS
- ITRON
- VxWorks
- LynxOS
- QNX
- Enea OSE
다른 나라는 게임을 만들 때 Java를 주로 사용함.
C#(.NET) : Java를 카피하여 제작한 것.
- 공통 언어 런타임 CLR(Common Language Runtime) 가상의 실행 시스템상에서 작동한다.
네트워크 게임 서비스를 위한 클라우드 활용
온프리미스 (on-premise) 서버 : 온프림 (on-prim) 서버라고도 부른다.
데이터센터에 직접 하드웨어와 운영체제를 설치해서 관리, 초기 비용 고가, 서비스 이용자 수 변화에 대응이 어렵다.
클라우드 (Cloud) 서버 - 클라우드 컴퓨팅 용어
- IaaS (Infrastructure as a Service) : 하드웨어만 빌려줌
- PaaS (Platform as a Service) : 운영체제까지 빌려줌
- SaaS (Software as a Service) : 소프트웨어까지 빌려줌
- MaaS (Mobile)
- GaaS (Game)
Amazon : 서점으로 시작
가상화와 클라우드
가상화 (virtualization)
클라우드 서비스의 도입에 따른 문제점들
- 복잡성 : 플레이어 전담 서버에 대한 그리움, 가상 머신 관리 코드 개발에 대한 부담감, 클라우드 업체 전용 API 습득에 대한 귀찮음 등.
- 비용 : 싸긴 하지만, 공짜는 아니다.
- 제삼자에 의존하게 된다는 점
- 예상치 못한 하드웨어 변경
- 유저의 주인의식 약화
네트워크 게임 서비스와 관련된 다양한 개념들
- VPN
- Ethernet
- PLC
- xDSL
- ADSL
- FTTH
- WiMAX
- 내로밴드 & 브로드밴드
등등... 면접 가기 전에 교재를 한번 볼 것.
일반적인 컴퓨터 해킹
- 클라이언트 컴퓨터 해킹
- 서버 컴퓨터 해킹
질의구문 인젝션 (Query injection)
게임에서 이루어지는 독특한 해킹
- 크래킹 (crack)
- 치트 (cheat)
- 조작 (exploit)
암호와 알고리즘을 통한 해키의 분석
-평문 + 암호 키 + 암호문
게임 치트
- 네트워크 도청 및 조작을 해서 해킹하는 경우
- DDOS 공격과 유사한 게임 치트 진행
- 게임 클라이언트를 해킹하여 치치트 하기
패킷 통신
패킷 스내핑
RSA 시스템
렌더링은 클라이언트에서
데드 레커닝 (dead reckoning, 추측 항법
- 자료가 안 오면 적당히 혜측해서 맞춘 후, 자료가 다시 왔을 떄 재보간해서 움직임.
레이턴시 마스킹
- 일단 보여주고 나중에 얼렁뚱땅 해결하기
실시간 전략 시뮬레이션 게임의 네트워크 동기화
- 갭차이를 소리가 많이 줄여준다.
UML
액티비티 다이어그래
게임 서버의 확장 (증설)
- 서버의 업그레이드 (스케일업, Scale up)
- 서버 대수를 늘려서 확장을 꾀하는 방법 (스케일 아웃, s=Scale l=pi-
'대학생활 > 수업' 카테고리의 다른 글
게임프로그래밍고급 15주차 - 기말 시험 (0) | 2023.06.20 |
---|---|
게임그래픽프로그래밍 14주차 - 재질과 텍스처 (0) | 2023.06.19 |
게임레벨디자인 14주차 - 기말 시험 (0) | 2023.06.16 |
게임음악작곡법 13주차 - Melodic Cadences, 3화음 배열법, 그루브 (0) | 2023.06.15 |
게임데이터설계 14주차 - 상점 시스템과 게임 데이터 (2) | 2023.06.14 |