길벗·이지톡

도서 IT전문서/IT입문서 게임

전문가가 1:1로 알려주는 네트워크 프로그래밍의 기초와 활용

나도 온라인 게임을 만들 수 있을까?
온라인 게임은 누구나 쉽게 만들 수 있다. 단, 오프라인 게임과 온라인 게임의 게임 디자인 차이를 이해해야 한다. ‘오프라인 게임을 만들고 네트워크 기능만 추가하면 온라인 게임’이라는 생각은 망하는 지름길이다. 각 장에서는 ‘만들고자 하는 게임의 게임 디자인을 어떻게 할 것인가’부터 시작한다. 그리고 프로그램을 차례대로 만들어가며 게임 제작 과정을 설명한다. 설명을 따라가면 온라인 게임 고유의 게임 디자인 방법과 게임 디자인을 ‘왜 그렇게 해야만 하는지’를 배울 수 있다. 

네트워크 프로그래밍은 처음? 기초부터 활용하는 방법까지!
온라인 게임을 만들 때 데이터 통신의 기초 지식은 필수이므로 피해갈 수 없다. ‘통신=어렵다’는 선입관을 버릴 수 있도록 패킷, IP 주소, TCP, UDP, 지연, 대역 등 기본 사항을 차근차근 단계별로 살펴본다. 데이터를 주고받는 과정을 이해한 다음에는 이와 같은 기초 지식이 게임 디자인에 따라 어떤 방식으로 활용되는지 설명한다. 

게임 디자인에 따라 통신 방식이 달라진다.
게임을 제작할 때는 게임 디자인을 가장 먼저 결정해야 한다. 게임 디자인을 결정할 때는 전체 프로세스는 어떻게 되는가? 플레이는 어떻게 진행되는가? 무엇을 언제 통신해야 하는가? 와 같은 큰 그림을 생각한 뒤, 캐릭터는 어떻게 이동하는가? 액션의 규칙은 어떻게 정할 것인가? 아이템은 어떻게 관리할 것인가? 와 같이 작은 그림을 완성해간다. 결정한 게임 디자인에 맞게 통신 방식을 적용한다. 온라인 틱택토(턴 대전 방식), 액션 가위바위보(통신 지연 해결), 블록 깨기(키 입력 동기화), 모형 정원 커뮤니케이션 게임(비동기 통신), 멀티 플레이어 액션 게임(매칭 서버)이라는 5가지 게임 디자인을 통해 다양한 통신 방식을 설명한다. 

목차

1장 온라인 게임을 만들자
__1.1 온라인 게임 제작의 실제
____온라인 게임은 쉽게 만들 수 있다
____비극은 현장에서 일어난다
____오프라인 모드와 온라인 모드는 다르다
____데이터는 곧바로 전달되지 않는다
____오프라인 게임과 온라인 게임의 게임 디자인 차이
____비극에서 벗어나려면
__1.2 온라인 게임 제작의 기초
____온라인 게임의 통신 방식
____온라인 게임의 게임 디자인
____데이터의 흐름을 경과 시간으로 생각하자
____일대일 대전은 네 명이 싸운다?
____오류도 사양의 하나
____정답은 하나가 아니다
__1.3 이 책에 대해서
____이 책의 구성
____예제 게임
____용어 설명
____캐릭터 소개

2장 통신 프로그램의 기초 지식
__2.1 피해갈 수 없는 통신의 구조
____데이터는 어떻게 전달되는가
____데이터가 사라진다?
__2.2 프로토콜 이해하기
____안심할 수 있는 TCP
____TCP의 장점과 단점
____속도가 빠른 UDP
____UDP의 장점과 단점
____온라인 게임에서 사용하는 프로토콜
__2.3 알아두면 좋은 기초 지식
____지연은 반드시 발생한다
____통신량을 생각해보자

