게임 서버 구축 (17)

jw·2024년 2월 26일
0

게임 서버 구축

목록 보기
18/19
post-thumbnail

2/16 드디어 서버 오픈을 했다.
서버 오픈 이후 자잘한 수정들이 있었다.
그 중에서 오늘은 다음 2가지를 기록해보려 한다.

  • DB 백업
  • 유저 피드백 반영

DB 백업

프로젝트 시작 초기에, DB에 대해 잘 몰랐기에...
게임 서버처럼 그저 통으로 백업하면 되지 않을까? 하는 생각으로 DB 디렉토리를 통채로 백업했었다.

이후 인프라 공부를 하며 DB백업은 그렇게 하면 안된다는걸.. 깨달았고,
mysqldump를 사용하여 system 데몬을 서비스를 만드는 방법으로 구현해보았다.

1. mysqldump 생성

mysqldump -u [db유저] -p [패스워드] -h [호스트 주소] --all-databases > [백업파일명].sql

다음과 같은 구문으로 간단하게 sql 확장자명의 백업 파일을 생성할 수 있다.

2. onedrive로 전송 & 가져오기

rclone copy [sql 파일 경로] onedrive:[보내줄 onedrive 경로]

간단하게 onedrive에 sql 파일을 업로드 할 수 있다.

rclone copyto onedrive:[보내줄 onedrive 경로] [sql 파일 경로]

이처럼 반대로 가져올수도 있다.

3. script & systemd 서비스 생성

#!/bin/bash

# 스크립트 실행 디렉토리로 이동
cd /home/dbadmin

# 파일명으로 지정할 현재 날짜 설정
CURRENT_DATE=$(date "+%Y_%m_%d")
FILENAME="db_${CURRENT_DATE}.zip"

if rclone copy "${FILENAME}" onedrive:db_backup; then
    # 업로드 성공한 경우에만 파일 삭제
    rm "${FILENAME}"
else
    echo "rclone 명령어 실행 중 오류가 발생했습니다."

다음과 같이 script 파일을 만들고,

[Unit]
Description=DB Backup Service

[Service]
Type=simple
ExecStart=/home/dbadmin/db_backup.sh

[Install]
WantedBy=default.target

해당 스크립트 파일을 실행하는 서비스 파일도 만들어주었다.

실행 트리거는 타이머 파일을 만들어서 구현했다.
이제 컴퓨터가 서비스가 종료되는 시간에 맞춰, DB백업 파일도 자동으로 onedrive에 올라가게 된다.

4. DB복원

mysql -u [db유저] -p [패스워드] -h [호스트 주소] --all-databases < [백업파일명].sql

복원 방법도 굉장히 쉽다.
앞서 mysqldump를 이용하여 백업했던 부분에서 화살표를 반대방향으로, 그리고 mysqldump 명령이 아닌 mysql 명령으로 입력하면 끝이다.

백업은 어차피 수동으로 진행하기에, 따로 자동화해두지 않았고
문제가 된 시점이 있다면, onedrive에서 가져오고 해당 파일을 사용하여 모든 databases를 복원하는 방식으로 정했다.

백업이 끝나면 백업 파일은 삭제해준다.

5. 적용

실제 현재 게임 내 본인 캐릭터의 돈 DB를 가져왔다.
현재 13500원인 것을 확인 할 수 있다.

해당 시점에서 백업을 진행해주었다.


이후 인게임에 접속하여, 10000원을 아이템으로 현금화하여 빼주었다.
계좌가 3500원으로 줄어든 것을 확인.
(유저 없을때 후다닥...)

DB 역시 3500원으로 잘 줄어들었다.

이제 백업 파일을 이용하여 롤백시켜보자.

인게임 내의 오른쪽 보드를 보면
성공적으로 3500원 -> 13500원으로 돌아온 것을 확인할 수 있다.


유저 피드백 반영

오픈 이후 약 10일 동안 서버를 운영하며 생각보다 많은 분들께서 서버를 찾아주셨다.

이전 글에서도 언급했지만, 유저와의 원활한 소통을 위해 디스코드 채널 내의 건의사항 봇을 DB와 연동해두었는데, 이걸 통해서 문의해주시는 분들이 생각보다 꽤 있었다.

위와 같이 디스코드 uuid, 피드백 내용, 시간 등이 DB에 새로운 row값이 쌓일 때 마다 한시간 간격으로 올라오게 해두었다. 피드백 반영을 굉장히 많이했는데, 그 중 하나를 예로 들어보겠다.

ex) 인벤 세이브 해결책 --> 가상 창고

죽어도 사라지지 않는 인벤토리를 통합메뉴에 따로 구현했다.

피드백 내용에 대한 답변은 패치사항 채널에 패치노트와 함께 게시하였다.
유저와 소통하며, 불편사항을 해결하고, 예상치 못한 상황을 보기도 하는게 나름 의미있는 경험이라고 생각한다.


게임 서버... 마무리..

제목 그대로.. 게임 서버를 다음주 중으로 마무리하려 한다.

많은 공을 들였던만큼 굉장히 아쉽긴 하지만, 다들 이쯤에서 마무리하는게 맞을 것 같다고.. 의견이 모아졌다.

간단하게 이유를 밝혀보자면,


생각보다 너무 많은 유저들이 찾아주었고, 자연스레 컨텐츠가 굉장히 빠르게 소모되었다..
다들 개발보다는 새로운 컨텐츠 추가 등의 운영 & 기획에 매달리게 되었고,
어느 순간부터 개발 공부를 하려고 시작했던 본래의 목적과는 조금 멀어지고 있다는 생각이 들었다.
운영을 하는데에 있어 시간이 너무 뺐기니, 다음 프로젝트에서 새롭게 시작해보는 것이 좋겠다고 결정했다.

3명이서 한 것 치곤 솔직히 이미 많은 것들을 했다고 생각한다.

다음 글에서 이렇게 결정할 수 밖에 없었던 이유를
게임 내의 유저 데이터, 로그 데이터를 분석하는 글과 함께 다루어보고

이 프로젝트는 마무리 하려한다!

profile
『Infra Engineering』

0개의 댓글

관련 채용 정보