안녕하세요, ZEP 개발팀입니다.
더 나은 서비스 환경과 안정성 제공을 위해 무중단 배포 시스템을 도입한 새로운 서버 업데이트 방식이 적용될 예정입니다. 이와 관련하여 스크립트 앱 개발자분들께서 알아두셔야 할 내용을 안내드립니다.
서버 업데이트가 진행될 때, 플레이어의 연결이 끊기거나 스페이스에서 퇴장당하지 않고 새롭게 배포된 서버로 자연스럽게 자동 이동되는 기능입니다.
기존: 서버 업데이트가 진행될 때, 모든 서비스 서버가 중단되며 접속 중인 유저들은 접속이 끊겨 강제로 새로고침을 하게 됩니다.
변경: 서버 업데이트가 진행될 때, 접속 중인 유저들이 자연스럽게 새 버전의 서버로 이동되어 새로고침 없이 이용 가능합니다.
무중단 배포가 실행되면 기존 서버의 스크립트 앱이 종료되고, 새로운 서버에서 스크립트 앱이 재시작됩니다. 이 과정에서 다음과 같은 상황이 발생할 수 있습니다.
메모리 데이터 초기화: 변수, 게임 진행 상태 등 메모리에만 저장해 둔 데이터가 유실됩니다.
시간 기반 로직 초기화: 진행 중이던 타이머(Timer) 및 인터벌(Interval)이 초기화됩니다.
진행 중인 콘텐츠 중단: 실행 중이던 미니게임이나 이벤트가 예기치 않게 중단될 수 있습니다.
무중단 배포 환경에서도 플레이어에게 매끄러운 경험을 제공하려면, 기존 게임 상태와 데이터를 안전하게 보존하고 새 서버에서 복원하는 로직이 필요합니다. 배포 시 유지되어야 하는 중요한 데이터는 메모리 변수 대신 반드시 ScriptApp.storage를 활용하여 저장해 주시기 바랍니다.
무중단 배포가 시작될 때 호출되는 콜백 함수를 활용하여, 현재 게임의 상태를 Storage에 안전하게 보관할 수 있습니다.
// TypeScript
ScriptApp.onMigrationStart.Add(() => {
// 마이그레이션 시작 전 처리
// 예: 현재 게임 상태를 Storage에 저장
ScriptApp.setStorage(JSON.stringify(currentGameState));
});
// javascript
App.onMigrationStart.Add(() => {
// 마이그레이션 시작 전 처리
// 예: 현재 게임 상태를 Storage에 저장
App.setStorage(JSON.stringify(currentGameState));
});
무중단 배포 후 앱이 새롭게 시작될 때, Storage에 보관해 두었던 데이터를 불러와 기존 상태를 매끄럽게 복원하는 로직을 추가해 주세요.
// TypeScript
ScriptApp.onInit.Add(() => {
// Storage에서 이전 상태를 불러와 게임 환경 복원
ScriptApp.getStorage((savedState) => {
if (savedState) {
restoreGameState(JSON.parse(savedState));
}
});
});
// javascript
App.onInit.Add(() => {
// Storage에서 이전 상태를 불러와 게임 환경 복원
App.getStorage((savedState) => {
if (savedState) {
restoreGameState(JSON.parse(savedState));
}
});
});
플레이어가 입장할 때 player.isMigrationJoin 속성을 확인하면, 일반 신규 입장 유저와 무중단 배포 과정에서 재입장 처리된 유저를 구분하여 맞춤형 처리를 할 수 있습니다.
// TypeScript
ScriptApp.onJoinPlayer.Add((player) => {
if (player.isMigrationJoin) {
// 무중단 배포로 인해 연결이 유지된 플레이어 (기존 플레이 상태 복원)
restorePlayerState(player);
} else {
// 신규 입장한 일반 플레이어 (초기화 처리)
initializePlayer(player);
}
});
// javascript
App.onJoinPlayer.Add((player) => {
if (player.isMigrationJoin) {
// 무중단 배포로 인해 연결이 유지된 플레이어 (기존 플레이 상태 복원)
restorePlayerState(player);
} else {
// 신규 입장한 일반 플레이어 (초기화 처리)
initializePlayer(player);
}
});
일정
6월 이후로는 무중단 배포가 진행 예정입니다. 6월 이전에 스크립트 앱 가이드에 맞춰 수정 작업 부탁드립니다.
문의
개발 및 적용 과정에서 궁금하신 점이나 도움이 필요하신 경우, 언제든지 채널톡으로 문의해 주시기 바랍니다.
감사합니다.