게임 서버 구축 (7)

jw·2023년 11월 22일
0

게임 서버 구축

목록 보기
8/19

디스코드 개발

LOGS 방

기존에 Jira와 유사하게 디스코드 방을 만들었었는데, 필요에 의해 LOGS 라는 방을 하나 더 만들었다.
LOGS 방의 하위 방 목록은 다음과 같다.

  • logs: 웹훅을 이용하여 서버의 로그를 자동 출력
  • server-test-status: 웹훅을 이용하여 테스트 서버의 현재 상태 자동 출력
  • 변경 내역: 플러그인 적용 등, 서버 내부 사항을 수정했을 때 서로 공유하기 쉽게 하기 위함. 해당 내역은 사람이 직접 기록한다.

Search Bot 연동

디스코드에서 소통하던 중, 한 팀원이 이야기하길,

"디스코드 이거.. 검색 기능이 영 안 좋은 것 같은데.."

확인해본 결과, 예를 들어 '디스코드' 라는 텍스트를 검색하려 한다면
앞 뒤 공백이 정확히 맞아야하며, '디스' 혹은 '스코드' 이런 식으로 일부만 검색한다면 검색하지 않는다. 후에 자료들을 검색할 때 다소 불편한 감이 없지않아 있을 것 같아서, 해결 방안을 모색해보았다.

해결방안

--> 디스코드 검색 봇 사용
https://github.com/80ROkWOC4j/discord_search_bot

뭔가 있을 것 같았다.. 우리 같은 불편함을 느낀 사람이 또 있었을 것이라 생각했고,
해결법을 찾은 사람이 분명히 존재할 것 같았다.

역시 검색 봇을 개발한 사람이 있었고, 우리는 해당 기능을 즉시 채널에 추가했다.

검색을 원하는 방에서 /search 명령어를 넣고, text 박스가 생기면 검색하고 싶은 단어를 입력한다.


'경제' 라는 단어를 넣었을때, 잘 찾아서 DM으로 봇이 전송해준다. 문제 해결.
(기특한 마음에 봇 이름은 효자로 바꿔주었다)

Discord Webhook 연동

디스코드 웹훅이란?

디스코드 설명을 보면,

'웹훅은 초강력 인터넷 파워를 사용해 다른 앱과 웹사이트의 메시지를
Discrod에 포스팅하는 쉬운 방법입니다.'
라고 나와있다.

왜 사용하나?

앞서 말했듯이, LOGS 방에 logs, server-test-status 이렇게 2개의 하위 방을 추가하였다.
개발 과정에서 일일이 ssh나 구동기에 들어가서 서버의 로그, 혹은 서버의 현재 상태를 확인한다면 굉장히 불편 할 것 같다는 생각이 들었다. (과거 서버를 운영했을때의 경험도 한 몫 했다)

과정

logs - 서버 로그 출력

  1. 서버 채널의 logs 방에서 웹후크를 추가하고, url을 복사해준다.

  2. 스크립트 파일 생성

    sudo vi /opt/minecraft/스크립트명.sh

    우리 팀이 사용하고 있는 마인크래프트 디렉토리에 script를 생성해주었다.
    스크립트 내용은 다음과 같다.


    latest.log 파일은 마인크래프트 게임 내의 모든 로그가 기록되는 로그 파일이다.
    해당 로그 파일에 변경사항이 있을 때 마다 디스코드에 전송되도록 설정하였다.

  3. service 생성

    sudo vi /etc/systemd/system/discord-log-monitor.service

    systemd 설정을 통해 service를 새로 만든다. 내부 내용은 다음과 같다.

    ExecStart 옵션을 사용하여, 2번에서 작성했던 script를 실행 시에 실행하게끔 설정하였다.

  4. 영구 적용 설정

    sudo systemctl enable discord-log-monitor.service

    다음 명령을 통해, 컴퓨터를 켤 때 마다 다음 설정을 자동적으로 수행하도록 설정하였다.

  5. 적용 결과

    디스코드 logs 방에 현재 시간과 함께 로그가 잘 올라오는 것을 확인할 수 있다.

server-test-status - 서버 on/off 상태 출력

웹훅을 이용하여 스크립트를 만들고, systemd에서 service 설정을 하는 것은 위의 방법과 다르지 않다. 하지만, 몇 가지 다른 부분이 있기에 그 부분만 이야기하겠다.

다음은 status 상태를 나타내는 service의 내용이다. 전과는 다른 점이 몇 가지 보인다.
ExecStart만 있었는데, ExecStop이 생겼다. 왜 이렇게 설정했는지는.. script를 살펴보면 알 수 있다.

  • 시작 시 실행되는 status.sh 스크립트

밑 부분을 확인해보면, 60초. 즉 1분마다 서버 상태를 감시해서 서버 상태가 바뀐 경우 디스코드 방에 보고하는 로직임을 알 수 있다. 처음에는 이것만 해도 되겠구나~ 했는데.. 금방 문제를 깨달았다.
바로 서버가 꺼질 때 이다. 사실 컴퓨터가 켜져있고, 서버만 꺼지는 경우에는 script가 계속 돌아가기에 큰 문제가 없다. 하지만, 컴퓨터가 꺼지는 경우에는 자동으로 서버도 꺼지는데, 이 때 그 짧은 시간에 서버 상태를 전송하게 할 수가 없다. (서버 감시 주기를 짧게 하면 가능하지만, I/O가 증가하기 때문)

그래서 종료 시에 실행되는 script를 하나 더 추가한 것 이다.

  • 종료 시 실행되는 shutdown.sh 스크립트

잘 보면 MESSAGE 부분에 Last know Minecraft server status라는 메시지와 함께, 컴퓨터를 끌 때 서버의 상태를 따로 보고하게 만들었다. 서버를 끈다고 끄자마자 바로 failed 상태로 되는 것은 아니고, deactivating 상태를 거치기 때문에, 메시지는 deactivating으로 주로 온다.

그럼 적용 결과는 어떻게 나왔을까?

서버를 켰다 껐다, 컴퓨터를 reboot 했다, 껐다...
이런 저런 시도를 해보았고, 결과적으로 잘 나온다!
마지막 로그를 기준으로, 현재 서버 상태를 판단하기로 했다.

나중에 본 서버로 push 할 때, 서비스 이름, 봇 이름, 메시지 등 기준을 잡아서 예쁘게 통일시켜서 다시 구현해야겠다는 생각도 들었다. (옵션.. 변수.. 많아지니까 헷갈려..)

해당 스크립트를 사용하면 추후 웹 제작 시 서버 상태를 나타내는데도 도움이 될 것 같다.

Discord 사용 현황

LOGS방을 어떻게 쓰고 있는지만 기록한 듯 하여 다른 방 현황도 간단하게 기록하려 한다.

  • 잡담방 - 주로 음성채널에서 소통할 때 쓰고 있다.

  • 쓸만한 자료들 방 - 개발 파트 상관 없이 유용해보이는 자료들을 올리고 있다

  • INFRA - 플러그인 연동 - 다음 회의 때 적용할 다양한 플러그인 자료들을 올리고 공유중

2차 회의 (11/23)

2차 정규회의 예정..

INFRA - 플러그인 연동 -> 다양한 플러그인 적용
BACKEND - 플러그인 코딩 -> 번역 및 java 코드 수정 등

뭔가 착착 진행되고 있는 것 같다.
팀원들 마음도 잘 맞아서, 순항중인 느낌.

profile
『Infra Engineering』

0개의 댓글

관련 채용 정보