게임서버 7

[게임 서버][7장]데이터베이스

개요 데이터베이스는 기본 파일시스템위에서 b트리, 해쉬테이블등으로 효율적인 데이터 관리와 동시에 여러 질의, 원자성 등의 추가적인 기능들을 사용할 수 있게 만들어진 데이터 관리 시스템을 말한다. 이때 DBMS이라는 프로그램으로 데이터베이스 만들고 관리 할 수 있다. DBMS는 사용자가 DBMS의 인터페이스로 데이터베이스를 생성하면 파일 시스템위에 자신의 자료구조와 알고리즘을 이용하여 자신의 데이터베이스 파일을 구축하고 기능들을 제공해준다. 이러한 기능들을 파일 시스템 위에 직접 구현하여 사용할 수도 있겠지만 인력과 시간이 상당히 많이 들어가기에 대부분의 경우 상용 DBMS를 이용하여 데이터베이스를 사용한다. 보통 게임 뿐 아니라 대부분의 분야에서 서버에 데이터베이스를 사용할때는 DBMS로 운용되는 데이터..

[게임 서버][6장]프라우드넷

개요 프라우드넷은 게임 서버, 클라이언트 프레임워크인 네트워크 엔진 중 하나이다. 한국의 Nettention에서 개발하였으며 현재는 펄어비스의 자회사가 되었다. ​ 기본 구조 프라우드넷은 서버와 클라이언트 프로그램 각각에서 NetServer 클래스와 NetClient 클래스를 각자 사용한다. 서버에서는 NetServer.Create()로 NetServer인스턴스를 생성 한뒤 NetServer.Start()로 서버를 열 수 있다. 특정 프로토콜 버전(우리가 만들고 있는 프로그램의 프로토콜 버전으로 스스로의 버전 동기화에 사용하면 된다.)과 리스닝 포트를 넣으면서 Start를 호출하면 해당 포트에 서버가 열린다. 클라이언트에서는 CNetClient.Create()로 인스턴스를 생성하고 CNetClient.C..

[게임 서버][5장]게임 네트워킹

개요 이번장에서는 이동 동기화, 서버 성능 개선 방안등의 서버 네트워킹에 필요한 다양한 주제를 다룬다. ​ 이동 동기화 보통 서버와 클라이언트간 이동은 다음과 같이 처리된다. 1. 클라이언트에서 일정간격으로 서버에 자신의 이동정보를 보낸다. 2. 서버에서는 각 클라이언트들의 이동정보를 받을때마다 서버 메모리의 위치 정보들을 갱신한다. 3. 서버에서는 자체적인 타이머로 일정간격마다 모든 클라이언트들에 각각 필요한 다른 클라이언트들의 위치정보를 보내준다. ​ p2p에서는 다음과 같이 처리한다. 각 클라이언트는 일정간격으로 자신의 이동정보를 다른 클라이언트들에 보낸다. 각 클라이언트는 다른 클라이언트의 이동정보를 받으면 위치 정보를 갱신한다. ​ 두 방법 중 뭐가 됬든 어떠한 객체들의 실제 위치를 가지고 있는..

[게임 서버][4장]게임 서버와 클라이언트

개요 멀티플레이 게임을 구현하는데는 여러가지 방법이 있지만 보통 서버와 클라이언트로 나누어 개발하는 것이 대부분이다. 보통 서버는 클라이언트로부터 요청을 받아 응답해주며 클라이언트는 유저의 조작을 서버로 보내고 서버로부터 받은 데이터로 게임을 진행한다. ​ 서버와 클라이언트 역할분담 멀티플레이가 없는 싱글 플레이게임은 다음과 같은 게임 루프로 작동한다. 입력 받기 게임 로직 처리 렌더링 멀티 플레이가 있는 게임에서는 게임 로직 처리중 일부를 서버가 대신 처리해주게 된다. 여기서 데미지 판정같이 공정해야하는 부분은 서버에서 처리하며 최적 경로 탐색 등 클라이언트에서 계산해도 문제가 생기지않는 로직들은 클라이언트에서 처리하게 된다. 서버에서 많은 로직을 처리하고 클라이언트에서는 정보를 받아 렌더링만 하는 정..

[게임 서버][3장]소켓 프로그래밍

개요 어플리케이션 프로그래밍에서 네트워크 통신은 특정 포트와 바인딩된 소켓이라는 자원을 이용하여 구현한다. 이러한 소켓을 이용한 프로그래밍을 소켓 프로그래밍이라고 한다. ​ 소켓 소켓은 다음과 같은 연산이 가능하다. TCP, UDP 소캣으로서 생성 특정 포트에 바인딩 (TCP) TCP 연결 받기 (TCP) TCP 연결 요청 데이터 송신 : 송신 버퍼에 공간이 없거나(TCP), 부족하면 (UDP) 불가능 데이터 수신 : 수신 버퍼에 데이터가 없으면 불가능 소켓 닫기 이때 데이터 송수신은 각각 해당 소켓의 송신 버퍼, 수신 버퍼에 데이터를 채우거나 가져오는 처리를 한다. 또한 데이터를 송신했는데 상대 수신 버퍼가 가득 찼으면 다음과 같이 처리된다. TCP : 재전송 (또한 매번 상대 수신 버퍼의 여유 공간에..

[게임 서버][2장]컴퓨터 네트워크

개요 이번 장에서는 게임 서버 프로그래밍에 필요한 네트워크 지식을 다룬다. ​ 네트워크 구성 네트워크는 실제 통신을 하는 기기인 단말기와 그 연결을 위해 존재하는 네트워크 기기로 구성된다. 단말기는 컴퓨터, 핸드폰 등이 있으며 네트워크 기기는 스위치, 라우터등이 존재한다. ​ 단말기들은 스위치같은 네트워크 기기들을 통해 LAN이라는 작은 규모의 지역 네트워크를 구성하며 이러한 LAN들이 라우터들로 연결되어 WAN이라는 광역 네트워크를 구성하게 된다. 이때 지구 전체를 덮은 WAN이 바로 인터넷이다. ​ OSI 모델 인터넷은 다음과 같은 프로토콜 계층으로 구성된다. 물리 계층 : 전류, 광 등의 물리 통신 담당 데이터 링크 계층 : LAN안에서의 통신을 담당, MAC주소를 이용하여 트래킹 네트워크 계층: ..

[게임 서버][1장]멀티 스레딩

개요 멀티 스레딩은 한 프로세스에서 여러 스레드를 활용하는 것을 의미한다. 서버 프로그래밍에서는 한 서버가 여러 클라이언트를 상대하야하므로 멀티 스레딩이 필수적이다. ​ ​ 프로세스와 스레드 한 프로세스는 여러 스레드를 가진다. 이때 프로세스의 힙은 각 스레드에 공유되며 각 스레드는 각자의 호출 스택을 가지게 된다. 보통 스레드는 한 스레드에서 특정 함수 포인터를 매개변수로 넘겨주며 스레드 생성 함수를 호출하여 생성한다. 그러면 해당 함수를 실행하는 스레드가 생성된다. 생성된 스레드들은 실행과 대기를 반복하다 수행이 끝나면 소멸된다. 실행중인 스레드들은 각자 코어를 하나씩 차치하여 실행되며 코어가 더 적다면 문맥 교환을 하며 번갈아 실행된다. 이때 문맥 교환은 가벼운 연산이 아니므로 스레드가 너무 많다면..