3장 통신 프로그램을 만들자
__3.1 소켓 프로그래밍을 시작하자
____소켓이란?
____TCP 소켓 프로그래밍
____UDP 소켓 프로그래밍
__3.2 네트워크 바이트 오더
____네트워크 바이트 오더란?
____네트워크 바이트 오더를 고려한 데이터 송수신
__3.3 간단한 통신 라이브러리를 만들어보자
____왜 라이브러리를 만드는가?
____API를 검토하자
____이벤트 처리
____스레드를 사용해보자
____실제 라이브러리 작성
__3.4 정리

4장 채팅 프로그램을 만들자
__4.1 채팅 프로그램의 프로세스
____채팅이 진행되는 과정을 생각해보자
____대화 과정을 생각해보자
__4.2 채팅 프로그램을 만들자
____시작부터 접속까지
____채팅 메시지 통신 프로그램
__4.3 정리

5장 턴 방식 게임: 온라인 틱택토
__5.1 어떻게 플레이할지 생각해보자
____단말 한 대에서 플레이하는 경우
____단말 두 대에서 플레이하는 경우
__5.2 무엇을 언제 통신할지 생각해보자
____무엇을 통신할 것인가?
____언제 통신할 것인가
__5.3 프로그램으로 동작시켜보자
____처리 프로세스를 정리하자
____프로그램을 작성하자
__5.4 게임 디자인을 생각해보자
____타임아웃 프로그래밍 방법
__5.5 오류 처리
__5.6 정리

6장 깜찍한 액션 게임: 액션 가위바위보!
__6.1 게임 디자인을 생각해보자
____개요부터 세부 사항까지
____가위바위보의 규칙을 정하자
____액션의 규칙을 결정하자
____오프라인에서 온라인으로
__6.2 무엇을 언제 통신할 것인지 생각해보자
____가위바위보 부분에서 무엇을 보낼지 생각해보자
____액션 부분에서 무엇을 보낼지 생각해보자
__6.3 액션 게임의 동작을 생각해보자
____액션 게임에서 발생하는 문제
____자연스러운 문제 해결 방법
__6.4 프로그램을 만들어보자
____전체 프로세스를 생각해보자
____가위바위보 부분의 통신
____액션 부분의 통신
__6.5 정리

7장 키 입력 동기 통신 게임: 블록 깨기
__7.1 키 입력을 동기화하자
____키 입력 동기 구조
____키 입력 동기의 상태 관리
____컨트롤러 정보의 추상화와 송신 정보
__7.2 통신 지연을 고려한 키 입력 동기 구조
____키 입력 지연
____키 입력 지연을 고려한 상태 관리
____오류 대책을 생각하자
__7.3 통신 방식을 생각해보자
____UDP로 통신해보자
____중복 데이터 재송신으로 패킷 유실도 문제없다
__7.4 프로그램을 동작시켜보자
____패킷과 시리얼라이저
____엔디언 판정
____키 입력 동기 구조를 만들자
____키 입력 정보 가져오기
____키 입력 정보의 송수신
____게임이 끝나도 종료되지 않는다?
____키 입력 정보와 시리얼라이저
__7.5 통신 프로그램의 동작 확인과 디버깅 방법
____입력 지연과 지연 에뮬레이터
____통신 디버깅 방법
__7.6 정리

8장 모형 정원 커뮤니케이션 게임
__8.1 게임 디자인을 생각해보자
____전체 프로세스를 생각해보자
____접속에 관한 게임 디자인
____출현에 관한 게임 디자인
____캐릭터 이동에 관한 게임 디자인
____아이템에 관한 게임 디자인
____오류에 관한 게임 디자인
__8.2 통신할 것을 검토해보자
____무엇을 통신할지 생각해보자
____캐릭터 이동에서 통신할 정보
____아이템 획득에서 통신할 정보
____채팅에서 통신할 정보
____언제 정보를 반영할지 생각해보자
__8.3 모듈 구성을 생각해보자
____캐릭터 모듈
____아이템 모듈
__8.4 정보를 어떻게 통신할지 생각해보자
____친구가 플레이하러 왔을 때의 동기화
____캐릭터 좌표의 동기화
____프레임 추출과 보간
____스플라인 보간에 따른 캐릭터 이동
____아이템 획득
____아이템 폐기
__8.5 프로그램을 만들어보자
____통신 모듈을 만들자
____패킷을 간단히 송신하자
____전체 프로세스를 확인해보자
____서버 시작과 접속 대기
____게임 시작 전 동기 통신
____캐릭터 매니저를 만들자
____캐릭터 제어와 동작
____캐릭터 좌표의 통신
____캐릭터 좌표 보간
____캐릭터 이사
____아이템 매니저를 만들자
____게임 서버의 아이템 조정
____아이템 획득
____채팅
____게임 서버와 게임 애플리케이션의 공존
__8.6 정리

