비전공자도 만드는 Unity 리듬게임 강좌의 맛보기 강의입니다.
지난 시간까지 정말 난이도가 높은 Object Pooling 기법과 Coroutine 기법 등에 대해서 공부하는 시간을 가져 보았습니다. 프로그래밍적으로 보았을 때 지난 시간까지 다루었던 고급 게임 개발 기법들의 내용이 가장 어려웠다고 할 수 있어요. 이번 시간부터는 몇 강에 걸쳐서 게임 개발에서 빼놓을 수 없는 부가 기능을 구현해 보는 시간을 가져 보도록 하겠습니다. 기존의 Mobile Defense Game과 같은 구성의 게임에서 가장 많이 사용되는 부가 기능은 바로 Ranking 기능입니다. 우리는 Mobile Defense Game이 끝날 때마다 사용자의 게임 플레이 정보를 확인해서 점수를 부여하고 세계 곳곳에 존재하는 플레이어들의 점수를 서로 비교해서 순위를 보여 줄 수 있도록 개발을 해 볼 거예요. 그러기 위해서는 가장 먼저 사용자들의 점수 정보를 저장할 수 있는 서버가 필요합니다. 만약 각 플레이어가 단순히 자신의 스마트폰에 점수 정보를 저장하도록 만든다면 별도의 서버가 필요 없습니다. 이때는 Unity 기초 과정에서 다루었던 Player Fraps 기능을 이용하시면 되는데요. 이를 이용하면 Unity가 미리 지정해 놓은 폴더로 데이터 파일이 저장되는 형식으로 점수 정보를 휴대전화 내에 기록하게 되겠죠. 하지만 그렇게 구현하게 되면 말 그대로 자신의 스마트폰에서만 점수 정보를 저장할 수가 있기 때문에 다른 플레이어와 순위 비교를 할 수 없습니다. 그렇기 때문에 바로 이러한 서버의 개념이 등장하게 된 것인데요. 서버란 무엇일까요? 서버의 개념과 필요성에 대해서 이해하고자 한다면 서버 클라이언트 구조에 대해서 정확히 이해할 필요가 있습니다. 즉 서버와 클라이언트가 서로 데이터를 주고받는 구조를 서버 클라이언트 구조라고 말합니다. 서버 클라이언트 구조란 이러한 그림과 같이 일반적으로 클라이언트가 서버에 접속해서 요청을 보내면 서버가 클라이언트에게 응답을 하는 구조입니다. 흔히 음식점에서 서빙을 하는 사람들이 있잖아요. 음식점에 간 사람들은 그 서빙을 하는 사람에게 어떠한 요청을 하게 되는 것이죠. 어떤 음식이나 음료수를 주문할게요, 이런 식으로 요청을 하게 되면 서빙을 하는 사람은 흔히 그 요청을 들어주죠. 즉 다시 말해서 그에 맞는 응답을 하게 되는 것인데요. 그러한 구조가 컴퓨터 프로그래밍 영역에서 그대로 사용이 되고 있는 것입니다. 클라이언트는 요청을 보내고 서버는 그에 대한 응답을 해 주는 것이죠. 다만 컴퓨터에서는 주고받는 것이 음식이나 음료수가 아니라 데이터일 뿐인 것이죠. 그래서 기본적인 원리 자체는 우리가 일상생활에서 음식점에 들어가서 어떤 음식을 주문하고 서빙을 받는 그런 원리와 상당히 흡사하다고 할 수 있는 거예요. 우리가 만들 게임을 예시로 들어 보자면 클라이언트는 플레이어가 되는 것이고요. 게임을 즐기고 있는 플레이어의 모바일 스마트폰이 클라이언트 그 자체가 된다고 할 수 있는 것이고 게임 개발자가 운영을 하고 있는 컴퓨터가 바로 서버가 된다고 할 수 있는 거예요. 즉 각 플레이어들의 점수 정보 같은 것들을 저장하고 담을 수 있는 기능을 수행하는 컴퓨터를 서버 컴퓨터라고 말하는 것이죠. 그래서 일반적으로 서버 쪽은 게임 개발자가 관리를 하는 것이고요. 클라이언트는 그 플레이어 쪽을 의미한다고 할 수 있습니다. 흔히 일반적으로 게임 순위 정보를 서버에 담아서 처리한다고 하면 게임 개발자의 서버는 그러한 플레이어들의 점수 정보를 처리해서 플레이어의 명단 데이터를 순위가 높은 순서대로 정렬해서 응답하는 등으로 작업을 수행할 수 있는 것입니다. 그렇다면 이러한 서버는 어떻게 구축할 수 있을까요? 말했듯이 서버는 클라이언트의 요청을 처리해서 클라이언트에게 적절한 데이터를 응답해야 합니다. 그러면 클라이언트가 정확하게 특정한 서버에게 요청을 해야겠죠. 허공에 대고 주문을 해 봤자 아무도 응답을 줄 수가 없을 거예요. 그래서 클라이언트가 정확하게 요청을 하기 위해서 서버는 나 여기 있소라는 것을 표시하는 고유한 IP 주소를 가지고 있어야 돼요. 클라이언트는 인터넷상에서 IP 주소를 통해서 서버를 찾아서 그 서버로 데이터를 보내야 되기 때문이죠. 그렇기 때문에 일반적으로 서버는 자신의 고유한 IP 주소를 가진다는 특징이 있어요. 이때 사용되는 고유한 IP 주소를 흔히 공인 IP 주소라고 말하는데요. 우리가 일반적으로 실제로 직접 서버를 바닥부터 구축하고자 한다면 통신사에서 공인 IP 주소를 사고 서버 컴퓨터를 직접 구축해야 돼요. 하지만 그렇게 서버를 바닥부터 구현하고자 한다면 노력과 시간이 정말 많이 필요해요. 그래서 일반적으로는 서버를 대여하는 호스팅 서비스를 이용하거나 플랫폼 기반의 클라우드 서비스를 이용함으로써 적은 노력으로 서버를 구축할 수 있습니다. 그럼 이제 서버가 무엇인지 대강 개념을 잡았어요. 클라이언트, 즉 게임을 하는 플레이어들의 어떠한 요청 예를 들면 게임이 끝났으니까 순위를 알려 줘라는 식으로 프로그래밍된 어떠한 요청을 게임이 끝났을 때 특정한 서버에게 이러한 요청을 보내게 되면 서버, 즉 개발자가 만든 서버에서 그 요청을 받아서 다시 그 클라이언트에게 응답을 하게 되는 것이죠. 또한 일반적으로 그냥 서버라고 하면 서버의 개념 자체가 매우 포괄적인 의미를 가지고 있어서 일반적으로 모바일 게임에서 사용되는 서버를 웹 서버 혹은 API 서버라고 부릅니다. 이러한 원리는 대략 이해가 되었을 것인데요. 실제로 게임 순위 등을 관리하는 기능을 서버에서 구현하고자 한다면 어떻게 해야 할까요? 가장 먼저 게임 순위를 관리하려면 어떠한 데이터를 저장하기 위해서 Database를 만들어야 합니다. 그러고 나서 웹 서버, 즉 API 서버를 구현해서 웹 서버가 클라이언트의 점수 데이터를 받고 그것을 Database에 저장할 수 있도록 해야 하는 거예요. 그다음에 플레이어에게 순위 정보를 알려 주게 된다는 것이죠. 흔히 FPS 게임이나 전략 시뮬레이션 게임 등은 즉시 서버와 클라이언트가 통신을 해야겠죠. 클라이언트가 내가 적을 처치 했어라고 요청을 보내면 즉시 서버에서 클라이언트에게 골드를 줘야 하잖아요. 그러나 그렇게 즉각적으로 통신하는 것이 아니라 단순히 우리가 만들 게임처럼 순위 정보 등을 가끔 전달하는 정도라면 이렇게 웹 서버, 즉 API 서버를 기반으로 해서 구현을 하는 것이 일반적입니다. 앞서 말씀드렸듯이 클라이언트와 통신하기 위한 목적으로 사용되는 웹 서버 프로그램을 API라고 부릅니다. 사실 엄밀히 말하면 API는 이것보다 더 넓은 의미로 사용될 수 있는데요. 제가 옅은 색깔로 표시를 해 둔 위키피디아의 설명을 보시면 엄청 복잡하게 쓰여 있어서 사실 봐도 잘 모르겠어요. 그래서 이 강의에서는 클라이언트와 통신하기 위한 목적으로 사용되는 웹 서버 프로그램이라고 API를 간략하게 서술을 해 보았어요. 일반적으로 API의 모든 개념을 이 한마디로 짧게 설명하기는 약간 어려움이 있겠지만 그래도 일반적인 의미에서 사용되는 API는 이 의미가 맞기 때문에 이와 같이 여러분이 이해하기 쉽게 간략히 한 문장으로 API가 무엇인지 말씀드렸어요. 그래서 결과적으로 아까 전에 이러한 서버를 직접 바닥부터 구현하는 것은 번거롭다고 말씀드렸어요. 그래서 가장 쉽게 게임 순위 서버를 구현하는 방법에 대해서 소개하고자 합니다. 바로 Google의 Firebase 서비스를 이용하는 거예요. Google의 Firebase는 구글 클라우드 플랫폼 기반의 Database 서비스 및 웹 서버 기능을 지원해요. 그래서 정말 간단한 절차만으로도 Database가 만들어지고 그것이 웹 서버와 연결되어서 클라이언트는 웹 서버에 몇몇 요청을 보내는 과정만으로도 게임 순위 Database 등에 접근할 수 있게 되는 거예요. 이러한 Google의 Firebase는 별도의 플랫폼 위에서 돌아가는 서버 기능 역할을 바로 제공해요. 다시 말해서 Google 플랫폼 위에서 돌아가기 때문에 우리가 별도로 서버 컴퓨터를 구축할 필요가 없는 것이고요. 또한 공인 IP 주소를 구매하지 않아도 Google이 알아서 특정한 URL을 할당해 줌으로써 이를 이용해 쉽게 API 서버를 이용할 수 있는 것이고요. 심지어 통신량이 많지 않다면 사실상 완전히 무료로 이용할 수 있다는 점에서 게임 서버로 굉장히 많이 사용이 되고 있습니다. 특히 2019년을 기준으로 해서 모바일 게임을 만든다고 했을 때 정말 많이 선택이 되고 있는 서버 기능이 바로 이 Google의 Firebase입니다. 뿐만 아니라 Google 로그인 기능 등을 입히는 과정 또한 Firebase를 이용하면 쉽게 연계할 수 있기 때문에 매우 쉽게 이용해서 구현할 수 있답니다. 이번 시간에는 이와 같이 서버 구축 이론에 대해서 다뤄 보는 시간을 가져 보았습니다. 다음 시간에는 실제로 Google의 Firebase를 이용해서 게임 순위 서버를 구축해 보는 시간을 가져 보도록 할게요.
