왜 하는가?
- 현재 클라우드 컴퓨팅으로 24시간 마인크래프트 서버를 운영 중이다.
- 서버는 24시간 가동 중이지만, 실제 사용은 24시간이 아닌 특정 시간대에 집중된다.
- 안 쓰는 시간 동안 서버를 중지하면 비용을 아낄 수 있을 것으로 기대한다.
- 그렇게 비용을 아끼면 전체 서버 비용을 줄이거나 같은 비용으로 더 높은 사양의 서버를 이용할 수 있게 될 것이다.
요구 사항
- 시간 단위 또는 분 단위 요금을 부과하는 클라우드 서비스를 이용해야 한다.
- 서버가 중지된 시간 동안은 비용이 없거나 최소한으로만 발생해야 한다.
- 올웨이즈-온(Always-on) 방식보다 비용이 저렴해야 한다.
- 서버가 중지된 상태에서 사용자가 접속하려고 할 때 별도의 행동(e.g. 웹 페이지를 통한 요청 등)이 필요 없어야 한다.
- 서버가 중지된 상태에서 사용자가 접속하려고 할 때 사용자를 오래 기다리게 하면 안 된다.
대략적인 방안
특정 시간에 자동으로 켜지고 꺼지게 하기
사용자가 주로 접속하는 시간은 평일 점심 시간과 저녁 시간, 주말이다.
점심 시간이 시작 되기 전 오전 11시 50분에 서버를 시작하고 점심 시간이 종료된 이후 오후 1시 10분에 서버를 종료한다.
이후 오후 6시에 서버를 시작하고 다음 날 오전 1시에 서버를 종료한다.
주말에는 24시간 가동한다.
장점
- 구현이 쉽다.
- 정해진 시간에는 빠르게 서버에 접속이 가능하다.
단점
- 정해진 시간이 아니면 접속이 불가하다.
- 정해진 시간에 사용자가 없다면 불필요한 서버 가동이 발생한다.
사용자의 접속 시도가 있으면 서버를 켜고 접속자가 없으면 서버를 끄기
사용자의 접속 시도가 있으면 저장된 월드와 설정을 불러와 서버를 시작한다.
일정 시간 동안 접속자가 없으면 서버를 종료한다.
장점
- 실제 사용자가 접속하는 시간에 맞게 탄력적으로 서버가 가동된다.
단점
- 구현이 어렵다.
- 서버가 꺼져 있는 상태에서 접속을 시도하는 경우 사용자가 오래 기다릴 수 있다. (콜드 스타트)
어떻게?
서버 시작 방법
서버 시작을 요청할 수 있는 웹 페이지 제공
서버가 꺼져 있는 상태에서 접속을 원하는 사용자는 웹 페이지에 들어가서 서버 시작을 요청한다.
구현이 쉽고, 콜드 스타트를 고려해 미리 서버를 요청할 수 있지만, 서버에 접속하기 위해 별도의 행동이 요구된다는 점에서 UX적으로 좋지 않다.
앞단에 사용자 접속을 대기하는 리스너 두기
서버가 꺼져 있는 상태에서도 클라이언트에서 서버가 켜져 있는 것처럼 인식되도록 마인크래프트 프로토콜로 리스닝을 한다.
서버가 꺼져 있는 상태에서 사용자가 접속을 시도하면 본 서버를 시작한다. (콜드 스타트)
본 서버가 켜지면 사용자의 트래픽을 본 서버로 프록시 한다.
사용자는 콜드 스타트로 인해 대기 시간이 발생하지만 올웨이즈-온 서버처럼 자연스럽게 접속할 수 있다.
서버 종료 방법
사용자 접속 해제 이벤트를 감지하여 서버 끄기
플러그인으로 서버에서 플레이어가 나갔을 때 이벤트를 감지할 수 있다.
모든 플레이어가 나갔을 때(= 마지막 플레이어가 나갔을 때 = 플레이어가 나갔는데 접속자가 0이면) 서버를 종료한다.
나가자마자 바로 꺼버리면 불편할 수 있기 때문에 일정 시간(10분 정도?) 대기 후 그래도 접속자가 없으면 그때 서버를 종료하는 것이 좋을 것 같다.
서버 구현체(Paper, Sponge 등)에 의존적이다.
외부에서 서버 정보를 질의하여 접속자가 0이면 서버 끄기
일정 시간 마다 서버의 접속자 수를 질의하여 0이면 서버를 종료한다.
0으로 감지되자 마자 바로 꺼버리면 불편할 수 있기 때문에 다음 주기에도 연속으로 0으로 확인되는 경우에 서버를 종료하는 것이 좋을 것 같다.
리스너에서 이 역할을 하면 좋을 것 같다.
월드 저장 방법
오브젝트 스토리지
서버 종료 시 월드와 서버 설정을 오브젝트 스토리지에 업로드한다.
서버 시작 시 월드와 서버 설정을 오브젝트 스토리지에서 다운로드한다.
저장 비용은 저렴하지만, 네트워크 비용은 비싸다. 월드 용량이 커질 수록 콜드 스타트가 느려진다.
스냅샷
서버 종료 시 서버를 통째로 스냅샷으로 저장한다.
서버 시작 시 스냅샷으로 통째로 복구한다.
저장 비용은 저렴하지만, 월드 용량이 커질 수록 콜드 스타트가 느려진다.
블록 스토리지
월드와 서버 설정을 인스턴스가 삭제되어도 유지되는 블록 스토리지에 저장한다.
서버 시작/종료 시 용량과 관계 없이 순수하게 인스턴스 생성/삭제 시간만 소요된다.
저장 비용이 상대적으로 비싸지만, 콜드 스타트가 상대적으로 빠르다.
어떤 클라우드를 쓸 것인가?
AWS
이러한 구조에서 최강자. 하지만 비용이 비싸다.
iwinv
가성비는 좋지만, 일 단위 요금 체계다. API도 아직 정식으로 제공되지 않고 베타 테스트 중이다.
2025.05.24 - [클라우드] - iwinv 인스턴스 타입 비교 벤치마크
iwinv 인스턴스 타입 비교 벤치마크
이전에 Vultr 벤치마크를 돌려보고 타 클라우드 서비스 성능이 궁금하기도 했고, 최근에 잠깐 iwinv 인스턴스를 생성해서 잠깐 사용하는 김에 벤치를 돌려봤는데 의외로(?) 점수가 꽤 잘 나와서 아
blog.sysbot32.com
Vultr
시간당 요금 지원하고, API도 잘 지원된다. 가성비도 괜찮다.
인스턴스의 스토리지가 기본으로 포함되어 있어서 그걸 이용하지 않고 별도의 스토리지를 추가하는 건 뭔가 낭비로 보인다.
별도의 블록 스토리지를 추가할 수 있으나, 서울 리전은 HDD만 된다.
HDD에 그대로 두고 운영을 하자니 성능 저하가 걱정이 되고, 콜드 스타트 시 SSD로 옮겨서 쓰자니 용량에 비례해서 콜드 스타트가 느려진다.
2025.03.13 - [클라우드] - Vultr 인스턴스 타입 비교 벤치마크
Vultr 인스턴스 타입 비교 벤치마크
Vultr에는 인스턴스 타입이 여러 종류 있는데, 어떤 것을 선택해야 유리한지 판단하기 위해 알아보자. 비교 대상비교하려는 대상은 다음과 같다.Shared - Regular Performance2 vCPUs, 4 GB, $20.00 /mo (vc2-2c-4gb)
blog.sysbot32.com
2025.08.11 - [클라우드] - Vultr HDD 블록 스토리지 벤치마크
Vultr HDD 블록 스토리지 벤치마크
컴퓨팅 인스턴스 벤치마크는 이전에 쓴 글을 참고하기 바란다.2025.03.13 - [클라우드/Vultr] - Vultr 인스턴스 타입 비교 벤치마크 Vultr 인스턴스 타입 비교 벤치마크Vultr에는 인스턴스 타입이 여러 종
blog.sysbot32.com
OCI
상시 무료 클라우드로 유명한 OCI. 오라클이라서 비쌀 거 같지만, 알고보면 유료도 가성비가 의외로(?) 괜찮다.
OCI는 아직 써본 적이 없어서 어떻게 구성해야 할지 감이 안 오지만, 한 번 도전해볼만 한 것 같다.
'마인크래프트' 카테고리의 다른 글
[Bukkit] 플러그인 명령어 개발 (1) | 2025.06.14 |
---|