프로젝트(minecraft 서버 운영) (4)

HJ·2024년 2월 15일
0

1월에 동계 빅데이터 캠프 , 코딩테스트캠프 , AWS캠프등 , 서포터즈활동등을 병행하면서 프로젝트를 진행했기에 시간적인 여유가 많지 않았다. 따라서 1월4일에 마인크래프트 서버운영(2) 포스팅 이후에 내가 진행했던 내용들을 이제야 포스팅하게 되었다.

현재 진행하는 프로젝트는 2월초에 본격적으로 서버를 오픈하는것이 예정이었다. 원래는 설날 전이 오픈이 목표였지만 이것저것 버그 수정 , 세부작업등을 거치고 2월6일에 테스트로 서버를 열어 지인들을 초대해 테스트 해보았다. 전체 과정을 담은 내용은 https://velog.io/@rkdghwjd1999/프로젝트minecraft-서버-운영-서버소개 2월6일에 포스팅 했다.

추가 진행 사항

인프라

전반적인 인프라는 모두 마무리 되었고 추가적으로 프록시 서버 구축 , DNS설정등 추가적으로 마무리했다. 최종
대부분 인프라는 담당한 팀원이 맡아주었다. 자세한 내용은 팀원 블로그를 보면 확인 할 수 있다. https://velog.io/@toothlessjw/%EA%B2%8C%EC%9E%84-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-16

게임 내부

게임 내부 역시 많은 작업이 필요했다. 번역이 안되어있던 모든 기능 번역 , 편리한 ui , 다양한 추가 기능들을 만들기 위해 3명에서 끊임없이 테스트하고 스크립트를 수정했다. 현재 2월 15일 기준으로 모든 작업들을 마무리하고 2월 16일부터 본격적으로 유저를 받을 준비가 되었다. 자세한 코드 내용은 너무너무 많으니 생략하도록 하겠다.

최종 홍보

마인크래프트 유저 대형 커뮤니티인 한마포에 올린 최종 홍보 팜플렛 주소이다. https://www.koreaminecraft.net/serverad/3716189

내 진행사항

우선 나는 저번포스팅에서 설명했던 웹 부분을 모두 마무리 짓고 , 디스코드 봇 개발 및 디스코드 서버 관리 , gitbook 메뉴얼 제작등을 메인으로 맡았고 틈틈히 게임내에 있는 요소들을 테스트하고 수정하는 역할을 보조했다. 이후 서버 오픈 이후에 는 db정리를 마치고 , EFK를 통한 로그 분석을 시도해 보고있다

2월 초반에 테스트 서버를 오픈하고 2월 중순에 본격적으로 서버를 오픈하는것이 목표였기에 웹작업은 자연스럽게 후순위로 밀렸다. 이유는 유저가 많은 대부분의 다른 사이트 중에서도 웹을 안쓰는 곳들도 잇었고 , 당장은 3D지도 웹사이트만 있어도 게임을 운영하는데 문제가 없었다. 따라서 우선 게임의 메뉴얼 역할을 하는 페이지를 gitbook으로 따로 만들기로 했다. 이 부분은 뒤에서 더 자세히 설명할 것이며 , 아무튼 웹 작업은 게임 서버를 오픈한 뒤 본격적으로 진행하기로 하고 도메인 연결까지만 했다.

디스코드

우선 저번에 하지 못했던 senos환경에서 discord bot systemd자동화를 완성시켰다. 저번에 문제점은 sentos본격적인 환경을 만들고 나서는 권한을 분리했기에 나에게 python 파일을 실행할 권한이 없었다. 따라서 root권한을 가진 팀원이 같은 코드로 실행했더니 잘 되었다.


구조는 위와 같으며 웹서버 , db서버 , 메인서버는 24시간 거의 풀로 가동된다 . 또한 메인서버에 디스코드 관련 봇들이 systemd로 풀 가동되고 있다. 디스코드 봇은 건의를 담당하는 편지봇 , 뒤에서 추가로 만든 db조회 봇 , 디스코드 연동을 맡은 연동봇이 있다.

