클라우드 웹 서버 설치 & 연동하기 #1
요즘은 뒤끝, 플레이팹, 파이어베이스 등 상용 Game BAAS와 관련 레퍼런스가 많아져서
혼자 게임 개발을 하는 사람들도 쉽게 내 게임에 작은 서버를 붙일 수 있다.
학원 졸업 후 같이 공부하던 스터디 네이버 카페를 보다가
신입 포트폴리오를 만들기 위해 BAAS를 이용하지 않고, 작은 클라우드 서버를 만들어서
게임에 연동했던 과정을 3년에 정리했던 글을 찾게 됐다.
그때는 닷홈이라는 업체의 웹 호스팅을 통해 서버 내의 DB를 긁는 방식까지만 학원에서 배웠었고,
이 글은 여러 클라우드 서버 중에서 네이버 클라우드에 작은 서버와 DB를 만들고
내 게임에서 해당 DB를 참조하는 방법에 대한 글이다.
그나저나 지금 생각해 보니 서버 DB에 유저 정보는 그렇다 치고, 몬스터나 아이템 정보까지 넣어 놓고서
게임에서 로그인할 때마다 DB를 긁어서 캐싱하는 건 바보 같긴 했다ㅎㅎ...
1. 웹 호스팅 vs 서버 호스팅 vs 클라우드
위 셋은 서버를 제공받는 방식에 차이가 있을 뿐,
서버를 받게되면 게임 서버로서 작동하기 위한 여러 가지 세팅은 개발자가 스스로 해야 한다.
그리고 이러한 것까지 유료 서비스로 제공하는 것이 뒤끝서버 같은 BAAS라고 할 수 있다.
여러 가지 세팅 중 대표적인 게 APM이다.
2. APM
(1) Apache
정식명칭은 Apache HTTP server 웹 서버 프로그램이다. 웹 서버란 웹 서비스를 제공해 주는 서버이다.
사용자의 웹 브라우저에게 요청을 받으면 해당 요청에 대해 응답 및 제공을 해주는 역할을 담당한다.
유니티 게임을 예로 들면, 유니티 클라이언트가 웹 서버에 다이렉트로 요청을 하는 것이 아니라 중간에 Web을 거치게 된다.
동일한 역할을 하는 다른 프로그램은 Nginx, IIS 등이 있다.
(2) PHP
웹 서버에서 실행되는 웹 프로그래밍 언어 중 하나다.
웹 서버는 PHP를 해석해 HTML 코드로 만들고, 브라우저에 전달하는 형식이다.
동일한 역할을 하는 비슷한 언어는 ASP, JSP 등이 있다.
(3) MySQL
DBMS의 종류 중 하나로서, 데이터베이스구축하는데 쓰는 프로그램 중 하나다.
웹 서버를 통해 DB 관련된 작업을 하기 위해 필요한 프로그램이다.
대체 가능한 다른 프로그램에는 수많은 DBMS가 존재하는데, MySQL은 관계형 데이터베이스 관리 시스템(RDBMS)이다.
3. 네이버 클라우드 서버와 그 안에 APM 설치
https://blog.naver.com/n_cloudplatform/221030710983
4. 서버 접속
https://puleugo.tistory.com/13
네이버 클라우드로 리눅스 서버 생성을 완료했다면,
윈도우 사용자는 포트포워딩 설정을 통해 외부포트를 생성하고 Putty와 같은 프로그램으로 접속할 수 있다.
5. MySQL 계정 생성
https://all-record.tistory.com/96
MySQL을 사용해 DB를 관리하기 위해 root 계정을 만들어야 한다.
6. 도메인 연결 (무료)
https://hanazuou.tistory.com/362
만든 서버에 항상 IP 주소로 접근하는 것이 아니라, 새로 도메인을 생성해서 접근할 수 있도록 하는 방법이다.
내 신입 포트폴리오 HTML 파일들도 서버 안에 위치시키고
위의 방법으로 도메인을 받아서 사이트를 공유했다.
7. 서버에 PHP 파일 업로드

도메인 연결까지 완료하면, 파일질라 같은 FTP 프로그램을 이용해 root 계정으로 접속을 하고
PHP 파일이나 HTML 파일들은 /var/www/html 경로에 옮기면 된다.
그러면 도메인/파일.html 또는 도메인/파일.php 와 같은 주소로 접근할 수 있게 된다.
8. euc-kr 인코딩 설정
한글이 깨질 때는 먼저 두 가지를 체크해 보면 된다.
PHP 내에서 인코딩 설정
https://webisfree.com/2014-11-08/[php]-utf-8에서-euc-kr-변경-또는-euc-kr에서-utf-8-iconv()
MySQL 내에서 인코딩 설정
https://nesoy.github.io/articles/2017-05/mysql-UTF8
9. 웹 서버에서 유니티 번들 리소스 다운로드받기
https://docs.unity3d.com/kr/2018.4/Manual/UnityWebRequest-DownloadingAssetBundle.html
내 포트폴리오에서 이 기능은 사용하지는 않았다.
보통의 모바일 게임들은 게임 APK 파일의 용량을 줄이기 위해, 게임 내 모든 리소스를 APK에 포함하지 않는다.
리소스를 에셋 번들로 만들어서 CDN이나 웹 서버에 놓고서 게임 실행 시 다운로드하게 하는 구조를 주로 택하고 있다.
10. DBMS(SQL 클라이언트) 선택
https://wakestand.tistory.com/496
웹 서버 내에 존재하는 MySQL을 윈도우에서 쉽게 관리하기 위해서는
여러 가지 SQL 클라이언트 프로그램 중 하나를 선택해서 사용해야 한다.
그중에서 나는 DBeaver를 사용했었다.