어느덧 1월도 거의 다 가고, 2월이 오고있다.
작년 11월 말쯤 게임 서버를 만들어보자고 얘기하고, 계획을 세웠었는데 벌써 2월이라니.. 시간 참 빠르다.
오늘 글에서는 다음 내용들을 기록하려한다.
게임 내부 기획 & 개발 현황
저번 글을 썼던 1월 중순 이후 2번의 회의가 더 있었고, 많은 변경 내용들이 있지만 그 중 게임 내부 기획 파트를 가장 먼저 다뤄보려 한다. 사진과 함께 기록한다.
추가로 이번 글에서는 플러그인 개발, 자체 개발 등의 용어를 많이 쓸텐데, 대부분 Eclipse IDE에서 자바로 개발하였다. 세세한 개발 과정까지 다루면 너무 글이 길어질 것 같기에, 추후 자바 개발은 따로 다루도록 하겠다.
게임에 접속하려면 가장 먼저 서버 선택 화면을 접하게된다. 아이콘과 서버 설명, 서버명을 바꿔주었다.
아이콘 같은 경우, 예전에 다루어보았던 StableDiffusion 모델을 사용하여 제작해보았다.
서버에 접속하게되면 다음 화면을 가장 먼저 볼 수 있다. 위에서부터 차례로 설명하자면,
1. KAKC - 마인크래프트의 경우, 한글 자동 변환이 쉽지 않다. 그렇기에 자동으로 영어로 치면 한글로 변환해주는 플러그인을 의미. 해당 플러그인의 설명 및 환영 문구
2. 은행 - 돈과 경제의 개념을 만들어주는 플러그인. 초기 자금으로 200원을 지급해준다.
3. 서버 가이드북 & 디스코드 - 서버 접속시 뜨는 문구. 해당 문구를 클릭하면 서버 가이드북(깃북)과 서버 디스코드(메신저)로 이동하겠냐는 확인창이 뜬다.
4. FORECITY - 마을을 만들고, 내 구역을 선언, 보호할 수 있는 플러그인이다. 시장과 시민이 존재하며, 동맹 마을을 맺을수도 있고, 규모를 키워 마을 레벨을 올릴 수 있게끔 설정하였다.
5. 채팅 - 채팅 채널을 플러그인 개발을 통해 나누어두었다. 일반 채팅, 마을 사람들끼리만 이용할 수 있는 마을 채팅, 관리자(개발자)들만 이용할 수 있는 채팅 채널 이렇게 3가지로 분류하였다.
6. 인증 - 마인크래프트 계정과 디스코드 계정을 연동하는 기능. 해당 역시 플러그인 개발을 통해 구현하였으며, 유저 관리(추방 등)을 더 수월하게하기 위해 제작하였다.
7. 스코어보드 - 우측에 닉네임, 보유 돈, 접속자 수 이렇게 3가지를 나타내는 스코어보드를 제작하였다. 실시간으로 바뀌게끔 설정해두었다.
게임에 처음 접속하게되면 스폰맵에 소환되게된다. 간단한 메뉴얼들은 홀로그램 기능을 통해 화면에 띄워주었다. 말을 걸면 친절하게 설명해주는 NPC도 구현해두었다. 밑 사진은 함께 테스트해보는 중인 우리 팀원들.
포탈을 통해 다른 스폰맵을 벗어날 수 있다. 물론 이후 언급할 UI에서 클릭 한 번으로도 가능.
자체적인 UI를 만들어봤다. 아무래도 예전에 본인이 마인크래프트를 할 때에도, 일일이 명령어를 쳐야하는 것이 생각보다 꽤 불편했었는데, 꼭 명령어로써 실행되어야하는 기능들이 아니라면 UI를 통해 가능하게끔 구성하여 편의성을 높였다. 이동하고 싶은 좌표를 기억하고, 길안내를 해주는 기능인 이정표, 물건을 사고 팔 수 있는 서버 상점, 은행, 마을 스폰, 스폰 맵 스폰 등 다양한 기능을 넣고있다.
한 예로 은행의 경우, 계좌에 넣는 것 뿐만 아니라 현금으로 인출하여 플레이어끼리 돈 자체를 아이템으로 거래할수도 있게 구현하였다.
내가 열심히 만든 마을이 있는데, 혹은 누군가 갑자기 나를 공격한다면.. 썩 좋은 경험은 아닐 것 이다. 플러그인 내부 권한 설정을 통해, 건축물 보호, pvp 금지 등의 옵션을 넣어주었고, 개인이 설정 가능하게끔 기능을 구현해두었다.
외부인은 파괴, 스위치 할 수 없다고 뜬다.
여려명이서 게임을 하게된다면, 마을을 만들고, 함께 돈을 벌며 생활할 수 있다. 점유되지 않은 땅은 진입 시 야생이라고 표시되며, 점유된 땅은 해당 마을 레벨에 따라 진입 시 표시된다.
마을 정보는 명령어를 통해 확인할 수 있으며, 다양한 기능이 존재한다.
현재 마을 내 계급, 레벨, 칭호 설정도 모두 마쳤다.
제법 뭔가 서버스러운 느낌이 되었다.
아직 서버 메뉴얼과 서버 설명글을 다 작성하지 못해서.. 다소 난잡하게 현황을 기록한 것 같다.
더 자세한 내용은 위 링크에서 확인할 수 있다.
유저 메신저 (디스코드)
앞에서도 언급했듯이, 유저 관리(추방 등)을 더 수월하게하기 위해 디스코드와 마인크래프트 계정을 연동해주는 플러그인을 개발하였다. /인증 명령을 통해 게임 내에서 사용 가능하며, 그 과정을 기록한다.
해당 과정 역시 같은 이유로 자세한 개발 파트는 이후 글에서 기록하겠다.
유저용 디스코드 채널을 개설하였다.
인증, 연동, 규칙사항 등 다양한 카테고리의 채널들로 분류하였으며
유저별 권한 설정도 완료하였다.
연동 과정으로 다시 넘어가서 설명하면, 우선 환영 채널의 연동 채널에 들어가준다.
해당 채널에 들어가면 FORECITY라는 봇이 기다리고 있다.
인증 코드 받기를 클릭.
인증 코드 받기를 누르면, 디스코드 DM으로 봇이 메세지를 하나 보내준다.
친절하게 잘 알려준다. /인증 <인증번호> 부분을 복사하여 게임으로 다시 돌아간다.
인게임에서 /인증 <인증번호>를 채팅에 입력해주면, 인증이 완료되었다고 메시지가 온다.
'마인크래프트 계정 <-> 디스코드 계정'이 뜨며 연동이 잘 되었다고 한다.
디스코드에 돌아와보면, 여기도 인증이 잘 되었다는 메시지가 와있다.
혹시 문제가 생길 경우, 관리자에게 문의해달라고 써두었다.
팀원 중 한명이 편지봇이라는 봇 시스템을 개발하였다. 이렇게 봇 프로그램이 있는 AP 서버가 실행되면, 디스코드 건의사항 채널에 편지봇이 DM을 보내달라고 글을 올린다. 편지 봇에게 메세지을 보내보았다.
메세지를 보내면 질문이 접수되었다는 답변이 돌아온다. 해당 질문은 그대로 우리 DB에 저장되도록 만들어두었다. 아주 유용하게 쓰일 것 같다.
이전 글에서 게임 로그를 디스코드 채널에 실시간으로 업로드해주는 시스템 구현을 다루었던 적이 있다. 최근 1주일동안 테스트를 진행하며 로그가 굉장히 다양해졌는데, 로그들을 전처리하여 따로 DB에 저장할 수 있다면 꽤 좋은 데이터분석 자료로 사용할 수 있지 않을까 싶다.
사실 들어와도 관리자가 승인하거나 하기 전까지는 대부분의 권한들이 막혀있기 때문에, 들어와도 별 볼건 없지만..
일단 올려두었다.
웹 개발
게임 내부 맵 구현은 보는 것과 같이 끝이났다.
실시간으로 연동도 잘 되고, DB도 연결 잘 되어있다.
https로 ssl도 잘 되었다.
결론부터 이야기하자면, 현재 거의 끝났다.
하지만,ssl 연결이 안되어서, websocket 부분에서 오류가 난다.
FastAPI를 사용하여 웹을 구현하였고, 네이버 클라우드에 서버를 만들고, nginx를 통해 리버스 프록시 서버를 구축하였다. 추가로, 마인크래프트도 TCP/UDP 방식의 리버스 프록시를 진행할 예정. 추후 정리해서 업로드하겠다.
향후 계획
세세한 부분이 많아서 다 기록하진 못했지만, 게임을 이용하는데 필요한 개발이나 기획 파트는 어느정도 마무리가 되었다. 따라서, 다음주에 베타테스트를 진행하려 했는데.. AWS 해커톤 캠프 일정이 잡혀버려서.. (자소서도 써야하고 ㅠㅠ) 다다음주인 2/6에 지인들을 테스터로써 모집해서 게임 테스트를 진행해볼 예정이다.
테스트 이후 서버를 오픈하면, 이후 글은 게임 서버 운영 카테고리에 따로 나누어서 기록하려한다.