각종 권한 설정

디스코드 채널에 가장 중요한 부분은 권한이다. 새로 들어올 유저에게 처음에 보이는 채널 , 인증이 완료되고 역할이 부여줬을때 보이는 채널이 달라야 하며 각 채널마다 부여되는 행동도 다르게 설정해줘야 한다. 따라서 조금 까다롭다.

이 부분은 테스트 단계에서 지인에게 여러번 테스트를 부탁하면서 점점 개선해 나갔고 , 아래 사진 처럼 처음 유저들은 4개의 채널만 보이게 되고 이모티콘을 누르고 인증역할을 부여받으면 모든 채널들이 보이게 된다.

아래 사진처럼 유저가 처음에 접속했을때는 4개의 채널이 보인다. 이후 유저가 인증 이모티콘을 누르면 두번째 사진과 같이 없어질채널은 없어지고 모든 채널이 보이는것을 확인 할 수 있다.

DB봇

지난번에 유저가 건의사항 게시판에 편지를 보내면 db에 저장해주는 편지봇을 만들었었다. 하지만 db에 쌓이는 데이터를 mysql workbench를 활용해 그때그때 확인하는것이 너무 불편했고 , 따라서 봇에게 dm을 보내면 db테이블 내용을 조회해주는 기능을 만들고 싶었다. 따라서 새로운 봇을 생성하고 !전체테이블보여줘 명령어를 입혁하면 테이블을 조회하는 python 코드를 만들었다.

추가적으로 24시간 모니터링하는것은 사실상 불가능 하기 때문에 유저가 보낸 건의사항 DM을 바로 확인하는것이 어려울수 있다. 따라서 이를 실시간으로 모니터링 하기 위해 위에있는 봇이 60분 간격으로 새로 들어온 데이터를 특정 채널에 보내도록 구현했다. 덕분에 빠르게 유저들의 피드백 및 건의사항을 확인할 수 있다. 참고로 이 채널은 관리자만 볼 수 있다.

고맙게도 아래와 같이 피드백을 주시는 분이 있으셔서 너무 큰 도움이 된다. 디비봇 시스템 덕분에 바로 확인하고 답변이 가능했다. 디비봇 시스템도 편지봇과 마찬가지로 메인 리눅스 서버에서 systemd로 작동하게 해서 항상 온라인이 되어있다.

메뉴얼 북(gitbook)

게임에 대한 메뉴얼 사이트로 gitbook을 선택했다. 이유는 여러서버에서 사용하는 만큼 깔끔한 UI를 구성할 수 있고 , 사용법도 어렵지 않아 선택하게 되었다. gitbook을 내가 메인으로 거의 맡아 제작하게 되어서 시간이 상당히 걸렸다. 총 93번에 수정 끝에 서버오픈 전날 완성시켰고 자세한 주소는 https://minecraft-11.gitbook.io/minecraft-forecity/ 이다. 메뉴얼 같은 경우 코딩 기술이 들어가지 않기 때문에 자세한 설명은 생략하도록 하겠다.

DB정리 및 시각화

게임 개발을 진행하면서 export되는 데이터 수정이 있어 쌓이는 DB테이블이 조금 변했다. 때문에 전에 만들어 놓은 시각화도 아래와 같이 모두 깨지게 되었다. 또한 , 본격적으로 서버운영을 하면서 DB에 실제 데이터가 쌓이기 시작했다. 따라서 너무 내용이 많아 보기 힘든 DB 정보를 필요한 정보를 정리할 필요가 있었다.

나는 전에 했던것처럼 view방식을 사용하기로 했다. 저번에도 말했듯이 view는 쉽게 삭제 , 생성이 가능하다는 장점이 있어 편했고 여러가지 테스트를 할 수 있었다. 아래와 같이 left join 3번을 활용해 테이블을 합쳤다.

