
포켓로그는 로그라이크형 포켓몬 팬 게임으로 웹 브라우저에서 플레이하는 웹게임 입니다.

포켓로그는 깃허브에 코드가 모두 공개되어 있으며 프론트는 타입스크립트로, 백엔드는 Go로 만들어져 있습니다. 최근 Go를 재미있게 공부하고 있어 공부 겸 포켓로그 게임의 백엔드 코드를 분석해 봤습니다.
포켓로그의 백엔드 서버는 게임 플레이와 관련된 로직을 구현하고 있지 않습니다. 그래서 '스테이지에서 어떤 포켓몬이 나올지'나 '스킬의 난수를 계산하는 로직', '랜덤한 알에서 어떤 포켓몬이 나올지'와 같은 내용은 나오지 않는다는 걸 미리 말씀드립니다. 이 글은 포켓로그 서버 코드를 바탕으로 Go 웹서버 기본에 대한 내용을 다룹니다.
이번 글에서는 프로젝트를 다운받고 실행해 보는 것까지 해보도록 하겠습니다.
가장 먼저 프로젝트를 다운로드 받습니다. 깃허브 주소는 https://github.com/pagefaultgames/rogueserver 이며, 아래 명령어를 통해 다운받을 수 있습니다.
git clone https://github.com/pagefaultgames/rogueserver.git
README에 Docker로 실행하는 법, 윈도우/리눅스 환경에 맞춰 실행하는 법이 자세히 적혀 있습니다. 참고로 저는 리눅스 환경을 이용하고 있습니다.

프로젝트에는 2개의 docker-compose파일이 존재합니다.

yml을 살펴보면 두 파일의 용도를 금방 알 수 있는데요. DB를 포함해 서버 자체를 컨테이너 환경에서 실행하고 싶다면 docker-compose.Example.yml파일을, DB만 실행하고 싶다면 docker-compose.Development.yml을 실행하면 됩니다.
저희는 서버를 직접 localhost로 실행할거기 때문에 DB만 실행하면 됩니다. 아래 명령어로 docker-compose.Development.yml을 실행합니다.
docker-compose -f docker-compose.Development.yml up -d

docker-compose.Development.yml을 살펴봅시다.
services:
db:
image: mariadb:11
container_name: pokerogue-db-local
restart: on-failure
environment:
MYSQL_ROOT_PASSWORD: admin
MYSQL_DATABASE: pokeroguedb
MYSQL_USER: pokerogue
MYSQL_PASSWORD: pokerogue
ports:
- "3306:3306"
volumes:
- ./.data/db:/var/lib/mysql
간단한 명령어로 데이터베이스의 상태를 확인해 봅시다.
// 컨테이너 접속
docker exec -it pokerogue-db-local /bin/bash
// 마리아 DB 접속
mariadb -u pokerogue -p
pokerogue
// 데이터베이스 확인
show databases;
// 데이터베이스 선택
use pokeroguedb;
// 테이블 확인
show tables;

go mod tidy명령어로 필요한 모듈을 다운로드 받습니다.


rogueserver.go가 main파일이기 때문에 디렉토리 최상위 위치에서 go run .을 실행합니다. 콘솔에서 Daily Run Seed값을 입력받고 있습니다. 아무 숫자나 입력해 줍니다.이로써 서버 실행이 완료됐습니다.
프론트 프로젝트도 로컬에서 실행해 봅시다.
프로젝트를 다운로드 받습니다.
git clone https://github.com/pagefaultgames/pokerogue.git
서버를 실행합니다.
npm install
npm run start
localhost:8000으로 접속합니다.

프로젝트를 다운로드 받고 로컬 환경에서 실행해 봤습니다.
MariaDB는 도커 환경에서 실행되어 3306번 포트로 바인딩되어 있으며, 프론트와 백엔드는 각각 localhost 8000번 포트, 8001번 포트로 실행된다는 사실을 확인할 수 있었습니다.