프로젝트(minecraft 서버 운영) (마무리_1)

HJ·2024년 3월 7일
0
post-thumbnail

<개발 과정 블로그>
1. https://velog.io/@rkdghwjd1999/프로젝트minecraft서버-운영
2. https://velog.io/@rkdghwjd1999/프로젝트minecraft서버-운영-2
3. https://velog.io/@rkdghwjd1999/프로젝트minecraft서버-운영-3
4.https://velog.io/@rkdghwjd1999/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8minecraft-%EC%84%9C%EB%B2%84-%EC%9A%B4%EC%98%81-%EC%84%9C%EB%B2%84%EC%86%8C%EA%B0%9C
5.https://velog.io/@rkdghwjd1999/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8minecraft-%EC%84%9C%EB%B2%84-%EC%9A%B4%EC%98%81-3

시작

제목 그대로 minecraft서버 운영 프로젝트 마무리를 포스팅해보려고 한다.
11월말부터 시작해 약 3명에서 약 3개월 동안 열심히 달려왔고 , 회의 횟수만 총 20차례 이상 진행했다. 다행히 2월 16일 부터 오픈한 서버의 유저가 총 200명이 넘어 덕분에 총 4만개이상 유저들의 로그를 쌓을 수 있었다.

열심히 만든 프로젝트를 2주동안 운영하고 닫는 이유를 간단하게 말해보자면 , 생각했던것 보다 많은 유저들이 서버에 찾아주셔서 컨텐츠가 굉장히 빠르게 소모되었다. 이에 팀원모두 새로운 컨텐츠 기획 및 추가 & 유저관리 등에 매달리게 되었고, 주 목적이었던 개발 공부와 거리가 점점 멀어지고 있다는 생각이 들었다. 따라서 , '운영을 하는데 시간을 너무 많이 뺏기니 , 다음 프로젝트를 새롭게 시작하자'는 의견에 모두 동의하여 프로젝트를 마무리하게 되었다.

글이 길어질것 같아 글을 나누어 이번 포스팅에서는 구현했던 내용 정리,운영 과정 위주로 마치고 추가적으로 내가 했던것들 , 앞으로 방향 , 고찰을 다음 포스팅에 이어가겠다.

내용

3개월 동안 정말 많은 과정이 있었기에 , 모든 시도 과정을 한번에 정리 하는것은 어렵다. 따라서 큰 파트 6개로 나눠 간단하게만 내용을 적어보려고 한다.

os

os파트에서 내 역할은 주로 python을 활용해 자동화봇을 만드는것이었다. 나머지 부분들은 거의 팀원들이 맡아서 진행해주었고 , 최종 서버가 작동하는 이상적인 아키텍처는 아래와 같다.

하지만 aws 환경으로 마이그레이션 하지 못하고 네이버 클라우드를 대신 사용했고 , 메인 웹 배포환경을 따로 구축하지 못해 그림과는 조금 다르게 진행했다는것이 아쉬움으로 남는다.

main

  • ubuntu -> CLI 기반의 centos7 minimal AP(Application Server) DB(Database Server) 통합

방화벽 & 포트설정

  • firewalld를 이용하여 포트 넘버에 맞게 방화벽 오픈
  • DB서버는 내부에서만 통신 가능하도록 내부 ip를 사용
  • 개발 환경은 개발 인원의 집 ip로만 접근 가능하도록 설정

서버 자동화 (systemd 활용)

  • 편지봇 , 실시간 db조회 봇 자동화
  • 인증 봇 자동화 , rclone을 활용해 onedrive에 AP server, DB 백업(mysqldump) 자동화

  • minecraft game server on/off 자동화 , discord logging system 구축

WOL & SSH mobile

  • IPTIME WOL기능을 사용한 원격 환경(모바일)에서 server 전원 제어
  • Termius 어플을 사용한 모바일 SSH 연결

보안

  • pem키를 활용한 서버 접근(1차보안)
  • Google Authenticator어플을 활용한 일회성 otp(2차보안)