처음에는 아래와 같은 오류가 떴다. plugin_vegas db가 utf8mb4 형식이 아닌것이 원인인것을 찾았고 , 형식을 바꿔주었다.

결과적으로 아래와 같이 데이터가 필요한 정보만 잘 정리되었다. 데이터는 2월 18(오픈 3일차) 기준으로 80개정도 되며 , 유저 정보는 혹시 모르니 가리도록 하겠다.

아래와 같이 정식 오픈인 2월 16일 이후에 들어온 유저 수 , 메인 컨텐츠 게임 승률등을 간단하게 테블로로 시각화 해보았다. 고맙게도 오픈부터 생각보다 많은 유저들이 방문해 주셨다.

EFK or ELK

유저가 본격적으로 들어오면서 메인 서버에 로그 데이터가 쌓인다. 이 로그데이터는 디스코드 채널과 연동되게 해놔서 계속 모니터링 할 수 있고 , 다양한 정보들이 담겨져 있기 때문에 이 로그데이터를 분석하는것이 필요했다.

2월 초쯤에 AWS에서 주최하는 해커톤에 참여하면서 강의를 해주신 강사님이 로그분석 방법으로 kibana를 추천해주셨다. 이에 , kibana를 알아보다가 보통 로그분석 프로세스가 EKF 또는 ELK로 이루어지는것을 알 수 있었다. EKF는 Elasticserach , Fluentd , kibana 의 약자이고 ELK로 Elasticserach , logstach , kibana 의 약자이다. logstach또는 Fluentd로 로그 데이터를 추출해 Elasticserach로 보내고 Elasticserach 에 있는 데이터를 kibana를 통해 분석하는것이 일반적인 방식인것같다.

따라서 서버에 EFK , ELK 를 설치하고 로그 데이터를 분석하는것이 목적이다 . 게임이 작동하는 메인서버 sentos 환경에서 하기에는 잘못하면 서버에 지장이 갈수도 있다는 판단에 , 내 컴퓨터에 ubuntu 20.04 lts를 깔아서 다운받은 .log파일을 넣고 실험해보기로 했다.

유튜브 영상과 다양한 블로그 영상을 참고해 elasticserach와 , kibana는 성공적으로 설치했고 아래와 같이 systemd status를 보면 잘 작동하는것을 확인 할 수 있다.

문제는 fluentd가 제대로 안된다. 유튜브 영상으로 설치를 하면 오류가 나서 공식문서 상에서 설치를 했을때 systemd는 잘 작동을 했지만 내가 원하는 log파일을 읽기 위해 config scripts를 수정하다가 아래와 같은 계속 오류났다. 이 부분은 내가 아직 fluentd에 대한 지식이 많이 없어서 발생하는 문제인것 같고 .. 추가 공부가 필요할것 같다. 또한 정 안되면 logstach로도 시도해볼 예정이다.

추가적으로 진행해야할 사항

3달간 개발이 처음으로 마무리가 되었다. 2월16일부터 오픈한 서버는 걱정했던것보다 안정적으로 운영되며 유저또한 3일만에 50명이 넘었다. 너무 감사하다.

이제부터는 서버를 홍보해 유저를 모으고 , 모은 유저들이 쌓은 log 데이터를 분석하는게 내 주업무다. 또한 조금 뒤로 밀어두었던 웹서버를 팀원 3명에서 본격적으로 구축할 예정이며 협업이 매우 필요한 만큼 이참에 github repository를 만들어 관리하면서 git 환경에도 익숙해질 예정이다.

막상 서버를 운영하니 예상하지 못한 돌발상황들도 발생하지만 , 이것이 이 프로젝트에 묘미인것같다. 다음 포스팅에서는 서버운영을 본격적으로 진행하면서 이슈 , 해결사항들을 위주로 작성해볼 예정이다.

profile
데이터 공부 기록

0개의 댓글

관련 채용 정보