9장 멀티 플레이어 액션 게임
__9.1 전체 프로세스를 생각해보자
____게임 전체의 프로세스
____게임 전체의 프로세스 + 통신
__9.2 매칭 서버를 만들자
____매칭 서버란?
____매칭 과정
____서버와 클라이언트가 통신할 정보
____클라이언트의 처리
____매칭 서버의 처리
____매칭 오류 대응
__9.3 네트워크 토폴로지를 검토하자
____네트워크 토폴로지란?
____예제 게임의 네트워크 토폴로지

__9.4 매칭 완료부터 게임 시작까지
____매칭 완료와 플레이어에게 알리기
____게임 서버 시작
____플레이어 ID와 세션 관리 ID
____캐릭터에 표시를 하자
____난수 생성과 인스턴스화
____게임 시작에 필요한 정보를 보내자
__9.5 게임을 시작하자
____캐릭터가 나타날 위치
____리모트 캐릭터 이동
____몬스터 이동
____캐릭터의 공격과 몬스터의 대미지
____몬스터의 공격과 캐릭터의 대미지
____방 이동
____제너레이터의 동기화
__9.6 던전에 있는 편리한 아이템을 활용하자
____여러 가지 아이템 장치
____아이템 사용
____소다 아이스바는 당첨되면 하나 더
____장비의 동기화
____소환수를 불러보자
__9.7 보스와 싸우자
____보스의 이동
____보스의 공격과 대미지
__9.8 마지막 즐거움
____보너스 게임: 케이크 쟁탈전
____오류 대책을 생각하자
__9.9 프로그램을 만들어보자
____매칭 서버를 만들자
____매칭 클라이언트를 만들자
____세션을 관리하자
____게임 시작 전 동기화
____캐릭터가 나타나는 위치
____캐릭터 충돌
____방 이동 방법
____아이템 사용과 무기 변경
____소환수 부르기
____보스의 이동과 공격
____보너스 게임
__9.10 정리

샘플 게임 데이터 제작 스태프
찾아보기
더보기접기

저자

ㆍ지은이 가와다마사토시

지은이 소개
2009년 반다이 남코 게임즈 입사. 현재 반다이 남코 스튜디오 소속으로 사내 미들웨어와 온라인 게임을 주로 제작했다. 아날로그 모뎀 시절에는 PC용 온라인 레이싱 게임 제작을 시작으로 블로그 시스템을 개발했으며 오락실용 비디오 게임으로 온라인 액션 RPG를 제작할 때는 프로그래머, 게임 디자이너로 참여했다. 최근에는 가정용 온라인 격투 게임과 온라인 스포츠 게임을 제작하고 있다.

ㆍ옮긴이 김성재

옮긴이 소개
역자 김성재는 평소 IT 기술에 관심이 많아 컴퓨터 기술 분야의 전문 번역가로 활동하고 있다. 최근에는 건강의 소중함을 새삼 깨닫고 다이어트 앱의 도움을 받아 틈틈이 운동도 병행하며 균형 잡힌 삶을 위해 노력 중이다. 옮긴 책으로는 《인프라 엔지니어의 교과서》, 《게임 수학&물리 입문》, 《왜 게임에 빠질까》, 《유니티 게임 제작 입문》 등이 있다.

보도자료

연관 프로그램

아래 프로그램은 길벗출판사가 제공하는 것이 아닙니다.
무료로 사용할 수 있는 정보를 안내해 드리니, 지원이 필요하면 해당 프로그렘 제작사로 문의해 주세요.