서버 모니터링 시스템 cookpit

  • cookpit framework를 이용한 서버 모니터링 시스템 구축
  • selinux 모니터링 , systemd제어 등 가능
  • CPU 사용량, 메모리 사용량 , 네트워크 트래픽등 실시간 확인 가능

Network

Ntework는 인프라를 담당하는 팀원이 맡아서 해주었다.

  • NGINX Framework를 이용하여 마인크래프트 서버로 오는 모든 요청을 네이버 클라우드를 통해 경유하도록 구축
  • nginx기반으로 proxy서버를 통해 홈서버 ip 주소를 가림
  • 포트 포워딩 (각 서버별 포트 포워딩)
  • 가비아에서 도메인 구매하고 coludflare서버를 활용해 보안 향상
  • cloudFlare wokers서비스를 이용해 dynamap 웹 배포

Web

나는 python , javascripts 등을 사용해 메인 웹사이트를 구축하는것을 맡았다.

dynamap 맵 구축

  • 마인크래프트 자바기반 플러그인 dynmap , world border , chunky 플러그인 설치후 메인 서버에 활용
  • dynamap플러그인을 활용해 3d웹사이트 만들고 포트포워딩
  • world border플러그인을 활용해 월드 경계 설정 , 경계 바깥쪽은 지도에 표시x 설정
  • chunky플러그인을 통해 청크 생성
  • 부하를 줄이기 위해 해상도 및 트리거 설정

메인 웹사이트 구축

  • fast api 를 활용해 backend / html , javascript , css 를 활용해 frontend 구축
  • websoket , chart.js 를 활용해 db데이터 동적 시각화

DB

나는 mysql 쿼리를 통해 테이블을 조작하고 정제하는 역할을 맡았고 , 유저들의 리텐션을 테블로로 실시간으로 모니터링했다.

  • 다양한 플러그인과 maria db 연동

  • mysql에서 다양하게 테이블 조작 (view,trigger생성등)

  • 유저들 이탈률 모니터링
    (이탈 기준 : 가입하고 30분도 안되서 나가고 다시 들어오지 않은 유저)

  • mysqldump명령을 이용하여 db 바이너리 데이터 백업

discord & gitbook

discord개발,gitbook메뉴얼 제작은 거의 내가 주로 맡았다.

개발 소통 채널

  • 자료공유 , 회의 , 로그 확인 , 서버상태 확인등 소통 창구로 사용

게임 유저 채널

  • 인증(zira봇 활용)/연동 봇 개발 및 각종 권한 관리

  • 다양한 채널 생성 및 채널 별 권한 관리 설정
  • python기반 편지봇 , 편지db조회 봇 등 개발로 빠른 피드백

*편지봇 : systemd로 작동하는 봇이 on이되면 해당 날짜에 맞는 멘트를 자동으로 올려주고 , 봇에게 건의사항 DM을 보내면 '질문이 접수 되었습니다' 메시지와 함께 insert쿼리를 db로 보내 해당 내용이 db테이블에 쌓임.

*디비봇 : systemd로 작동하면서 1시간 마다 db에 select쿼리를 보내 테이블을 조회하고 조회한 내용을 디스코드 채널에 뿌려줌.

gitbook

이전에 작성했던 포스팅에서도 알 수 있듯이 gitbook 을 활용해 서버 메뉴얼 사이트를 만들었다. 수정만 100번했다..

gitbook 주소 : https://minecraft-11.gitbook.io/minecraft-forecity/

게임 내부

minecraft게임 자체가 대부분 java기반으로 이루어져있다. 따라서 플러그인 또한 java기반과 yaml로 대부분 이루어져 있었는데, 다른 개발자들이 만들어 놓은 플러그인을 우리 서버에 맞게 수정하기 위해서 yaml수정이 필요했다. 또한 스크립트를 작성하면 서버에 쉽게 반영해주는 scripts플러그인을 적극 활용해 쉽게 커스터마이징 할 수 있었다.

vs code로 스크립트 수정하는 사진 추가 !

  • 각종 플러그인 번역
  • 새로운 컨텐츠 맵 제작 , 스크립트 수정으로 새로운 기능들 추가
  • 여러 맵 파일 하나로 통합
  • 그밖에 다양한 편리한 ui구성

운영 과정

오픈 2주동안 199명의 유저들이 가입해 게임을 즐겨주었다. 생각보다 많은 유저들이 들어와준 덕분에 다양한 피드백을 받을 수 있었다. 아래부터는 운영과정에서 발생했던 이슈들 , 반영한 피드백등을 작성해보겠다. 이슈들은 주로 3명에서 계속 log를 모니터링 하면서 발견했다.

이슈 사항

이탈 유저

-이탈하는 유저들이 많았다-
-> 가입한 후 1시간도 안되어서 나가고 다시 들어오지 않은 유저들을 이탈로 생각하고 그래프를 모니터링 했는데 , 생각보다 이탈을 하는 유저들이 많았다 이탈의 원인은 크게 2가지가 확인되었다.
-> 첫번재는 마인크래프트라는 게임 특성상 여러 서버들에 왔다갔다 할 수 있어서 흔히말하는 "찍먹"이 가능했다. 이 부분은 개발자의 인력의 한계로 인해 더 매력있는 서비스를 만들지 못한 부분이라 단기간에 해결할 수 없었다.
-> 두번째는 로그를 보니 생각보다 많은 유저들이 게임과 디스코드를 연동하는 인증을 어려워했다. 하지만 인증과정은 유저 관리 측면에서 필요한 기능이기 때문에 더 간소화 시킬 수 가 없었다.

-특정 유저가 인증버튼을 클릭하면 가야할 DM을 받지 못했다.
-> 유저가 DM을 받지못하도록 차단 설정을 해놓았던것이 문제였다.

편지 봇 이슈

-중간에 편지봇이 한번 꺼진적이 있었다-

-> 오류났을 시점 log를 살펴보니 db와 bot이 작동하는 python scipts에서 문제가 생겼다. 서버가 켜짐과 동시에 systemd (main server on -> maria db on -> python bot scripts on) 이 작동하는데 유저가 많아지면서 db가 무거워져 db서버가 켜지는 속도가 느려졌고 , db가 켜지지도 않았는데 db를 참조하는 python bot scirpts가 실행되는것이 문제였다. 따라서 , db가 완전히 active 상태가 되었을때 python bot scripts를 실행하도록 프로세스를 설정해 정상작동 시켰다.

게임 내 이슈

-스폰맵 버그 발견-
-> 스폰맵의 경계를 스크립트로 설정해 일반 유저들을 맵을 파괴하지 못하게 설정했다. 그런데 , 게임 도중 특정 유저가 스폰맵 끝 부분을 파괴해 고가의 아이템을 획득했다는 제보를 dm으로 받았고, 경계 부분을 다시 수정하는 작업을 거쳐서 해결했다.

피드백


위처럼 db봇이 건의사항 db에 쌓인 메세지를 1시간마다 조회해서 관리자만 볼 수 있는 채널로 보내주어 , 빠르게 피드백을 확인할 수 있었다.

또한 너무 고맙게도 위와 같이 개인 DM으로 피드백 내용을 보내주시는 유저분들도 있었다.

반영 예시

  • 인벤 세이브 피드백 해결책 --> 가상 창고 생성

  • 기타 대답

이밖에도 은행 권한 관련 문제 , 자잘한 ui들을 유저들의 채팅 log를 모니터링 하면서 애자일 방식으로 수정해 나갔다. 수정 사항은 아래와 같이 discord 패치사항 채널에 공지하였다.

마무리

지금까지 했던 내용들을 간단하게 정리해보았다. 이밖에도 시도했던 다양한 과정들이 있지만 자세한 내용은 내 다른 블로그나 , 팀원 블로그에 정리되어 있다.
팀원 블로그 : https://velog.io/@toothlessjw/posts

이후 유저들이 쌓은 4만개의 로그 데이터를 가지고 로그 분석을 해보았다. 글이 길어졌으니 진행했던 과정에 대한 설명과 , 고찰은 다음 포스팅에서 이어가도록 하겠다. 게임을 해준 유저분들 너무 감사합니다 !

profile
데이터 공부 기록

0개의 댓글

관련 채용 정보